Docker($k)搭建一套php開(kāi)發(fā)環(huán)境

導(dǎo)語(yǔ)

下面內(nèi)容將介紹如何把容器當(dāng)作一個(gè)命令來(lái)使用以及搭建一套php+nginx的 web 服務(wù),這里需要兩個(gè)鏡像,用兩個(gè)鏡像的主要目的是學(xué)習(xí)如何讓 Docker 容器之間相互通信。閱讀完下面的內(nèi)容就可以搭建自己的 Docker 服務(wù)了。

把 php 容器當(dāng)作命令行使用

鏡像下載:
docker pull php:7.0-fpm-alpine php
這里的鏡像是基于 alpine 系統(tǒng)的,因?yàn)榛赼lpine系統(tǒng)的鏡像文件會(huì)比較小,下載速度更快。由于國(guó)內(nèi)下載鏡像文件較慢,推薦使用鏡像加速器DaoCloud

圖一:docker images | grep php

下載鏡像是為了搭建一個(gè) web 服務(wù),如果只想簡(jiǎn)單的使用 php 命令行,怎么辦?我們知道從鏡像啟動(dòng)的容器中肯定是可以使用命令行,如果每次使用 php 命令行都進(jìn)入容器,顯得特別麻煩,其實(shí) Docker 可以這樣用:
docker run -it --rm php:7.0-fpm-alpine php --version

圖二:把php容器當(dāng)作命令行使用

命令比較長(zhǎng),給它設(shè)置個(gè)別名就好多了。下面介紹下相關(guān)參數(shù):
-i:以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用;
-t: 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用;
--rm:容器退出時(shí)自動(dòng)刪除,如果不加這個(gè)參數(shù),當(dāng)你執(zhí)行完上面的命令,php容器會(huì)退出,變?yōu)橐粋€(gè)暫停狀態(tài)的容器,通過(guò) docker ps -a 可以查詢到;
php --version:在容器名后面的字符會(huì)被當(dāng)作容器的shell命令來(lái)處理;
*注:關(guān)于參數(shù) -i -t ,這里上面的命令可以不加,因?yàn)闆](méi)有交互操作,在使用node容器的命令行時(shí)會(huì)有交互,需要加上,兩個(gè)參數(shù)同時(shí)使用就好:
docker run -i -t --rm node:alpine node

圖三:node容器命令行的使用

想用容器同時(shí)執(zhí)行多個(gè)命令,不能直接在后面加 &&,需要使用 sh -c來(lái)實(shí)現(xiàn),:
docker run --rm php:7.0-fpm-alpine sh -c ' echo "123" && echo "456" '

啟動(dòng)php服務(wù)

執(zhí)行命令:

docker run \
    -d \
    --name php \
    -v /root/docker/etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini:ro \
    -v /root/docker/html:/var/www/html \
    php:7.0-fpm-alpine

-d:后臺(tái)運(yùn)行容器,并且返回容器 ID;
--name:給容器命名,容器名是唯一的,操作容器時(shí)可以使用名稱代替容器 ID;
:ro:表示掛載的文件或者文件夾為只讀模式;
從命令可以知道容器是后臺(tái)運(yùn)行,名字是 php,它掛載了主機(jī)的一個(gè)文件 php.ini 和一個(gè)目錄 /root/docker/html,并且 php.ini 是只讀的,所以在容器內(nèi)不可以對(duì)這個(gè)文件做修改。/usr/local/etc/php/conf.d 這個(gè)目錄是容器中的 php 讀取用戶自定義配置文件的目錄,正常情況下都可以在 Docker Hub 上有說(shuō)明,如果沒(méi)有可以自己運(yùn)行 phpinfo(); 來(lái)查看。之前介紹過(guò),只要掛載,那么本地主機(jī)目錄就會(huì)和容器內(nèi)的目錄同步。需要修改容器的 php 配置時(shí),只要在主機(jī)本地編輯保存這個(gè) php.ini 文件,然后執(zhí)行:
docker restart php (php是容器名字)

php 容器和 nginx 容器通信

首先下載nginx鏡像:
docker pull nginx:stable-alpine
啟動(dòng) nginx 服務(wù):

docker run \
    -d \
    --link php \
    --name nginx \
    -v /root/docker/etc/nginx/conf.d/:/etc/nginx/conf.d/ \
    -v /root/docker/html:/var/www/html \
        -v /var/log/nginx:/var/log/nginx \
    -p 8088:80 \
    nginx:stable-alpine

--link:確保 nginx 可以與 php 之間通信,在 nginx 容器中直接 ping php 是可以通的,實(shí)際上加上這個(gè)參數(shù)后,會(huì)在 nginx 容器增加 host 解析,如圖:

圖四:nginx與php之間通信

增加 nginx 虛擬主機(jī)配置,放到主機(jī)目錄 /root/docker/etc/nginx/conf.d 下:

server {
    listen 80;
    root /var/www/html;
    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;

    location ~ \.php$ {
        fastcgi_pass php:9000;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log  debug;
}

fastcgi_pass 后面使用的 php 就是 --link 參數(shù)增加的host解析,直接用別名代替ip地址,更加方便。然后重啟 nginx 服務(wù):
docker restart nginx
在 主機(jī)本地的 /root/docker/html 目錄新建 index.php:
echo "<?php\nphpinfo();" | tee /root/docker/html/index.php
現(xiàn)在一個(gè) web 服務(wù)搭建好了,如圖:

圖五:web服務(wù)

查看 nginx 日志

容器內(nèi) nginx 的日志會(huì)寫入容器內(nèi)的 /var/log/nginx 目錄下,由于這個(gè)目錄和主機(jī)的 /var/log/nginx 目錄是同步的,所以,想看容器內(nèi) nginx 的日志,查看主機(jī)的文件 /var/log/nginx/access.log 就可以:
tail -f /var/log/nginx/access.log

圖六:本地查看nginx容器訪問(wèn)日志

結(jié)語(yǔ)

基本的啟動(dòng)配置服務(wù)的命令上面都有介紹,自己可以嘗試給這個(gè) web 服務(wù)增加個(gè) mysql
存儲(chǔ)功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,850評(píng)論 15 147
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 9,005評(píng)論 1 21
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,755評(píng)論 0 120
  • 0. 前言 docker是什么?docker是用GO語(yǔ)言開(kāi)發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)???..
    sessionboy閱讀 4,008評(píng)論 2 49
  • 別名:巴戟、巴吉天、戟天、巴戟肉、雞腸風(fēng)、貓腸筋、兔兒腸 基源植物:茜草科巴戟天屬植物巴戟天的干燥根。 拉丁學(xué)名:...
    本草園丁閱讀 3,923評(píng)論 0 1

友情鏈接更多精彩內(nèi)容