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 @   牧之丨  阅读(1743)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示