阿里雲ECS+CentOS 7.0+Docker+Redmine環境搭建
前言
搭建Redmine環境可以選擇使用分別安裝Ruby+Rails+Redmine+MySQL的方式,
但是過程中需要解決各種擾人的依賴問題。Docker為我們提供的Plan B,方便,快捷。
安裝環境
當然可以選擇Ruby+Rails+Redmine+MySQL的安裝方式,請參考:
阿里雲ECS安裝
因為是實際生產需要,所以,直接購買阿里雲的ECS。
安裝和使用方法參考:
安裝CentOS 7.0
Docker官方的說明:
“系統的要求跟 Ubuntu 情況類似,64 位作業系統,核心版本至少為 3.10。
Docker 目前支援 CentOS 6.5 及以後的版本,推薦使用 CentOS 7 系統。”
所以購買ECS後,請選擇CentOS 7系統。
CentOS 7核心升級
更新核心兩種方法,編譯安裝和非編譯安裝:
編譯安裝
非編譯安裝
我選擇的是非編譯安裝方式,很方便。
升級流程
1,檢視核心版本
uname -r
3.8.0-44-generic
2,匯入 Public Key
3,安裝 ELRepo
4,升級 Kernel
yum --enablerepo=elrepo-kernel install kernel-lt -y
5,更改 Grub
vim/etc/grub.conf
根據安裝好以後的核心位置,修改 default 的值,一般是修改為0,因為 default 從 0 開始,一般新安裝的核心在第一個位置,
所以設定default=0。就是檔案最上面的那個default
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/sda1
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.28-1.el6.elrepo.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-3.10.28-1.el6.elrepo.x86_64 ro root=UUID=0a05411f-16f2-4d69-beb0-2db4cefd3613 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=en_US.UTF-8
6,重啟CentOS
init 6
7,檢視核心版本
uname -r
3.10.0-327.18.2.el7.x86_64
8,核心升級完成
安裝Docker
1,新增 yum 軟體源
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
2,更新 yum 軟體源快取
yum update
3,安裝 docker-engine
yum install -y docker-engine
4,配置讓 Docker 服務在系統啟動後自動啟動。
CentOS 7中支援的新式 systemd 語法,如下:
systemctl start docker.service
systemctl enable docker.service
另附舊語法,如下:
service docker start
chkconfig docker on
5,Docker安裝完成
讓我們測試一下,Docker是否安裝成功:
1,檢視Docker版本
# docker version
Client:
Version: 1.9.1
API version: 1.21
Package version: docker-common-1.9.1-40.el7.centos.x86_64
Go version: go1.4.2
Git commit: ab77bde/1.9.1
Built:
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Package version: docker-common-1.9.1-40.el7.centos.x86_64
Go version: go1.4.2
Git commit: ab77bde/1.9.1
Built:
OS/Arch: linux/amd64
2,輸入Docker然後回車,可以列印Docker的所有命令
# docker
Usage: docker [OPTIONS] COMMAND [arg...]
docker daemon [ --help | ... ]
docker [ --help | -v | --version ]
A self-sufficient runtime for containers.
Options:
--config=~/.docker Location of client config files
-D, --debug=false Enable debug mode
--disable-legacy-registry=false Do not contact legacy registries
-H, --host=[] Daemon socket(s) to connect to
-h, --help=false Print usage
-l, --log-level=info Set the logging level
--tls=false Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify=false Use TLS and verify the remote
-v, --version=false Print version information and quit
Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Register or log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
network Manage Docker networks
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save an image(s) to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code
Run 'docker COMMAND --help' for more information on a command.
測試成功。
Docker的使用
三個重要概念
1,image映象
官方解釋:
“Docker 映象(Image)就是一個只讀的模板。例如:一個映象可以包含一個完整的 ubuntu 作業系統環境,
裡面僅安裝了 Apache 或使用者需要的其它應用程式。”
把image理解為一個超級應用程式,與通常應用程式不同的地方是,它包含了應用程式執行的所有環境,如,包括一個作業系統環境。
2,container容器
容器是從映象建立的執行例項。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
由同一映象可以啟動不同的容器(例項),不同的容器由擁有不同的【container ID】【NAMES】等資訊,由Docker維護。
可以使用命令docker ps檢視正在執行的container;使用docker ps -a檢視已經退出的container。
1,檢視正在執行的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43b6756d9a6e sameersbn/redmine "/sbin/entrypoint.sh " 11 hours ago Up 10 hours 443/tcp, 0.0.0.0:10083->80/tcp redmine
8f8f4f81321e sameersbn/postgresql:9.4-21 "/sbin/entrypoint.sh" 11 hours ago Up 10 hours 5432/tcp postgresql-redmine
2,檢視所有容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43b6756d9a6e sameersbn/redmine "/sbin/entrypoint.sh " 11 hours ago Up 10 hours 443/tcp, 0.0.0.0:10083->80/tcp redmine
8f8f4f81321e sameersbn/postgresql:9.4-21 "/sbin/entrypoint.sh" 11 hours ago Up 10 hours 5432/tcp postgresql-redmine
d3fd852f511c training/webapp "python app.py" 11 hours ago Exited (137) 11 hours ago web
1f0664fda251 training/webapp "python app.py" 11 hours ago Exited (137) 11 hours ago thirsty_heisenberg
e9500a923b5f training/webapp "app.py" 11 hours ago Created clever_mirzakhani
94592c0dad84 training/webapp "app.py" 11 hours ago Created compassionate_meitner
d66bdf427b7e training/webapp "python app.py" 12 hours ago Exited (137) 11 hours ago lonely_mcnulty
5a1a8abdd530 ubuntu:14.04 "/bin/sh -c 'while tr" 12 hours ago Exited (0) 12 hours ago
。。。
可以利用容器ID的唯一性,實現資料的儲存。如,當你執行中的Remine異常停機,或者伺服器重啟導致Remine停止執行,
如果是重新通過映象啟動例項的話,原來Redmine的資料就丟失了。此時,可以通過,查詢所有容器,並通過Docker start [CONTAINER ID]重新啟動容器即可,
資料不會丟失。操作方法,後面詳細說明。
另一種方法是,使用docker commit命令把被停止的容器製作成映象,然後建立改映象的容器,也可以保證資料不丟失。
3,Repository倉庫
存放映象的地方。最大的公開倉庫是Docker Hub,存放了數量龐大的映象供使用者下載。
可以通過命令,docker search [image name]查詢你想要的映象。
Docker常用操作
1,docker search #在倉庫中查詢映象
檢視docker hub中Ubuntu的映象。
docker search ubuntu
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/ubuntu Ubuntu is a Debian-based Linux operating s... 3995 [OK]
docker.io docker.io/ubuntu-upstart Upstart is an event-based replacement for ... 63 [OK]
docker.io docker.io/rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 27 [OK]
docker.io docker.io/torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 26 [OK]
docker.io docker.io/ubuntu-debootstrap debootstrap --variant=minbase --components... 24 [OK]
docker.io docker.io/nickistre/ubuntu-lamp LAMP server on Ubuntu 7
2,docker pull #下載指定映象
使用查詢結果中的映象名稱,下載指定的Ubuntu映象,當然選擇星星數最多的。
docker pull docker.io/ubuntu
Using default tag: latest
Trying to pull repository docker.io/library/ubuntu ...
3,docker images #列出本地的所有映象
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/ubuntu 14.04 0e7d4a488bcc 34 hours ago 187.9 MB
docker.io/sameersbn/redmine latest 2d92be2b784a 3 weeks ago 653.4 MB
docker.io/sameersbn/postgresql latest 460997f40d74 3 weeks ago 231.3 MB
docker.io/sameersbn/postgresql 9.4-21 6aa1daa9f8ce 3 weeks ago 231.3 MB
docker.io/training/webapp latest 54bb4e8718e8 12 months ago 348.7 MB
4,dockerrmi #刪除映象
5,dockerps #列出當前執行中的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43b6756d9a6e sameersbn/redmine "/sbin/entrypoint.sh " 11 hours ago Up 10 hours 443/tcp, 0.0.0.0:10083->80/tcp redmine
8f8f4f81321e sameersbn/postgresql:9.4-21 "/sbin/entrypoint.sh" 11 hours ago Up 10 hours 5432/tcp postgresql-redmine
6,docker ps -a #列出所有容器,包換已退出的容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43b6756d9a6e sameersbn/redmine "/sbin/entrypoint.sh " 11 hours ago Up 10 hours 443/tcp, 0.0.0.0:10083->80/tcp redmine
8f8f4f81321e sameersbn/postgresql:9.4-21 "/sbin/entrypoint.sh" 11 hours ago Up 11 hours 5432/tcp postgresql-redmine
d3fd852f511c training/webapp "python app.py" 12 hours ago Exited (137) 12 hours ago web
1f0664fda251 training/webapp "python app.py" 12 hours ago Exited (137) 12 hours ago thirsty_heisenberg
e9500a923b5f training/webapp "app.py" 12 hours ago Created clever_mirzakhani
94592c0dad84 training/webapp "app.py" 12 hours ago Created compassionate_meitner
d66bdf427b7e training/webapp "python app.py" 12 hours ago Exited (137) 12 hours ago lonely_mcnulty
5a1a8abdd530 ubuntu:14.04 "/bin/sh -c 'while tr" 12 hours ago Exited (0) 12 hours ago
7,docker rm#刪除容器,注意加docker rm -f強制刪除容器,可以刪除執行中的容器
8,dockerrun #使用映象啟動容器,其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)並繫結到容器的標準輸入上, -i 則讓容器的標準輸入保持開啟;-d 選項來實現後天執行;
docker run -t -i ubuntu:14.04 /bin/echo 'Hello World'
Hello World
此外,如果run一個本地沒有的image,docker會先從倉庫中下載(pull)該映象,再執行run命令。
9,docker stop#終止一個執行中的容器。
當Docker容器中指定的應用終結時,容器也自動終止。 例如對於上一章節中只啟動了一個終端的容器,
使用者通過 exit 命令或 Ctrl+d 來退出終端時,所建立的容器立刻終止。
10,docker start #重新啟動終止狀態的容器
docker restart 命令會將一個執行態的容器終止,然後再重新啟動它。
安裝MySQL
redmine需要使用資料庫,所以需要先安裝MySQL
1,查詢mysql
docker search mysql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 2403 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 147 [OK]
docker.io docker.io/centurylink/mysql Image containing mysql. Optimized to be li... 45 [OK]
docker.io docker.io/sameersbn/mysql 35
2,下載指定映象
docker pull docker.io/sameersbn/mysql
安裝Redmine
1,查詢Redmine
docker search redmine
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/sameersbn/redmine 199 [OK]
docker.io docker.io/redmine Redmine is a flexible project management w... 190 [OK]
docker.io docker.io/bitnami/redmine Bitnami Docker Image for Redmine 7 [OK]
docker.io docker.io/74th/redmine-all-in-one Redmine includes hosting SVN & Git , backl... 5
2,下載Redmine
docker pull docker.io/sameersbn/redmine
啟動Redmine
1,啟動MySQL
docker run --name=postgresql-redmine-d\
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' --env='DB_PASS=password' \
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.4-21
為redmine提供的資料庫容器名稱為postgresql-redmine,-d選項,指明資料庫後天執行
2,啟動Redmine
docker run --name=redmine -d\
--link=postgresql-redmine:postgresql --publish=10083:80 \
--env='REDMINE_PORT=10083' \
--volume=/srv/docker/redmine/redmine:/home/redmine/data \
sameersbn/redmine
redmine容器的名稱為redmine,-d選項,指明資料庫後天執行;埠號為10083
伺服器重啟後,redmine和資料庫都停止了,需要重新啟動,此時,
只要找到上次停止的container名字,重新開啟即可。這樣可以保障資料不丟失。
查詢停止前的container name
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43b6756d9a6e sameersbn/redmine "/sbin/entrypoint.sh " 29 minutes ago Up 3 minutes 443/tcp, 0.0.0.0:10083->80/tcp redmine
8f8f4f81321e sameersbn/postgresql:9.4-21 "/sbin/entrypoint.sh" 33 minutes ago Up 5 minutes 5432/tcp postgresql-redmine
重新開啟資料庫(使用名稱開啟)
docker start postgresql-redmine
postgresql-redmine
重新開啟redmine
docker start redmine
redmine
3,檢視當前容器執行狀態
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43b6756d9a6e sameersbn/redmine "/sbin/entrypoint.sh " 11 hours ago Up 11 hours 443/tcp, 0.0.0.0:10083->80/tcp redmine
8f8f4f81321e sameersbn/postgresql:9.4-21 "/sbin/entrypoint.sh" 11 hours ago Up 11 hours 5432/tcp postgresql-redmine
4,安裝完成,登入伺服器,檢視是否正常執行,注意埠號為10083
首次登入,
使用者名稱:admin
密碼:admin
登入後,選擇我的賬戶,修改語言為[簡體中文]
安裝完成。
參考文章
Docker從入門到實踐
阿里雲Ubuntu環境搭建Docker服務
Docker實踐
sameersbn/redmine
使用Yum快速更新升級CentOS核心
使用yum快速升級CentOS 6.5核心到 3.10.28
CentOS 6.5搭建Redmine
ECS雲伺服器零基礎教程linux版
CentOS 6.x 核心升級(2.6.32 -> 3.10.58)過程記錄