項目地址https://github.com/ydtg1993/server?更全面的文獻解釋
使用docker搭建靈活的線上php環(huán)境 有時候不太需要一些別人已經(jīng)集成了的包或者鏡像 我們就可以使用以下方式逐一構(gòu)建自己所需要的環(huán)境結(jié)構(gòu)
(一階)使用docker逐一構(gòu)建
1.git拉取server項目 放到服務(wù)器根目錄?(到后面你也可以構(gòu)建自己風(fēng)格的環(huán)境結(jié)構(gòu))
2.下載鏡像
sudo docker pull php:7.2-fpm????????冒號后選擇版本
sudo docker pull nginx
sudo docker pull mysql:8.0????????不需要本地數(shù)據(jù)庫可忽略
sudo docker pull redis:3.2????????不需要本地redis可忽略
sudo docker images? 查看已下載的所有鏡像
3.下載完成鏡像后運行容器? [以下采用--link方式創(chuàng)建容器 注意創(chuàng)建順序]
[運行mysql容器]
sudo docker run --name mydb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
? ? 注:-MYSQL_ROOT_PASSWORD=123456 給mysql設(shè)置初始密碼??如果不需要搭建本地數(shù)據(jù)庫直接下一步
[運行redis容器]
sudo docker run --name myredis -p 6379:6379 -d redis:3.2
? ? 注:如果不需要搭建本地redis直接下一步
[運行php容器]
sudo docker run -d -p 9000:9000 --name myphp -v /server/www:/var/www/html -v /server/php:/usr/local/etc/php --link mydb:mydb --link myredis:myredis --privileged=true? php:7.2-fpm
? ? 注:如果不需要搭建本地數(shù)據(jù)庫或者redis可以省去--link mydb:mydb --link myredis:myredis
[運行nginx容器]
sudo docker run --name mynginx -d -p 80:80 -v /server/www:/usr/share/nginx/html -v /server/nginx:/etc/nginx -v /server/logs/nginx.logs:/var/log/nginx --link myphp:myphp --privileged=true? nginx
注:-v語句冒號后是容器內(nèi)的路徑 我將nginx的網(wǎng)頁項目目錄 配置目錄 日志目錄分別掛載到了我事先準備好的/server目錄下? ? ? ? ? ? ? --link myphp:myphp 將nginx容器和php容器連接 通過別名myphp就不再需要去指定myphp容器的ip了
sudo docker ps? -a????????查看所有容器 確定都運行成功環(huán)境基本就完成了? ?
4.PHP擴展庫安裝
進入容器
sudo docker exec -ti myphp? /bin/bash
docker-php-ext-install pdo pdo_mysql????????安裝pdo_mysql擴展
docker-php-ext-install? redis
[此時報錯提示redis.so 因為一些擴展并不包含在 PHP 源碼文件中]
方法一:
tar zxvf /server/php_lib/redis-4.1.0.tgz? ? ? ? 解壓已經(jīng)下載好的redis擴展包
sudo docker cp /server/php_lib/redis-4.1.0 myphp:/usr/src/php/ext/redis? ? ? ? 放到容器中
? ? 注:直接將擴展包放到容器ext目錄里可能會報錯Error: No such container:path: myphp:/usr/src/php/ext
你可以多開一個服務(wù)器窗口 進入php容器中執(zhí)行docker-php-ext-install? redis此時報錯error: /usr/src/php/ext/redis does not exist
然后在你的第一個窗口執(zhí)行上條命令就成功了
方法二:
pecl install redis && docker-php-ext-enable redis????????用 pecl install 安裝擴展
docker restart myphp? 退出容器后重啟php容器
### 其它命令
docker stop $(docker ps -q)? 停止所有容器
docker rm $(docker ps -aq)? 刪除所有容器
docker inspect myphp? 查看容器配置信息
(二階)docker-compose自動化構(gòu)建
? ? 完成以上步驟你就已經(jīng)初步了解了docker的基本容器操作
? ? docker-compose是編排容器的。例如颊艳,你有一個php鏡像惰帽,一個mysql鏡像锡宋,一個nginx鏡像萎战。如果沒有docker-compose,那么每次啟動的時候揉阎,你需要敲各個容器的啟動參數(shù)庄撮,環(huán)境變量,容器命名余黎,指定不同容器的鏈接參數(shù)等等一系列的操作重窟,相當繁瑣。而用了docker-composer之后惧财,你就可以把這些命令一次性寫在docker-composer.yml文件中巡扇,以后每次啟動這一整個環(huán)境(含4個容器)的時候,你只要敲一個docker-composer up命令就ok了
1.安裝docker-compose
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
2.一鍵部署環(huán)境
? ? /server/compose/docker-compose.yml已經(jīng)配置好了 直接輸入命令
? ? cd /server/compose
? ? docker-compose up -d
????對比上面運行容器命令來看docker_yml的配置結(jié)構(gòu)就一目了然了
?(三階)dokcer-compose和dockerfile 完整構(gòu)建
? ? 用了docker-compose實現(xiàn)一鍵式操作 但問題是PHP的擴展庫還是得自己單獨裝 所以這里需要用到Dockerfile來構(gòu)建自定義容器鏡像
? ? 實現(xiàn)真正的一鍵完成
? ? cd /server/compose.dockerfiles
? ? docker-compose up -d