docker容器互聯 分離部署PHP 和 nginx(端口映射方式)

首先確保已經正確安裝docker,而且能夠聯網。。。php

本人是 mac環境,其餘環境可能略有差別。。。nginx

 

1.nginx容器

docker search nginx
docker pull nginx
docker run -it --name nginx -v /Users/xxx/www:/data -p 80:80 nginx /bin/bash

1)拉取docker官方的nginx鏡像;docker

2)從剛拉取的nginx鏡像 run一個新容器 ;指定容器名 nginx ,掛載本地目錄/Users/xxx/www到容器中的/data,映射80端口到主機的80端口;vim

跑起來後,若是沒有意外 在主機上訪問 http://127.0.0.1/ 就能夠看到 「Welcome to nginx!」了。。。bash

 

2.php容器

docker run -it --name php-fpm -v /Users/xxx/www:/data -p 9000:9000 php:7.1.8-fpm /bin/bash

這裏 能夠不用先拉取鏡像,docker檢查本地不存在所請求的鏡像會自動去docker-hub 拉取;編輯器

其次,這裏使用了php:7.1.8-fpm 冒號後面是鏡像版本,默認是latest,這裏不用latest 緣由是裏面貌似沒有fpm,具體版本號能夠參考docker-hub網站,也可使用其餘鏡像。。。php-fpm

 

3.配置 nginx和fpm

1)fpm測試

找到php-fpm的配置文件 www.conf ,將 listen = xxxxxxxxxxx 改成 :網站

listen = 0.0.0.0:9000spa

listen = 127.0.0.1:9000

均可以,而後運行命令 php-fpm (或者 全路徑;或者 service php-fpm start ;或者 php-fpm start 等等。。。)

在/var/www 新建一個php文件,寫好測試代碼;

 

2)nginx

編輯nginx 虛擬目錄配置文件 :

vi /etc/nginx/conf.d/default.conf(容器默認沒有vi,可經過 apt-get update; apt-get install vim; 安裝編輯器)

location ~ \.php$ {
        root           /var/www;
        fastcgi_pass   172.17.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

root 的值很重要,這裏要填php容器中php項目所在目錄 而不是nginx容器中的路徑;之前nginx和PHP裝在一臺「機器」時不存在這個問題,如今分離部署必定要注意。(順便多說一點,fastcgi_param 參數配置的是nginx請求php-fpm時須要帶過去的參數,SCRIPT_FILENAME 表示fpm要執行的PHP文件的路徑,而 $document_root的值 就是前面的 root 參數的值,因此root固然要配置成php容器中的php路徑。。。)

fastcgi_pass 這裏的ip地址可使用php容器的ip(個人是172.17.0.4),可是容器的ip可能會在容器重啓後發生變化,因此這裏使用容器的網關(172.17.0.1)。這裏說幾種查看容器 ip 的方法:

1.從宿主機查看

 $ docker inspect --format '{{ .NetworkSettings }}'  容器id

2.容器中查看

    a. ifconfig  這個應該很熟,只是容器通常默認沒有安裝:apt-get install -y net-tools

    b. ip addr

配置好後 重啓nginx,訪問測試php文件,沒有意外就看到你想看到的東西了。。。

 

還有一種是經過 --link 參數在容器之間創建鏈接,我的感受 端口映射更靈活。。。

相關文章
相關標籤/搜索