-
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