基于 docker 的個人網站部署

jopen 10年前發布 | 99K 次閱讀 Docker 虛擬化

vps個人網站遷移的問題

4月份的時候,現在的 vps 提供商升級了硬件配置,為了充分使用vps的資源,我只好重裝了操作系統。

本來計劃今年把個人的vps主機從國外遷回來,所以為了方便后面的遷移,我把主機上的服務都部署到了 docker 創建的容器環境中,方便后面遷移。

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

 

docker 簡單介紹

Docker 是 PaaS 提供商 dotCloud 開源的一個基于 LXC 的高級容器引擎,可以把整個環境部署到里面,然后打包發放。這個打包包括了容器的操作系統環境,在另一臺安裝了docker的系統上可以導入鏡像文件運行。

LXC 旨在提供一個共享kernel的 OS 級虛擬化方法,在執行時不用重復加載Kernel, 且container的kernel與host共享,因此可以大大加快container的 啟動過程,并顯著減少內存消耗。

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

 

docker 常用命令

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

  2. docker run:創建容器

  3. docker stop:停止容器運行

  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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!