[入門] Docker將nginx容器和php容器關聯起來

  • 2019 年 12 月 15 日
  • 筆記

概念教程和介紹有一大堆,我就不多說了。主要記錄一下操作,方便你我查閱。

首先是在菜鳥教程里看的教程,裡面把各種鏡像、容器的概念和基本操作都說了。但是每一步都直到怎麼測試運行起來。

如:nginx,運行成功了,然後呢?沒了。其他環境要怎麼弄?

在百度上找教程,看到有人先是開了一個centos鏡像的容器,然後在上面跟一個基本伺服器一樣去yum各種環境,如php、nginx、mysql。

然後再把鏡像更新commit,說是環境就搭建好了。方法①

但這樣子的話,主機上pull下來的php和nginx又有什麼用?(按著菜鳥教程走下來的時候pull的)

於是請教前輩,是按方法①去操作還是php,nginx各開一個容器再去連接方法②,得到了方法②的回復,於是開始了漫長的道路。

  • 單容器易於分發、維護。因為它們是獨立的,所有的東西都運行在同一個容器中,這點就像是一個虛擬機。但這也意味著,當你要升級其中的某樣東西(比如PHP新版本)的時候,需要重新構建整個容器。
  • 多容器可以在添加組件時提供更好的模組化。因為每個容器包含了堆棧的一部分:Web、PHP、MySQL等,這樣可以單獨擴展每個服務或者添加服務,並且不需要重建所有的東西。

需要先把php鏡像和nginx鏡像pull下來。查看已有鏡像

docker images

 先新建一個php容器

docker run--name php1 -v/home/wwwroot/service_config/php_config:/usr/local/php/etc -v/home/wwwroot/:/home/wwwroot/ -d php:7.0-fpm

-v/home/wwwroot/service_config/php_config:/usr/local/php/etc這一句搭建可以省略

這是將主機的目錄掛載到容器里,也就是讓容器可以共享這個目錄里的文件。這樣子可以在主機靈活地去修改php配置,nginx同理。

坑:如果沒有把配置文件掛載出來,會出現配置文件出錯,然後容器就無法start了,也無法進入修改,只能刪除重新建立一個容器。

接著開啟nginx容器

docker run--name nginx   -v/home/wwwroot/:/home/wwwroot/   -v/home/wwwroot/service_config/nginx_config:/etc/nginx/conf.d   --link php1:php1   -p 80:80   -d nginx

  同樣的兩個配置掛載目錄,第一個是放項目文件的,第二個是放配置文件的

  然後再link剛剛開啟的php容器,名稱是php1,埠映射都用的80

  在開啟兩個容器之前,需要先新建好主機目錄,也就是/home/wwwroot/service_config/nginx_config等一列目錄

  然後/home/wwwroot/service_config/nginx_config文件夾中有兩個文件(這兩文件docker官方下載下來的nginx鏡像是沒有的): 

fastcgi_params文件    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    fastcgi_param QUERY_STRING $query_string;    fastcgi_param REQUEST_METHOD $request_method;    fastcgi_param CONTENT_TYPE $content_type;    fastcgi_param CONTENT_LENGTH $content_length;    fastcgi_param SCRIPT_NAME $fastcgi_script_name;    fastcgi_param REQUEST_URI $request_uri;    fastcgi_param DOCUMENT_URI $document_uri;    fastcgi_param DOCUMENT_ROOT $document_root;    fastcgi_param SERVER_PROTOCOL $server_protocol;    fastcgi_param HTTPS $https if_not_empty;    fastcgi_param GATEWAY_INTERFACE CGI / 1.1;    fastcgi_param SERVER_SOFTWARE nginx / $nginx_version;    fastcgi_param REMOTE_ADDR $remote_addr;    fastcgi_param REMOTE_PORT $remote_port;    fastcgi_param SERVER_ADDR $server_addr;    fastcgi_param SERVER_PORT $server_port;    fastcgi_param SERVER_NAME $server_name;    #PHP only, required    if PHP was built with--enable - force - cgi - redirectfastcgi_param REDIRECT_STATUS 200;

nginx.conf文件(根據你多少個網站,配置多少個。下面配置若是不懂,請查看相關文檔)

server {        listen 80;        server_name www.test.com test.com;        index index.html index.htm index.php;        root / home / wwwroot /            default;#        error_page 404 / 404.html;        location~[ ^ /].php(/ | $) {            try_files $uri = 404;            fastcgi_pass php1: 9000;#            極其重要fastcgi_index index.php;            include / etc / nginx / conf.d / fastcgi_params        }        location / nginx_status {            stub_status on;            access_log off        }        location~.*.(gif | jpg | jpeg | png | bmp | swf) $ {            expires 30d        }        location~.*.(js | css) ? $ {            expires 12h        }        location~/.{deny all}}

新建完文件後就可以開啟容器了,開啟後應該就正常了,訪問你的伺服器ip(默認就是80埠,應該就可以正常訪問nginx)

然後在剛剛的主機目錄/home/wwwroot/下新建一個目錄default (因為在nginx里設置的默認目錄,可以自己修改)

然後新建test.php 寫入php程式碼測試運行。