【docker】docker compose

1. Docker Compose 简述

Compose 是用于定义和运行多容器 Docker 应用程序的工具。
通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。
然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

2.Compose 使用的三个步骤:

Step1 使用 Dockerfile 定义应用程序的环境。
Step2 使用 docker-compose.yml 定义构成应用程序的服务,
	这样它们可以在隔离环境中一起运行。
Step3 执行 docker-compose up 命令来启动并运行整个应用程序。

3.Docker Compose 的产生背景

我们使用 Docker 时:
Step1 定义 Dockerfile 文件
Step2 使用 docker build、docker run 等命令操作容器。
然而:微服务架构的应用系统一般包含若干个微服务,
	每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,
	那么效率之低,维护量之大
​

为了提高效率,我们就需要一种像 Dockerfile 定义 Docker 
容器一样,能够定义容器(多个)编排和部署工具。
于是,Docker Compose 出现了(其实应该说 Fig 出现了,
Docker 收购了 Fig 并改名为 compose)。

4.Docker Compose 是什么?

Docker-compose 是一个定义和运行多个 Docker 应用的工具,
你可以使用YMAL文件来配置你的服务,然后使用docker-compose 命令,
创建和启动、编排所有你配置的的服务。
compose 可以在任何工作环境中使用,生产环境,开发环境,持续集成等等。
从logo上可以看出来, 它就是一个管理容器的工具, 
我们可以方便的使用它来管理我们的Docker容器, 
可以极大程度的简化命令行的复杂操作。

5. 容器编排模板 docker-compose.yml

docker-compose.yml 的配置案例如下(配置参数参考下文):

--Demo 1
# yaml 配置实例
version: '3'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

即 project 包含 service ,service 包含 container

6. Docker Compose (V2) 与 Docker-Compose (V1) 的区别

docker compose(带空格)是一个较新的项目,
用于将 compose 与 docker 项目的其余部分一起迁移到 Go。

这是docker/compose repo的v2分支。
它首先被介绍给 Docker Desktop 用户,所以 Linux 上的 docker 用户看不到该命令。
除了迁移到 Go 之外,它使用了 compose-spec,部分重写可能会导致行为差异。

最初的 python 项目,称为docker-compose docker/compose repo 的 v1,
现已于2023年7月被正式弃用,开发已全部转移到 v2。

要在 Linux 上将 v2 docker compose作为 CLI 插件安装,
支持的发行版现在可以安装该docker-compose-plugin软件包。
例如在 debian Linux 上,我运行apt-get install docker-compose-plugin
建议:使用 docker compose(较新版本/V2),而不是 docker-compose(旧版本/V1)

7. 容器编排与管理工具比对:Docker Compose vs. K8s

在开始比较Docker Compose和之前,我们首先要了解这两个工具的概述。
Docker Compose 是Docker公司推出的开源工具,它允许用户在单个主机上
定义和运行多个容器应用程序。
Kubernetes(K8s)是一个由Google维护的开源系统,它用于自动化部署、
扩展和管理容器化应用程序。
使用K8s,用户可以轻松地在集群中运行容器应用程序。

8. 功能比对

尽管Docker Compose和K8s都用于部署和管理容器应用程序,但它们的功能有所不同。
Docker Compose主要用于在单个主机上管理和运行多个容器应用程序。
使用Docker Compose,用户可以轻松地定义多个容器和它们之间的依赖关系,
并在单个主机上部署和运行它们。

相比之下,K8s更灵活,它不仅可以在单个主机上运行容器应用程序,
还可以在多个主机上运行这些应用程序。
此外,K8s提供了许多高级功能,例如:服务发现和自动扩缩容等,使
用户可以更轻松地管理容器应用程序。

9. Docker Compose 模板文件(详解)

Compose模板文件格式
Docker Compose 使用 YAML 文件来定义多服务的应用。
Docker Compose 默认	使用文件名 docker-compose.yml。
当然,也可以使用 -f 参数指定具体文件

10. 服务级配置(services)

replicas: 指定运行容器的数量
update_config :
parallelism:一次性更新的容器数量
delay:更新一组容器之间的等待时间
mode : replicated 如果服务是 replicated(默认),需要指定运行的容器数量
restart_policy 重启策略

配置容器的重新启动,代替 restart
condition : 值可以为 none 、on-failure 以及 any(默认)
delay : 尝试重启的等待时间,默认为 0
max_attempts : 在放弃之前尝试重新启动容器次数(默认:从不放弃)。
如果重新启动在配置中没有成功 window,则此尝试不计入配置max_attempts 值。
例如,如果 max_attempts 值为 2,并且第一次尝试重新启动失败,
则可能会尝试重新启动两次以上。
windows : 在决定重新启动是否成功之前的等时间,指定为持续时间(默认值:立即决定)

11 Docker Compose 架构与原理

Docker Compose 核心概念
Docker Compose 将所管理的容器分为三层,这三个概念均为
Compose抽象的数据类型,其中 project 会包含service以及container:

项目/工程(project)
服务(service)
容器(contaienr)

项目(project):代表用户需要完成的一个项目。
通过 Docker Compose 管理的一个项目被抽象称为一个 project
何为项目?Compose的一个配置文件可以解析为一个项目。
即:Compose通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。
例如:用户在当前目录下执行docker-compose up -d,
配置文件为当前目录下的配置文件docker-compose.yml,命令请求类型为up,
-d为命令参数,对于配置文件中的内容,compose会将其解析为一个project。
project 里包括多个 service
一个project拥有特定的名称,并且包含多个或一个service,同时还带有一个Docker Client。
service,代表配置文件中的每一项服务,何为服务?

即以容器为粒度,用户需要Compose所完成的任务。
比如,前面的配置文件中包含了两个service,第一个为web,第二个为redis。
每个 service 定义了容器运行的镜像(或构建镜像)、网络端口、文件挂载、参数、依赖等
一个service包含的内容,无非是用户对服务的定义。定义一个服务,可以为服务容器指定镜像,设定构建的Dockerfile,可以为其指定link的其他容器,还可以为其指定端口的映射等。
每个 service 可包括同一个镜像的多个容器实例。
容器(container)

首先,用户执行 docker-compose up 命令调用命令行中的启动方法
然后,如果当前宿主机已存在与该应用对应的容器,docker-compose 则进行行为逻辑判断。
如果用户指定可以重新启动已有服务,docker-compose 就会执行 
service 模块的容器重启方法,否则就直接启动已有容器。
这两种操作的区别在于前者会停止旧的容器,创建并启动新的容器,并把旧容器移除掉。
最后,contaier 模块会调用 docker-py 客户端来执行向 docker daemon 
发起创建容器的 POST 请求。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值