前言

 前面《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学习—DockerFile-LMLPHP

三、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学习—DockerFile-LMLPHP

  首先我们先来看一个官方示例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:数据卷,可以定义数据卷,然后挂载到不同的服务下使用

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

  

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

四、应用案例

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

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

 添加方式:

 1、手动添加文件

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

Docker学习—DockerFile-LMLPHP

 添加后如下:

Docker学习—DockerFile-LMLPHP

 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命令:执行完成看到以下输出,则编译启动完成。

  Docker学习—DockerFile-LMLPHP

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

  Docker学习—DockerFile-LMLPHP

后续:

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

参考:

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

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

11-09 06:52
查看更多