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

 

posted @ 2020-06-18 11:32  民工黑猫  阅读(2912)  评论(0编辑  收藏  举报