docker compose容器编排工具
华子目录
docker compose
概述
Docker Compose
是一个用于定义和运行多容器
的应用程序的工具
- 其是
官方
的一个开源项目
,托管到github
上:https://github.com/docker/compose
主要功能
定义服务
- 使用
YAML格式
的配置文件
来定义一组相关的容器服务
。每个服务
可以指定镜像、端口映射、环境变量、存储卷
等参数 - 例如,可以在
配置文件
中定义一个Web服务
和一个数据库服务
,以及它们之间的连接关系
一键启动和停止
- 通过一个
简单的命令
,可以启动
或停止
整个应用程序
所包含的所有容器
。这大大简化
了多容器
应用的部署和管理过程
- 例如,使用
docker-compose up
命令可以启动配置文件
中定义的所有服务
,使用docker-compose down
命令可以停止并删除这些服务
服务编排
- 可以定义
容器之间
的依赖关系
,确保服务
按照正确的顺序启动和停止
。例如,可以指定数据库服务
必须在Web服务
之前启动 - 支持
网络配置
,使不同服务
的容器
可以相互通信
。可以定义一个自定义的网络
,将所有相关的容器
连接到这个网络上
环境变量管理
- 可以在
配置文件
中定义环境变量
,并在容器启动时
传递给容器
。这使得在不同环境
(如开发、测试和生产环境
)中使用不同的配置
变得更加容易
- 例如,可以定义
一个数据库连接字符串
的环境变量
,在不同环境
中可以设置不同的值
工作原理
1.读取配置文件
Docker Compose
读取YAML配置文件
,解析
其中定义的服务
和参数
2.创建容器
- 根据
配置文件
中的定义
,Docker Compose
调用Docker引擎
创建相应的容器
。它会下载
所需的镜像
(如果本地没有
),并设置容器
的各种参数
3.管理容器生命周期
Docker Compose
监控容器
的状态
,并在需要
时启动、停止、重启容器
- 它还可以处理
容器
的故障恢复
,例如自动重启失败的容器
docker compose
中的管理层
服务
(service
) 一个应用
的容器
,实际上
可以包括若干
运行相同镜像
的容器实例
项目
(project
) 由一组
关联的应用容器
组成的一个完整业务单元
,在docker-compose.yml
文件中定义
容器
(container
)是服务
的具体实例
,每个服务
可以有一个或多个容器
。容器
是基于服务定义
的镜像
创建的运行实例
docker compose
的常用命令参数
-d
表示后台运行
docker compose
默认的文件为docker-compose.yml
,如果不是
这个文件名
,则需要使用-f
指定对应的文件名
[root@docker-node1 ~]# cd huazi/
[root@docker-node1 huazi]# vim docker-compose.yml
services:
web: #服务名
image: nginx:1.23 #服务名用的镜像
ports: #映射的端口
- "80:80"
testnode: #服务名
image: busybox:latest
command: ["/bin/sh","-c","sleep 10000"]
#可以单独指定需要的运行的容器
[root@docker-node1 huazi]# docker compose up
testnode web
#不指定表示全部运行
#-d表示在后台运行,不加-d进程不会结束
[root@docker-node1 huazi]# docker compose up -d
[+] Running 3/3
✔ Network huazi_default Created 0.1s
✔ Container huazi-web-1 Started 0.5s
✔ Container huazi-testnode-1 Started 0.5s
#查看容器状态
[root@docker-node1 huazi]# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
huazi-testnode-1 busybox:latest "/bin/sh -c 'sleep 1…" testnode 46 seconds ago Up 45 seconds
huazi-web-1 nginx:1.23 "/docker-entrypoint.…" web 46 seconds ago Up 45 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp
#stop表示停止容器,并不会删除容器,可以使用start开启容器
[root@docker-node1 huazi]# docker compose stop
[+] Stopping 2/2
✔ Container huazi-testnode-1 Stopped 10.2s
✔ Container huazi-web-1 Stopped 0.3s
#start开启容器
[root@docker-node1 huazi]# docker compose start
[+] Running 2/2
✔ Container huazi-testnode-1 Started 0.3s
✔ Container huazi-web-1 Started 0.3s
#重启服务
[root@docker-node1 huazi]# docker compose restart
#down表示停止并删除容器
[root@docker-node1 huazi]# docker compose down
[+] Running 3/3
✔ Container huazi-testnode-1 Removed 10.2s
✔ Container huazi-web-1 Removed 0.2s
✔ Network huazi_default Removed 0.1s
#logs查看服务的日志输出
[root@docker-node1 huazi]# docker compose logs
testnode web
[root@docker-node1 huazi]# docker compose logs web
构建和重新构建服务
docker compose build
#先创建dockerfile
[root@docker-node1 ~]# cd docker/
[root@docker-node1 docker]# vim dockerfile
FROM busybox:latest
RUN ["/bin/sh","-c","touch /file1.txt"]
[root@docker-node1 ~]# cd huazi/
[root@docker-node1 huazi]# vim docker-compose.yml
services:
test1: #服务名
image: test1 #构建的镜像名
build:
context: /root/docker #构建上下文为/root/docker目录
dockerfile: dockerfile #Dockerfile的名称
command: ["/bin/sh","-c","sleep 10000"] #容器启动后执行的命令
container_name: huazi1 #容器的名称为huazi1
test2: #服务名
image: test2 #构建的镜像名
build:
context: /root/docker #构建上下文为/root/docker目录
dockerfile: dockerfile #Dockerfile的名称
command: ["/bin/sh","-c","sleep 10000"] #容器启动后执行的命令
container_name: huazi2 #容器的名称为huazi2
#up直接运行
[root@docker-node1 huazi]# docker compose -f docker-compose.yml up -d
#只创建镜像
[root@docker-node1 huazi]# docker compose -f docker-compose.yml build
test1 test2
[root@docker-node1 huazi]# docker compose -f docker-compose.yml build
#进入容器
[root@docker-node1 huazi]# docker compose exec -it test1 /bin/sh
/ # ls
bin etc home lib64 root tmp var
dev file1.txt lib proc sys usr
#拉群镜像
[root@docker-node1 huazi]# docker compose pull
#语法检测,没有问题,会打印yaml文件内容
[root@docker-node1 huazi]# docker compose -f docker-compose.yml config
docker compose
的yaml文件
一、服务
(services
)
服务名称
每个服务
在配置文件
中都有一个唯一
的名称
,用于在命令行
和其他部分
引用该服务
services:
service1: #服务名为service1
#服务1的配置
service2: #服务名为service2
#服务2的配置
镜像
(image
)
- 指定
服务
所使用的镜像名称
和标签
。例如,image: nginx
表示使用nginx镜像
的最新版本
services:
service1:
image: nginx
service2:
image: mysql:5.7
端口映射
(ports
)
- 将
容器内部
的端口
映射到主机的端口
,以便外部
可以访问容器内
的服务
- 例如:
- "8080:80"
表示将宿主机
的8080端口
映射到容器内部
的80端口
services:
web:
image: nginx
container_name: web_nginx #容器名
restart: always #容器的重启策略
expose:
- 1234 #容器暴露的端口
ports:
- "8080:80" #端口映射,宿主机:容器
环境变量
(environment
)
- 为
容器
设置环境变量
,可以在容器内部
的应用程序中
使用。 - 例如,
key: value1
设置环境变量key
的值为value1
services:
web:
image: mysql:5.7
environment: #设置环境变量
MYSQL_ROOT_PASSWORD: 123456
存储卷
(volumes
)
- 将
主机上
的目录或文件
挂载到容器
中,以实现数据持久化
或共享
- 例如
/host/data:/container/data
将宿主机
上/host/data
目录挂载到容器内
的/container/data
路径
services:
test:
image: busybox
command: ["/bin/sh","-c","sleep 1000"]
restart: always
container_name: busybox1
volumes:
- /etc/passwd:/tmp/passwd:ro
网络
(networks
)
- 将
服务
连接到特定
的网络
,以便不同服务
的容器
可以相互通信
services:
test1:
image: busybox
container_name: huazi
command: ["/bin/sh","-c","sleep 10000"]
[root@docker-node1 huazi]# docker compose up -d
network_mode
的值
有bridge,host,none
services:
test1:
image: busybox
container_name: huazi
command: ["/bin/sh","-c","sleep 10000"]
network_mode: bridge #使用默认的bridge模式
[root@docker-node1 huazi]# docker compose up -d
- 使用
networks
创建网络
services:
test1:
image: busybox
container_name: huazi
command: ["/bin/sh","-c","sleep 10000"]
networks:
- bridge1
- bridge2
networks:
bridge1:
driver: bridge
bridge2:
driver: bridge
[root@docker-node1 huazi]# docker compose up -d
[root@docker-node1 huazi]# docker compose exec -it test1 /bin/sh
命令
(command
)
指定容器启动
时执行的命令
- 例如,
command: python app.py
指定容器启动时
运行python app.py
命令
services:
web:
image: busybox
container_name: busybox
network_mode: bridge1
command: ["/bin/sh","-c","sleep 1000"]
二、数据卷
(volumes
)
services:
test1:
image: busybox
command: ["/bin/sh","-c","sleep 1000"]
restart: always
container_name: busybox
volumes:
- data:/test
- /etc/passwd:/tmp/passwd:ro
volumes:
data:
name: huazi #数据卷名称
[root@docker-node1 huazi]# docker compose up -d
[root@docker-node1 huazi]# docker volume ls
DRIVER VOLUME NAME
local huazi
三、网络
(networks
)
services:
test1:
image: busybox
container_name: test1
command: ["/bin/sh","-c","sleep 1000"]
network_mode: default #设置为default,意味着该服务将连接到Docker Compose自动创建的默认网络
test2:
image: busybox
container_name: test2
command: ["/bin/sh","-c","sleep 1000"]
networks:
- bridge1
- bridge2
networks:
default:
external: true
name: bridge
bridge1:
driver: bridge
bridge2:
ipam:
driver: default
config:
- subnet: 172.26.0.0/24 #网络的子网端
gateway: 172.26.0.254 #网关
[root@docker-node1 huazi]# docker compose up -d
原文地址:https://blog.csdn.net/huaz_md/article/details/144406211
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!