[入門] 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程式碼測試運行。