容器编排工具Docker Copmose
3. 容器(container)容器是服务的具体实例,每个服务可以有一个或多个容器。1. 服务 (service) 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。例如,可以在配置文件中定义一个 Web 服务和一个数据库服务,以及它们之间的连接关系。可以定义容器之间的依赖关系,确保服务按照正确的顺序启动和停止。可以在配置文件中定义环境变量,并在容器启动时传递给容器。例如,可以定义一个数据
Docker Compose 概述
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。
其是官方的一个开源项目,托管到github上
https://github.com/docker/compose
主要功能
1. 定义服务:
使用 YAML 格式的配置文件来定义一组相关的容器服务。每个服务可以指定镜像、端口映射、
环境变量、存储卷等参数。
例如,可以在配置文件中定义一个 Web 服务和一个数据库服务,以及它们之间的连接关系。
2. 一键启动和停止:
通过一个简单的命令,可以启动或停止整个应用程序所包含的所有容器。这大大简化了多容器
应用的部署和管理过程。
例如,使用 docker-compose up 命令可以启动配置文件中定义的所有服务,使用 docker compose
down 命令可以停止并删除这些服务。
3. 服务编排:
可以定义容器之间的依赖关系,确保服务按照正确的顺序启动和停止。例如,可以指定数据库
服务必须在 Web 服务之前启动。
支持网络配置,使不同服务的容器可以相互通信。可以定义一个自定义的网络,将所有相关的
容器连接到这个网络上。
4. 环境变量管理:
可以在配置文件中定义环境变量,并在容器启动时传递给容器。这使得在不同环境(如开发、
测试和生产环境)中使用不同的配置变得更加容易。
例如,可以定义一个数据库连接字符串的环境变量,在不同环境中可以设置不同的值。
工作原理
1. 读取配置文件:
Docker Compose 读取 YAML 配置文件,解析其中定义的服务和参数。
2. 创建容器:
根据配置文件中的定义,Docker Compose 调用 Docker 引擎创建相应的容器。它会下载所需
的镜像(如果本地没有),并设置容器的各种参数。
3. 管理容器生命周期:
Docker Compose 监控容器的状态,并在需要时启动、停止、重启容器。
它还可以处理容器的故障恢复,例如自动重启失败的容器。
Docker Compose 中的管理层
1. 服务 (service) 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
2. 项目 (project) 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中
定义
3. 容器(container)容器是服务的具体实例,每个服务可以有一个或多个容器。容器是基于服务定义的镜像创建的运行实例
[root@ens160 ~]# vim ~/.vimrc
set ts=2 sw=2 ai et
[root@ens160 test]# vim docker-compose.yml
查询docker compose ps得在yaml文件所在的目录查询
停止不会删除容器
down会把容器删掉
运行的不会默认的docker-compose.yml
[root@ens160 test]# docker compose -f lilee.yml up -d
不用加version ,rhel7要加
查看日志
[root@ens160 test]# docker compose logs -f lilee.yml logs web
构建镜像
[root@ens160 test]# cat docker-compose.yml
services:
test1:
image: test1
build:
context: /root/docker
dockerfile: Dockerfile
command: ["/bin/sh",-c,"sleep 100000"]
container_name: lee1
test2:
image: test2
build:
context: /root/docker
dockerfile: lee
command: ["/bin/sh",-c,"sleep 100000"]
container_name: lee2
[root@ens160 docker]# cd test/
[root@ens160 test]# docker compose up -d
[root@ens160 test]# pwd
/root/docker/test
warning
[root@ens160 test]# docker compose build
[root@ens160 test]# docker compose up -d
[root@ens160 test]# docker compose exec -it test1 /bin/sh
检查语法
[root@ens160 test]# docker compose config
没有问题则打印
[root@ens160 test]# docker compose config -q
未开端口
mysql
[root@ens160 test]# docker inspect test-test1-1
网络
默认网络
利用网络自带的网络
默认是docker0上的网络
none同样的设定 network_mode: none
自定义
会报错
services:
test1:
image: busybox:latest
container_name: test
command: ["/bin/sh","-c","sleep 100000"]
network_mode: default
test2:
image: busybox:latest
container_name: test2
command: ["/bin/sh","-c","sleep 100000"]
networks:
- mynet1
- mynet2
networks:
default:
external: true
name: bridge
mynet1:
driver: bridge
mynet2:
ipam:
driver: default
config:
- subnet: 172.26.0.0/24
gateway: 172.26.0.254
数据卷
services:
test1:
image: busybox:latest
container_name: test
command: ["/bin/sh","-c","sleep 100000"]
network_mode: default
test2:
image: busybox:latest
container_name: test2
command: ["/bin/sh","-c","sleep 100000"]
networks:
- mynet1
- mynet2
volumes:
- data:/data
networks:
default:
external: true
name: bridge
mynet1:
driver: bridge
mynet2:
ipam:
driver: default
config:
- subnet: 172.26.0.0/24
gateway: 172.26.0.254
volumes:
data:
name: lee
compose企业示例
[root@ens160 test]# dnf install haproxy -y --downloadonly --downloaddir=/mnt
[root@ens160 conf]# vi haproxy.cfg
services:
web1:
image: nginx:1.23
container_name: web1
expose:
- 80
volumes:
- web1_data:/usr/share/nginx/html
networks:
- mynet1
web2:
image: nginx:1.23
container_name: web2
expose:
- 80
volumes:
- web2_data:/usr/share/nginx/html
networks:
- mynet1
haproxy:
image: haproxy:2.3
container_name: haproxy
expose:
- 80
ports:
- "80:80"
volumes:
- /mnt/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
networks:
- mynet1
networks:
mynet1:
driver: bridge
volumes:
web1_data:
name: web1_data
web2_data:
name: web2_data
[root@ens160 haproxy]# mv haproxy.cfg /mnt
[root@ens160 haproxy]# cd /mnt/
更多推荐
所有评论(0)