zoukankan      html  css  js  c++  java
  • Docker学习—Compose

    前言

     前面《Docker学习—DockerFile》文中介绍了dockerfile相关的语法,及使用方式;接下来了解docker三剑客之一的 Compose;接下来详细学习。

    一、docker-compose介绍

     Docker-Compose项目是Docker官方的开源项目,主要使用Python编写;用于定义和运行多容器Docker应用程序的工具。使用Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,从配置创建并启动所有服务。

     Compose是一个定位“定义和运行多个Docker容器应用的工具”,其前身是Fig,目前使用的Compose仍然兼容Fig格式的模板文件。

     Compose中包含两个重要概念:

    • 服务(Service):一个应用的容器,实际可以包含若干个运行相同镜像的容器实例
    • 项目(Project):一组相关联的应用容器组成的完整业务单元,在docker-compose.yml文件中定义 

     Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

    二、docker-compose安装

     Compose目前已经完全支持Linux、Mac OS和Windows,在安装Compose之前,需要先安装Docker;(本篇主要在window中使用)

     安装成功后命令行中输入:docker compose -h  

     

    三、docker-compose 命令

     安装成功后来看下compose主要包含的命令:

      build              #生成或重建服务
      bundle             #从Compose文件生成Docker bundle
      config             #验证并查看撰写文件
      create             #创建服务
      down               #停止并删除容器、网络、镜像和卷
      events             #从容器接收实时事件
      exec               #在正在运行的容器中执行命令
      help               #获取命令帮助
      images             #显示镜像列表
      kill               #杀死容器
      logs               #查看容器的输出
      pause              #暂停服务
      port               #打印端口绑定的公共端口
      ps                 #显示容器列表
      pull               #拉取服务镜像
      push               #推送服务镜像
      restart            #重新启动服务
      rm                 #移除停止的容器
      run                #运行一次性命令
      scale              #设置服务的容器数
      start              #启动服务
      stop               #暂停服务
      top                #显示正在运行的进程
      unpause            #取消暂停服务
      up                 #创建并启动容器
      version            #显示Docker-Compose版本信息

     对命令有大概印象后,接下来就需要对重点内容(docker-compose.yml)了解;每个命令具体的使用参数在使用是具体介绍

    三、docker-compose.yml编写

     docker-compose.yml已有多个版本:如下

      首先我们先来看一个官方示例docker-compose.yml内容:

    version: "3.8"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            max_replicas_per_node: 1
            constraints:
              - "node.role==manager"
    
      vote:
        image: dockersamples/examplevotingapp_vote:before
        ports:
          - "5000:80"
        networks:
          - frontend
        depends_on:
          - redis
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
          restart_policy:
            condition: on-failure
    
      result:
        image: dockersamples/examplevotingapp_result:before
        ports:
          - "5001:80"
        networks:
          - backend
        depends_on:
          - db
        deploy:
          replicas: 1
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      worker:
        image: dockersamples/examplevotingapp_worker
        networks:
          - frontend
          - backend
        deploy:
          mode: replicated
          replicas: 1
          labels: [APP=VOTING]
          restart_policy:
            condition: on-failure
            delay: 10s
            max_attempts: 3
            window: 120s
          placement:
            constraints:
              - "node.role==manager"
    
    networks:
      frontend:
      backend:
    
    volumes:
      db-data:

     根据以上示例格式可以看出docker-compose.yml中主要包含以下内容:

    • version: 指定当前docker-compose.yml的版本,版本与Docker Engine版本存在对应关系,如:v3.8对应 Docker Engine 19.03.0+
    • services:服务,可以定义业务需要的一些服务,每个服务可包含服务名称、使用镜像、挂载数据卷、使用的网络、依赖服务等信息
    • networks:应用的网络,可以定义网络名称、使用的网络类型等
    • volumes:数据卷,可以定义数据卷,然后挂载到不同的服务下使用

     接着就来看下相关命令的语法及具体含义

      

    docker-compose.yml命令
    序号 所属 命令 说明
    1 services build 基于Dockerfile,指定Dockerfile所在路径,Compose会利用它自动构建镜像,然后启动服务容器 
    2 cap_add,cap_drop 添加或删除容器功能
    3 command 覆盖容器启动后默认执行的命令
    4 config 使用“每服务配置”配置在每个服务的基础上授予对配置的访问权限。存在两种语法方式:短语法、长语法
    5 cgroup_parent 为容器指定一个可选的父cgroup
    6 container_name 容器名称
    7 depends_on 容器依赖,用于指定服务依赖的其他服务
    8 depoly

    指定与服务的部署和运行相关的配置。这只在使用docker stack deploy部署到一个群时生效,docker compose up和docker compose run将忽略此项。

    9 devices 设备映射列表。
    10 dns 自定义DNS服务器。可以是单个值或列表。
    11 dns_search 自定义DNS搜索域。可以是单个值或列表。
    12 entrypoint 覆盖默认入口点
    13 env_file 从文件添加环境变量。可以是单个值或列表
    14 environment 添加环境变量。可以使用数组或字典。任何布尔值(true、false、yes、no)都需要用引号括起来,以确保它们不会被YML解析器转换为true或false。
    15 expose 暴露端口而不将它们发布到主机-它们只能被链接的服务访问。只能指定内部端口。
    16 external_links 链接到在此范围之外docker-compose.yml甚至在Compose之外开始的容器,尤其是对于提供共享或公共服务的容器。 同时指定容器名称和链接别名()时,请external_links遵循与legacy选项相似的语义。
    17 extra_hosts 添加主机名映射。使用与docker客户端相同的值
    18 healthcheck 配置运行的检查以确定该服务的容器是否“健康”
    19 image 指定要从中启动容器的镜像。可以是存储库/标签或镜像ID
    20 init 在容器内运行一个初始化程序,以转发信号并获取进程。设置此选项可以true为服务启用此功能。 
    21 isolation 指定容器的隔离技术。在Linux上,唯一支持的值是default。在Windows中,可接受的值是default,process和 hyperv。
    22 labels 使用Docker标签将元数据添加到容器中。您可以使用数组或字典。
    23 links 链接到另一个服务中的容器。指定服务名称和链接别名("SERVICE:ALIAS"),或者仅指定服务名称。
    24 logging 服务的日志记录配置
    25 network_mode 网络模式。使用与客户端服务相同的网络名称和服务-参数docker相同。
    26 networks 要加入的网络,引用顶级网络键下的条目。
    27 pid 将PID模式设置为主机PID模式。这将打开容器和主机操作系统之间的PID地址空间共享。
    28 ports 暴露端口 
    29 restart no是默认的重启策略,在任何情况下都不会重启容器。当always指定时,容器总是重新启动。该 on-failure如果退出代码指示的故障错误政策重启的容器。unless-stopped总是重新启动容器,除非容器停止(手动或其他方式)。
    30 secrets 使用按服务secrets 配置,按服务授予对机密的访问权限。
    31 security_opt 覆盖每个容器的默认标签方案。
    32 stop_grace_period 指定在发送SIGKILL之前,如果容器不处理SIGTERM(或用stop_nusignal指定的任何停止信号),尝试停止该容器时要等待多长时间。默认10s
    33 stop_signal 设置停止容器的替代信号。默认情况下,stop使用SIGTERM。使用stop_signal设置替代信号会导致stop发送该信号。
    34 sysctls 要在容器中设置的内核参数。可以使用数组或字典。
    35 tmpfs 在容器内安装一个临时文件系统。可以是单个值或列表。 
    36 ulimits 覆盖容器的默认ulimit。您可以将单个限制指定为整数,也可以将软/硬限制指定为映射。
    37 userns_mode 如果Docker守护程序配置了用户名称空间,则禁用此服务的用户名称空间。
    38 volumes

    挂载主机路径或命名卷,指定为服务的子选项。可以将主机路径安装为单个服务的定义的一部分,而无需在顶级volumes中进行定义。

    但是,如果要在多个服务之间重用卷,请在顶级volumes密钥中定义一个命名卷。

    将命名卷与服务,群集和堆栈文件一起使用。

    39

    domainname, hostname, ipc, mac_address, privileged,

    read_only, shm_size, stdin_open, tty, user, working_dir

    其中每个都是一个值,类似于其 docker run对应项。
    40 Volumes dirver 指定该卷应使用哪个卷驱动程序。默认为Docker Engine配置为使用的任何驱动程序,大多数情况下为 local。
    41 dirver_opts 指定选项列表作为键值对,以传递给该卷的驱动程序。
    42 external 如果设置为true,则指定此卷是在Compose之外创建的。docker-compose up不会尝试创建它,如果不存在则引发错误。
    43 labels 使用Docker标签向容器添加元数据。可以使用数组或字典。
    44 name 为此卷设置一个自定义名称。名称字段可用于引用包含特殊字符的卷。
    45 Networks dirver 指定该网络应使用哪个驱动程序。
    46 dirver_opts 指定选项列表作为要传递给此网络的驱动程序的键值对
    47 attachable 仅当驱动程序设置为覆盖时使用。
    48 enable_ipv6 在此网络上启用IPv6网络。
    49 ipam 指定自定义IPAM配置
    50 internal 默认情况下,Docker还会连接一个网桥网络来提供外部连接。如果要创建外部隔离的覆盖网络,可以将此选项设置为true。
    51 labels 使用Docker标签将元数据添加到容器中 。您可以使用数组或字典。
    52 external 如果设置为true,则指定此网络是在Compose之外创建的。docker-compose up不会尝试创建它,如果不存在则引发错误。
    53 name 为此网络设置一个自定义名称。名称字段可用于引用包含特殊字符的网络。

       通过以上内容发现,services中相关命令是docker相关配置项关联;接下来就来验证通过docker-compose.yml运行应用 

    四、应用案例

     实现效果:基于身份认证时,相关示例代码实现,通过docker-compose启动相关所有服务容器,运行程序。

     A、在解决方案目录下添加docker-compose.yml文件:

     添加方式:

     1、手动添加文件

     2、通过vs自动添加:选中需要添加项目右键,如图

     添加后如下:

     B、修改内容如下:(该docker-compose.yml比较简单)

    version: '3.4'
    
    services:
      cz.identityserver:
        image: ${DOCKER_REGISTRY-}czidentityserver
        build:
          context: .
          dockerfile: cz.IdentityServer/Dockerfile
    
      cz.api.order:
        image: ${DOCKER_REGISTRY-}czapiorder
        build:
          context: .
          dockerfile: cz.Api.Order/Dockerfile
    
    
      cz.api.goods:
        image: ${DOCKER_REGISTRY-}czapigoods
        build:
          context: .
          dockerfile: cz.Api.Goods/Dockerfile
    
    
      cz.mvcclient:
        image: ${DOCKER_REGISTRY-}czmvcclient
        build:
          context: .
          dockerfile: cz.MVCClient/Dockerfile

     C、执行命令docker-compose up命令:执行完成看到以下输出,则编译启动完成。

      

      D、在docker管理页面中查看如下:

      

    后续:

     本篇内容先对docker-compose内容进行了相关介绍,下面将对Swarm、Machine、K8S 进行应用学习。

    参考:

      https://docs.docker.com/compose/

      https://docs.docker.com/compose/compose-file/

  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/cwsheng/p/13944281.html
Copyright © 2011-2022 走看看