1. 程式人生 > >玩轉 docker 入門(4) docker 通過nginx實現反向代理 配置多域名以及多埠號

玩轉 docker 入門(4) docker 通過nginx實現反向代理 配置多域名以及多埠號

一、前言

        這段時間一直在研究docker的部署及相關開發環境、生產環境的搭建。但最終技術的學習就是用來實際使用的,所以就想將單位中的機房逐步從單機安裝環境過渡到通過docker部署多個開發環境(生產環境)。

二、需求

        單位機房的IP有限,我們都是通過“IP:埠”的形式來訪問的。這樣帶來一個弊端就是每次部署一個新的開發環境,都需要在防火牆裡部署相應的NAT(有次部署完NAT後沒有儲存,在臨時斷電後丟失了很多的NAT設定)。

        這次我的設想是將我們公司的一個(或多個)二級域名繫結在機房ip上,並在路由器中設定80埠轉發到我們已經部署docker的這臺伺服器上(假設是10.10.10.10),並通過nginx伺服器的反向代理實現訪問二級域名即可直接進入相應伺服器(或docker容器)中的開發環境。

三、docker和nginx的安裝部署

1. 安裝docker

        具體參見之前的文章,按步驟進行操作即可完成docker-io的安裝。

2. 獲取 nginx 映象

docker search nginx


3. 下載 nginx 映象

docker pull nginx

4. 建立並啟動nginx容器

docker run –name=nginx -p 80:80 -v /nginx/conf.d:/etc/nginx/conf.d -d nginx

        這樣,我們已經建立了一下名字為nginx的容器,該容器中/etc/nginx/conf.d目錄下的檔案將與宿主機中/nginx/conf.d目錄下的檔案保持同步。目錄/etc/nginx/conf.d是nginx的站點配置資料夾,下面每一個conf配置檔案各自對應一個站點。同樣,nginx反向代理的配置也得寫在裡面。

四、配置nginx的反向代理

        到了這一步,nginx的容易已經建立完畢,我們接下來修改對應的配置檔案。我在前言中講過了我們公司機房的獨特點,如果你們沒有這種情況,可以將1,2,3這幾步省略掉。

        1. 將域名(假設為laoliu.ltd)解析到機房對應的IP上,並在防火牆裡設定對應的NAT,將機房IP的80埠指向10.10.10.10 的80埠上。

        2. 10.10.10.10這臺伺服器已經在本文的第三步中安裝完了nginx,接下來進入/nginx/conf.d目錄,新增一個laoliu.ltd.conf檔案,並將下文程式碼中的內容貼上進去。(儲存並退出,要按ESC並輸入:wq)

cd /nginx/conf.d
vi laoliu.ltd.conf
server {
    listen       80;
    server_name laoliu.ltd    // 要解析進來域名;
    location / {
       proxy_pass http:10.10.10.10:80       // 宿主機ip:容器對外的埠號;
      }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

        3. 如果你需要多個域名的配置,只需要在/nginx/conf.d目錄下加相應的配置檔案即可,一般只需要修改server_name和proxy_pass即可。

        4. 重啟nginx容器。


五、最後一步,重啟容器

docker restart nginx

六、後記

        1. 開啟域名即可看到效果。

        2. 這只是一個初步的設想(所以我在標題裡寫了“入門”),大家可以發揮想象力,想出更多的運維部署方案。

        3. 有什麼事情歡迎溝通交流,我的微信二維碼放在下面了,請大家在加的時候做下備註,謝謝!

       4. 感謝網路上那些大神,本文在撰寫的時候參考了https://www.jianshu.com/p/6b317192480c這篇文章,特此表示感謝!