docker-compose.yml 使用说明

Posted yyee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose.yml 使用说明相关的知识,希望对你有一定的参考价值。

docker-compose.yml 结构

docker-compose.yml文件分为三个主要部分:services、networks、volumes.。
services主要用来定义各个容器。
networks定义需要使用到的network.。
volumes定义services使用到的volume 。

docker-compose.yml样板:

version: "3"
services:
  message-service:
    image: message-service:latest

  user-service:
    image: user-service:latest
    command:
      - "--mysql.address=192.168.0.101"
      - "--redis.address=192.168.0.101"

  order-service:
    image: order-service:latest
    links:
      - user-service
      - mesasge-service
    command:
      - "--mysql.address=192.168.0.101"
      - "--redis.address=192.168.0.101"
      - "--rabbitmq.address=192.168.0.101"

  pay-service:
    image: pay-service:latest
    links:
      - user-service
      - mesasge-service
    command:
      - "--mysql.address=192.168.0.101"
      - "--redis.address=192.168.0.101"
      - "--rabbitmq.address=192.168.0.101"

  eshop-service:
    image: eshop-service:latest
    links:
      - user-service
      - mesasge-service
      - order-service
      - pay-service
    command:
      - "--mysql.address=192.168.0.101"
      - "--redis.address=192.168.0.101"
      - "--rabbitmq.address=192.168.0.101"

  api-gateway-ocelot
    image: api-gateway-ocelot-service:latest
    links:
     - user-service
      - eshop-service
    ports: 8080:80

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。

参数说明:

version: yaml版本

services:: 服务定义

messge-service, user-service, order-service 服务名称。

image: 镜像名称

command: 需要注入的参数

links: 服务依赖

port: 端口号

常用命令介绍

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

 

以上是关于docker-compose.yml 使用说明的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker-compose.yml 自动删除容器

docker-compose.yml说明和编写

docker-compose.yml文件

向 docker-compose.yml 公开随机端口

Dockerfile 和 docker-compose.yml的区别

我应该把 docker-compose.yml 放在哪里