Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,只需要一个命令,就可以从配置中创建并启动所有服务。即单机容器编排利器,python写的工具。
我们想一个问题 如果我们要创建启动多个不同的镜像的容器大约100个该如何? 总不能我们自己手动一个一个的 创建启动吧
如果是微服务项目,那么微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。
1、要从Dockerfile build image 或者去dockerhub拉取image
2、要创建多个container
3、要管理这些container(启动 ,停止 删除)
所以,使用Docker Compose来解决上面的问题
服务编排(Docker Compose): 按照一定的业务规则批量管理容器
Docker Compose是一个可以同时编排多个容器的分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。
官网安装文档: https://docs.docker.com/compose/install/standalone/
查看下载的版本:https://github.com/docker/compose/releases
#下载docker compose
curl -SL https://github.com/docker/compose/releases/download/1.28.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 设置文件可执行权限 , 给docker compose 目录授权
sudo chmod +x /usr/local/bin/docker-compose
#将文件copy到 /usr/bin/目录下,Docker Compose是一个二进制工具,下载之后放在系统二进制目录下才能使用
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#检测是否安装 docker Compose,查看一下version,显示有版本号那就说明安装成功了
docker-compose version
#卸载Docker Compose,二进制包方式安装的,删除二进制文件即可
rm -rf /usr/local/bin/docker-compose
rm -rf /usr/bin/docker-compose
1、利用 Dockerfile 定义运行环境镜像,即使用 Dockerfile 定义应用程序的环境。
2、使用 docker-compose.yml 定义组成应用的各服务,即使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
3、运行 docker-compose up 启动应用,即执行 docker-compose up 命令来启动并运行整个应用程序。
Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services(服务)和networks(网络)两个部分。
常用属性介绍
(1)version
Docker Compose文件的版本声明,目前有版本 1 、版本 2、版本 3 ,现在都是使用版本3,这意味着使用Docker Compose v3的语法和功能,包括使用多个Docker容器来组成应用程序,定义服务和网络等元素。不同的版本号可能支持不同的功能和语法
(2)services
定义所有的 service 信息,即用于定义系统中的服务,可以存在多个 代表多个不同的服务(容器)
services是一个关键字,表示下面要定义的是系统中的服务。
其后是一个字典,其中每个键表示一个服务的名称(任意) ,主要就是区分配置的作用,每个值表示该服务的配置。在这个字典中,每个服务的配置通常包括以下内容:
例如,以下是一个简单的服务配置:
services:
web:
image: nginx
ports:
- "80:80"
该配置表示定义了一个名为web的服务,该服务使用nginx镜像,将主机的80端口映射到容器的80端口。
可以存在多个 代表多个不同的服务(容器)
例如:
services:
web:
image: dockercloud/hello-world
ports:
- 8080
networks:
- front-tier
- back-tier
redis:
image: redis
links:
- web
networks:
- back-tier
定义web服务和redis服务
(3)image
指定镜像名称或镜像 ID(如果镜像在本地不存在,Compose 将会尝试去仓库拉取这个镜像)
(4)restart
指定容器退出后的重启策略为始终重启, 保持服务始终运行, 推荐配置为 always 或者 unless-stopped
用于指定容器的重启策略。它的意思是无论容器何时停止,Docker都会自动重新启动该容器。这可以确保在容器出现故障或意外停止时,它们能够自动恢复并继续运行,从而提高应用程序的可靠性和稳定性。
当 Docker 重启时,容器自动启动。
restart: always
(5)container_name
指定容器的名称 (等同于 docker run --name 的作用)
(6)environment
设置环境变量。可使用数组或字典两种格式
(7)build
指定 Dockerfile 所在文件夹的路径
服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
services:
redis:
build:
context: .
dockerfile: xxx
args:
xxx
context: 指定 Dockerfile 文件所在的路径 (上下文的路径) (必须的)
dockerfile: 指定 context 指定的目录下面的 Dockerfile 的名称(默认为 Dockerfile) (可选)
args: Dockerfile 在 build 过程中需要的参数 (等同于 docker container build --build-arg 的作用) (可选)
如果没有 不指定 dockerfile和args 那么可以省略 context 直接 build: .
而构建的镜像名为image中的镜像名和标签。
(8)command
容器启动后默认执行的命令
(9)depends_on
解决容器的依赖、启动先后的问题(服务不会等待依赖容器完全启动之后才启动)
在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。
所以,depends_on标签解决容器的依赖、启动先后的问题(服务不会等待依赖容器完全启动之后才启动)
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
上述文件定义的容器会先启动redis和db两个服务,最后才启动web 服务。
(10)ports
暴露端口信息,ports用于映射端口 等同于 docker run -p的作用
ports
- "3000" # 暴露容器的 3000 端口, 宿主机的端口由 docker 随机映射一个没有被占用的端口
- "3000-3005" # 暴露容器的 3000 到 3005 端口, 宿主机的端