Docker容器LNMP環境搭建
安裝
系統環境
- 硬件型號: ThinkPad T520
- 系統版本: ubuntu 14.04
- CPU: i7
- RAM: 8G
添加軟件源
由於Ubuntu源中的最先版本為0.9無法滿足要求,所以需要使用Docker的官方源
添加密鑰:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys \
36A1D7869245C8950F966E92D8576A8BA88D21E9
源地址: deb http://get.docker.io/ubuntu docker main
添加源可以通過"軟件和更新->其它軟件->添加"來操作
添加后執行如下命令:
$ sudo apt-get update
$ sudo apt-get install lxc-docker-1.1.1
注: 官方給出的源地址為https連接的,但是總是出現ssl驗證失敗的錯誤,最后改為非
ssl連接之后正常
測試
執行如下命令獲取容器鏡像,創建一個實例並打開一個實例shell
$ sudo docker run -t -i centos:latest /bin/bash
注:第一次運行由於需要下載鏡像可能需要多等一會兒
運行成功后會有一個新的shell提示符
制作鏡像
要求
- web容器安裝Nginx+PHP服務
- 數據庫容器安裝Mysql服務
- web服務和數據庫分離
- web服務容器可以訪問數據庫容器
制作nginx+php鏡像
啟動一個容器實例:
$ sudo docker run -t -i centos:latest /bin/bash
安裝nginx與PHP:
Nginx可以使用源碼或rpm包進行安裝,PHP可以使用源碼或yum安裝.具體安裝和配置這里
不進行具體講述.注:需要把nginx與php-fpm添加到系統服務中並設置開機啟動
我設置的站點根目錄為/opt/web退出shell並執行如下命令制作鏡像:
$ sudo docker commit -m="web service image nginx+php" -a="username" \
sudo docker ps -lq
username/web:v1
這是一個組合命令:
sudo docker commit根據已有實例制作鏡像
sudo docker ps -lq返回最后一個運行的實例id
已有鏡像可以使用sudo docker images 查看
至此創建了第一個鏡像 username/web:v1
制作mysql鏡像
啟動實例:
$ sudo docker run -t -i centos:latest /bin/bash
安裝Mysql.
設置Mysql服務開機啟動:
$ chkconfig mysqld on
啟動mysql.
修改mysql登陸權限:
mysql> grant all privileges on . to 'root'@'%' identified by 'dbpasswd';
mysql> flush privileges;
mysql服務默認只能本地連接,制作鏡像的時候需要注意.否則是無法連接到數據庫的.
退出shell並執行如下命令制作mysql容器鏡像:
$ sudo docker commit -m="mysql service image" -a="username" \
sudo docker ps -lq
username/mysql:v1
清除不再需要的實例:
$ sudo docker rmsudo docker ps -aq
啟動並關聯實例
web實例依賴與mysql,所以先打開一個mysql實例:
$ sudo docker run -d --name db username/mysql:v1 /sbin/init
-d參數是讓實例以dameon的形式運行. /sbin/init是創建實例后執行的操作,此處為初
始化系統服務,包括運行mysql.啟動web實例並與數據庫實例進行關聯:
$ sudo docker run -d --name web --link db:db -p 8080:80 -v /path/to/src:/opt/web username/web:v1 /sbin/init
--link參數設置關聯的容器,可以設置多個.關聯之后會自動更新web容器的host,把db
的地址指向到數據庫容器的地址.
-p 參數用來進行ip映射.此處把容器的80端口映射到了本地的8080端口.web服務可是
通過localhost:8080訪問.
-v 參數把數據掛載到容器指定目錄.此處為把站點源碼目錄掛載到容器的站點目錄.
在web容器中訪問數據庫容器的mysql服務可以使用db這個主機地址.