1. 程式人生 > >使用docker構建nginx實現埠對映

使用docker構建nginx實現埠對映

實驗環境:docker 的版本是1.12.3

檔案目錄結構:

|-docker-compose.yml

|-nginx

           -|Dockerfile           

           -|hc.html

           -|index.html

           -|pst-http.conf

編寫docker-compose.yml檔案

version: '2'
services:
  nginx:
    build: ./nginx
    ports:
      - 80:80
    networks:
      jznet:
        ipv4_address: 172.18.4.30
    restart: always
  access:
    image: reg-mirror.shie.site/pst-test/access:devsit_0.0.3
    networks:
      jznet:
        ipv4_address: 172.18.4.24
    volumes:
      - ./logs/access/:/usr/local/tomcat/logs/
    environment:
      - ENV_NAME=devsit
      - JAVA_OPTS=-Xmx1024m -Xms1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+PrintGCDetails -XX:+PrintGCDateStamps
    expose:
      - 8080
      - 20881
    ports:
      - 9090:8080
networks:
  jznet:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.18.4.0/26

編寫Dockerfile檔案
FROM reg-mirror.shie.site/shie-base/nginx:ssl
RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/conf.d/ssl.conf
ADD pst-http.conf /etc/nginx/conf.d/pst-http.conf
ADD hc.html /etc/nginx/html/hc.html
ADD index.html /etc/nginx/html/index.html

編寫pst-http.conf

    upstream access.server {
       server 172.18.4.24:8080 weight=1 max_fails=3 fail_timeout=60s;
    }
    server {
        listen       80;
        server_name  localhost;
       location /access {
                proxy_pass http://access.server/access;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                proxy_next_upstream error timeout invalid_header http_502 http_500;
        }
    }



hc.html 和index.html裡面編寫任意內容就可以,以便啟動nginx之後可以訪問這些頁面以作校驗

之後使用docker-compose up -d nginx 的命令從基礎映象reg-mirror.shie.site/shie-base/nginx:ssl根據Dockerfile裡面的配置構建出我們需要的nginx伺服器

當宿主機器裡面的nginx啟動起來之後,系統外部的使用者就可以通過80埠訪問acces應用了。

而且當我們需要新增應用的時候我們只需要新增nginx的pst-http.conf一段配置就可以實現對其他應用的埠訊息轉發。這樣一來對於埠的對映管理我們就可以很方便了,而且當我們需要向外網暴露應用的時候只需要暴露nginx的80埠就可以使得宿主機器內的其他應用也實現外網對映功能。