zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    有关系统架构的高可用原则
    Redis面试篇 -- 如何保证缓存与数据库的双写一致性?
    Redis面试篇 -- Redis常见性能问题和解决方案?
    Redis面试篇 -- Redis主从复制原理
    Python3如何安装pip工具?
    Redis面试篇 -- Redis持久化的方式有哪些?优缺点分别是什么?
    Linux在丢失的情况下重置密码
    APC (Asynchronous Procedure Call)
    eigenface资料整合
    python+opencv模拟生成运动模糊核
  • 原文地址:https://www.cnblogs.com/yyee/p/13156686.html
Copyright © 2011-2022 走看看