docker-compose.yml 使用說明


docker-compose.yml 結構

docker-compose.yml文件分為三個主要部分:services、networks、volumes.。
services主要用來定義各個容器。
networks定義需要使用到的network.。
volumes定義services使用到的volume 。

docker-compose配置文件樣板:

可以不用docker-compose.yml命名,可以指定別的名字例如 service.yml

version: "3"
service:
  order-service:
    image: 192.168.0.101:10080/eshop/eshop-order:latest
    deploy:
      endpoint_mode: vip
      replicas: 3
      restart_policy:
        condition: on-failure
      resources:
        limits:
        cpus: "0.2"
        memory: 2G
    depends_on:
      - nginx-service
      - pay-service

  pay-service:
    image: 192.168.0.101:10080/eshop/eshop-pay:latest
    deploy:
      endpoint_mode: vip
      replicas: 3
      restart_policy:
        condition: on-failure
      resources:
        limits:
        cpus: "0.2"
        memory: 2G
    depends_on:
      - nginx-service

  nginx-service
    image: 192.168.0.101:10080/base/nginx
    ports:
      - "8002:80"

networks:
  default:
    external:
      name: my-overlay-net

 

然后用docker stack執行service.yml

# test表示stack名
docker stack deploy -c service.yml test

每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)來自動構建。如果使用 build 指令,在 Dockerfile 中設置的選項(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會自動被獲取,無需在 docker-compose.yml 中再次設置。

 

常用命令介紹

build

使用當前目錄下的Dockerfile進行構建。

version: '3'
services:
  web:
    build: ./

build也可以指定文件路徑,Dockerfile的名字.

version: '3'
services:
  web:
    build:
        context: ./
        dockerfile: mydockerfile

 

image

指定運行容器使用的鏡像。下面的格式都支持。

image: redis
image: ubuntu:14.04
image: yyee/eshop.order:latest
image: www.myharbor.com:10080/eshop/eshop.order:latest
image: eshop:latest

如果本地不存在指定的鏡像,則會從repository pull下來。 

version: '3'
services:
  order-service
   build: ./
    image: www.myharbor.com:10080/eshop/order-service:v1.0.2

 

container_name

默認運行出來的容器名。

version: '3'
services:
  order-service
    build: ./
    image: www.myharbor.com:10080/eshop/order-service:v1.0.2
    container_name: my-order

 

command

覆蓋容器啟動后默認執行的命令(Dockerfile定義的CMD)。當Dockerfile定義了entrypoint的時候,docker-comose.yml定義的command會被覆蓋。

version: '3'
services:
    web:
        build: ./
        command: ["dotnet","eshop.order.dll"]

 

entrypoint

可以覆蓋Dockerfile中定義的entrypoint命令。

version: '3'
services:
    web:
        build: ./
        entrypoint: python app.py

 

links

鏈接到其它服務中的容器。使用服務名稱(同時作為別名)或服務名稱:服務別名 (SERVICE:ALIAS) 格式都可以。

version: '3'
services:
  order-service
      links:
          - user-service
          - pay-service
          - redis

 

external_links

鏈接到 docker-compose.yml 外部的容器,參數格式跟 links 類似。

version: '3'
    services:
      order-service
          external_links:
              - redis_1
              - project_db_1:mysql
              - project_db_1:postgresql

 

port

暴露端口信息。

version: '3'
    services:
        api-gateway-ocelot
            image: api-gateway-ocelot-service:latest
            links:
                - user-service
                - eshop-service
            port: 8080:8080

 

expose

指定內部端口,但不映射到宿主機,只被連接的服務訪問。

version: '3'
    services:
        api-gateway-ocelot
            image: api-gateway-ocelot-service:latest
            links:
                - user-service
                - eshop-service
            expose: 8080

 

environment

enviroment定義的變量會覆蓋.env文件中定義的重名環境變量。

environment:
    RACK_ENV: development
    SHOW: 'true'
    BASEAPI_URL: 192.168.0.101

# 或者

environment:
  - RACK_ENV=development
  - SHOW=true
  - BASEAPI_URL=192.168.0.101

 

ports

將容器的端口80映射到宿主機的端口8080

version: '3'
    services:
        api-gateway-ocelot
            image: api-gateway-ocelot-service:latest
            links:
                - user-service
                - eshop-service
            ports: 8080

# 或者
version: '3'
    services:
        api-gateway-ocelot
            image: api-gateway-ocelot-service:latest
            links:
                - user-service
                - eshop-service
            ports: 
                - 8080:80
                - 127.0.0.1:8080:80

 

volumes

 設置容器的數據卷路徑。

version: '3'
    services:
        order-service
             build: ./
             image: www.myharbor.com:10080/eshop/order-service:v1.0.2
        ontainer_name: my-order
        values:
            - data_path: /var/data/order-data
            - log-path:/ var/data/order-log

 

networks

容器使用的網絡設置。

ersion: '3'
    services:
        order-service
             network: my-net

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM