基於 docker 的我的網站部署

vps我的網站遷移的問題

4月份的時候,如今的 vps 提供商升級了硬件配置,爲了充分使用vps的資源,我只好重裝了操做系統。node

原本計劃今年把我的的vps主機從國外遷回來,因此爲了方便後面的遷移,我把主機上的服務都部署到了 docker 建立的容器環境中,方便後面遷移。mysql

使用了一段時間,運行比較穩定。nginx


docker 簡單介紹

Docker 是 PaaS 提供商 dotCloud 開源的一個基於 LXC 的高級容器引擎,能夠把整個環境部署到裏面,而後打包發放。這個打包包括了容器的操做系統環境,在另外一臺安裝了docker的系統上能夠導入鏡像文件運行。web

LXC 旨在提供一個共享kernel的 OS 級虛擬化方法,在執行時不用重複加載Kernel, 且container的kernel與host共享,所以能夠大大加快container的 啓動過程,並顯著減小內存消耗。redis

docker容器中運行的進程性能接近本地應用程序。sql


docker 經常使用命令

  1. docker pull: 從倉庫中拖鏡像mongodb

  2. docker run:建立容器docker

  3. docker stop:中止容器運行shell

  4. docker start:開始容器運行數據庫

  5. docker commit:提交容器到鏡像

  6. docker images: 查看當前有的鏡像

  7. docker ps:查看當前啓動的容器


vps主機環境

  1. vps: linode

  2. 系統: Ubuntu 14.04 LTS

  3. docker: Docker version 0.9.1(直接 apt-get 安裝)

  4. image 版本: Ubuntu 12.04 LTS

須要注意安裝 docker 的時候確認內核版本,要在 3.10 以上


建立 docker 容器

建立數據目錄 /data

  1. /data 目錄中將用來存放容器中 mongdb,mysql,redis 等數據庫文件,還有我的站點的文件。

  2. 在 /data 中放置了容器啓動後執行的腳本文件,這樣能夠啓動容器內的服務。


建立 /data/docker_config/myboot.sh 腳本

這個腳本是容器啓動後運行的腳本,由於這個腳本是放在/data目錄下,因此能夠在宿主系統上修改, 這樣就能夠選擇在啓動容器的時候是運行shell,仍是直接運行服務程序。

腳本啓動的服務:

  1. supervisord 服務,容器內的服務(mysql,mongodb,redis)都是使用這個管理。

  2. sshd服務,遠程訪問。

#!/usr/bin/env bash

# 容器啓動時啓動服務程序
if [ -f /bin/bashno ]; then
# 容器啓動時啓動 shell
#if [ -f /bin/bash ]; then
/bin/bash
else
cron
/usr/sbin/munin-node --config /etc/munin/munin-node.conf
supervisord
/usr/sbin/sshd -D
fi


用下面的命令建立容器

# 從  https://index.docker.io/ 下載鏡像
docker.io pull ubuntu

# 建立容器
docker.io run -d -m 3G -h 'mydocker' -p 80:80 -p 32000:22 -p 35000:35000 -p 37064:37064 \
-v /data:/data -w /data --name mydocker_c ubuntu /data/docker_config/myboot.sh

  1. 上面是建立容器命令,映射容器的80,22,35000端口對外提供服務。

  2. 把本地的目錄 /data 掛載到容器中

  3. 設置容器啓動執行的腳本文件 /data/docker_config/myboot.sh


查看當前容器

docker.io ps -a


配置容器

第一次啓動容器時,配置啓動執行腳本啓動從 shell 啓動,這樣執行命令 docker.io start mydocker_c 就能夠啓動到 shell,就能夠安裝須要的軟件和服務了。

安裝sshd,supervisord,mongodb,mysql,redis等程序

配置 supervisord 管理服務程序。

配置 supervisord 管理 mongodb 服務, 建立文件 /etc/supervisor/conf.d/mongodb.conf,內容以下:

[program:mongodb]
autostart=true
user=mongodb
directory=/var/run/mongodb/
command=mongod run -f /etc/mongodb.conf --pidfilepath /var/run/mongodb/mongodb.pid

用 supervisord 管理其餘服務的方法與上面相同。

# 啓動服務
user@host: ~ $ supervisorctl start

# 查看服務狀態
user@host: ~ $ supervisorctl status

mongodb                          RUNNING    pid 14, uptime 5:50:47
mysql                            RUNNING    pid 21, uptime 5:50:47
nginx                            RUNNING    pid 16, uptime 5:50:47
redis                            RUNNING    pid 15, uptime 5:50:47
sentry-web:sentry-web_00         RUNNING    pid 19, uptime 5:50:47
sentry-web:sentry-web_01         RUNNING    pid 20, uptime 5:50:47
sentry-web:sentry-web_02         RUNNING    pid 17, uptime 5:50:47
sentry-web:sentry-web_03         RUNNING    pid 18, uptime 5:50:47
webpy:00                         RUNNING    pid 32, uptime 5:50:47
webpy:01                         RUNNING    pid 33, uptime 5:50:47
webpy:02                         RUNNING    pid 25, uptime 5:50:47
webpy:03                         RUNNING    pid 27, uptime 5:50:47
webpy:04                         RUNNING    pid 41, uptime 5:50:47
webpy:05                         RUNNING    pid 42, uptime 5:50:47
webpy:06                         RUNNING    pid 35, uptime 5:50:47
webpy:07                         RUNNING    pid 36, uptime 5:50:47


建立本身的鏡像文件

配置完成後進行下面操做:

  1. 退出容器,用命令 docker.io stop mydocker_c 中止容器運行。

  2. 修改容器啓動腳本配置直接啓動服務,而後從新啓動容器(docker.io start mydocker_c),用 ssh 登陸容器,看配置的服務是否都正常啓動。

  3. 確認一切正常後用命令中止容器運行。

  4. 使用 docker.io commit 建立當前系統的鏡像文件,之後就能夠導出這個鏡像文件來使用了。


完成

容器如今啓動後,能夠自動運行部署的服務。

如今能夠 push 鏡像文件到遠程的倉庫( [ https://index.docker.io/   https://index.docker.io/] ),也能夠導出使用。我的站點遷移的時候只要把鏡像文件導出,而且把 /data 目錄打包從新在新的機器上導入鏡像文件,解壓 /data 目錄便可使用(mysql 數據庫可能須要用腳本導出再導入,要根據本身的配置來調整,mongodb服務器的數據文件能夠直接使用)


原文連接: http://www.hopez.org/blog/5/1403610274

相關文章
相關標籤/搜索