使用docker compose一次性部署所有容器

我們通過docker部署了nginx,mongo,parse-server和parse-dashboard,但如果每次都需要這么一個個的部署,略微有點(diǎn)麻煩,這時候,我們的docker compose上場了。

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

至于如何編寫docker compose的yaml文件,具體的請參考官方文檔 docker compose docs

這邊給出最終我們一次性配置的yaml文件內(nèi)容

services:
  nginx:
    image: nginx
    container_name: nginx
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/conf.crt:/etc/nginx/conf.crt:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./logs/nginx:/var/log/nginx
      - ./nginx/html:/usr/share/nginx/html
    ports:
      - "80:80"
      - "443:443"
    links:
      - parse-server
      - parse-dashboard      
    networks:
      - internal-network
  mongo:
    image: mongo
    container_name: mongo
    volumes:
      - ./mongo/data/db:/data/db
      - ./mongo/config/mongod.conf:/etc/mongo/mongod.conf
      - ./mongo/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
      - ./logs/mongo:/var/log/mongodb
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=mongoadmin
      - MONGO_INITDB_ROOT_PASSWORD=mongoadminpassword
      - MONGO_INITDB_DATABASE=parse_server_database
    networks:
      - internal-network
    command: --config /etc/mongo/mongod.conf
  parse-server:
    image: parseplatform/parse-server
    container_name: parse-server
    volumes:
      - ./parse-server/config:/parse-server/config
      - ./parse-server/cloud:/parse-server/cloud
      - ./logs/parse-server:/parse-server/logs
    ports:
      - "1337:1337"  
    depends_on:
      - mongo
    command: /parse-server/config/config.json
    networks:
      - internal-network  
  parse-dashboard:
    image: parseplatform/parse-dashboard:4.1.4
    container_name: parse-dashboard
    volumes:
      - ./parse-dashboard/config/parse-dashboard-config.json:/src/Parse-Dashboard/parse-dashboard-config.json
    ports:
      - "4040:4040"  
    depends_on:
      - parse-server
    command: --allowInsecureHTTP --mountPath /parse-dashboard
    networks:
      - internal-network
networks:
  internal-network:
nginx的配置文件的修正

通過Https訪問Parse Server和Parse Dashboard文章中,在配置反向代理時,我們使用的是parse-server和parse-dashboard容器的內(nèi)部IP地址,這就有不確定性,每次容器重啟IP都有可能變化,因此需要實(shí)時的去修改nginx的配置文件并重啟。
使用docker compose,則可以避免這個問題,此時,我們可以使用服務(wù)名直接進(jìn)行訪問。

server {
    listen       80;
    server_name  localhost; # 換成自己的host
    
    # http請求重定向到https上
    rewrite  ^(.*)$  https://${server_name}$1  permanent;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
    #eeee
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

# 增加https部分設(shè)置
server {
   listen  443 ssl;
   server_name  localhost; # 換成自己的host

   ssl_certificate  /etc/nginx/conf.crt/localhost.crt;             #指定證書位置(通過目錄掛載到容器內(nèi)部)
   ssl_certificate_key  /etc/nginx/conf.crt/localhost.key;         #指定私鑰位置(通過目錄掛載到容器內(nèi)部)

   location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location /parse/ {
        proxy_pass http://parse-server:1337/parse/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
    }

    location /parse-dashboard/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://parse-dashboard:4040/parse-dashboard/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容