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