Docker-Compos(未完成)
Docker-Compose
Docker Compose官方文档:Docker Compose overview | Docker Docs
1.简述
部分应用由多个服务组件构成,也意味着要运行多个不同的容器。docker-compose 提供了使用一个(yaml)文件描述多个容器的容器定义和编排方式。
docker-compose的主体内容,就是命令行工具和对应项目的配置文件,docker-compose自身没有服务进程。
项目的配置文件docker-compose.yml指定了那个项目要运行的容器的参数、环境变量,以及这些容器的健康检测和依赖关系等。
2.安装docker-compose
在 Docker 旧版本中,docker-compose是独立插件,需要单独安装,使用单独命令docker-compose管理。在较新版本的 Docker 中,docker-compose 已经集成到 docker-cli 中,安装时同docker套件一同安装,且使用docker compose子命令管理compose。
# 发行版安装
yum install docker-compose-plugin
apt install docker-compose
#二进制安装 - github docker 官方项目
https://github.com/docker/compose/releases
3.概念
-
项目(project)
compose项目是一个项目目录,目录中应包含项目的compose文件和构建依赖文件。
-
compose文件
compose文件是compose项目的核心文件,它使用yaml语言格式描述了该项目所需容器如何配置和运行。
-
service
compose文件描述中
services顶级标签所描述的容器叫做service,与Swarm无关。
4.compose定义文件:compose.yaml
食用前请先自行简单了解yaml格式。yaml是一个相比json更易于书写的文本数据结构格式。
Compose文件撰写规范 官方文档:Compose Specification Overview | Docker Docs
一个
docker run命令和docker-compose定义互相转换的项目命令转compose:composerize - run to compose
compose转命令:decomnposerize - compose to run
以下面kodbox的compose文件为例:
# cat docker-compose.yaml
version: '3.5'
services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- "./db:/var/lib/mysql" #./db是数据库持久化目录,可以修改
environment:
- MYSQL_ROOT_PASSWORD=
- MARIADB_AUTO_UPGRADE=1
- MARIADB_DISABLE_UPGRADE_BACKUP=1
env_file:
- db.env
app:
image: kodcloud/kodbox
restart: always
ports:
- 80:80 #左边80是使用端口,可以修改
volumes:
- "./site:/var/www/html" #./site是站点目录位置,可以修改
environment:
- MYSQL_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
redis:
image: redis:alpine
restart: always
这是从kodbox的github项目中copy的,kodbox部署简单,用docker部署也简单,因此我认为适合作为初步了解compose文件的示例。这个compose文件有两个顶级标签,分别是version,和services。
version和name
version标签已经淘汰。version并不类似于gcc编译器的-std=选项,仅仅是一个声明,如果版本不匹配将会收到提示信息,而compose并不会按照标签指定的版本来检查和运行compose文件。
name标签用来在指定项目的名称,当未显式指定运行时的项目名称时用此作为名称。compose提供了重写项目名称的方法,且如果没有使用name顶级标签则项目使用目录为默认的名称。
services
services顶级标签下就是容器列表(说是列表,实际是字典)。
services:
<service_name>: # 名称顶级标签,容器在compose文件中的识别名,在未显式声明容器名称时使用该名称识别
image: <NAME>[:TAG]
build: <PATH> # 不是使用现有镜像而是从项目中的Dockerfile构建镜像,此处指定的是构建项目路径
container_name: <容器名>
# 该容器名覆盖名称顶级标签中的定义,若不指定则容器管理显示的容器名格式为"项目名_容器名_#n"
# 容器名是上面的识别名,运行的第多少个项目实例则n为多少
hostname: <HOSTNAME>
ports:
- [HOST:]CONTAINER[/PROTOCOL] # 端口分配的短语法
volumes:
- <挂载源>:<容器路径> # 挂载的短语法,用法同命令行
environment:
- <KEY>=<VAL>
env_file:
- <文件路径>
# 根据文件提供环境变量
command: <CMD> # 覆盖dockerfile中定义的CMD,可以用shell格式
networks:
# 网络列表
- <网络>
# 如果要指定详细参数,则使用下面这样的字典进行配置而不使用列表
<网络>:
aliases:
- <别名> # 设置该网络下的别名
ipv4_address: <IP> # 指定静态IP
mac_address: <MAC>
priority: <#n>
# 网络分配优先级,在一个容器分配多个网络时,按照数值从大到小先后分配,默认值为0
dns:
- <DNSIP>
restart: 自动重启策略
depends_on:
- <容器>
# 依赖容器,会在这些容器启动后才启动
network
如果要在多个服务间使用同一网络,应当在network顶级标签中显示声明该网络,且顶级标签下可为网络指定配置。
network:
- <网络名称>
# 自动分配网络资源,使用bridge驱动,要指定参数则使用字典而不使用列表
<网络名称>:
driver: <网络类型>
# 可指定为host 和 none
internal: ture
# 默认为外部网络,若指定internal为true则创建一个与外部隔离的网络
ipam:
# 使用ipam管理网络参数
driver: <ipam驱动>
config:
- subnet: <网络地址>/<网络位长>
ip_range: <自动分配范围>
gtateway: <网关>
aux_address:
<主机名>: <IP>
# 网络驱动使用的辅助地址,作为主机名到IP的映射
name: <网络名称>
# 使用该名称创建docker网络
external: true
# 如果external指定为true,则这是一个生命周期由外部而非compose管理的网络
# 除name外其他参数都不做数,compose不会主动创建该网络,若该网络不存在则返回错误信息
volumes
若要在多个服务间使用同一存储卷,应当在volume顶级标签中下声明该卷。
volumes:
<存储卷名称>:
external: true
# external指定为true,表示该卷生命周期由外部而非compose管理
name: <卷名称>
# 使用该名称创建存储卷
configs
5.docker-compose命令行
旧版的docker compose需要单独安装,并且其命令为docker-compose CMD形式,而新版compose则作为docker-cli插件,命令形式变为docker子命令docker compose CMD。以新版的docker compose进行演示。
docker compose [-f <arg>...] [options] [COMMAND] [ARGS...]
-f, --file <docker-compose-file> # 指定compose文件,可以使用多个-f选项指定多个文件
-p, --project-name <project-name> # 指定项目名称
--dry-run # 干燥运行,演习,检验而不实际执行
compose文件分析
docker compose config
格式分析、配置解析并以规范格式输出
docker compose config [OPTIONS] [SERVICE...]
`常用选项:
-q, --quiet # 仅验证配置,不输出规范格式
--services # 打印所有服务名称,一个一行
--images # 打印所有镜像名,一个一行
--volumes # 打印所有存储卷,一个一行
--profiles # 打印所有profile,一个一行
项目生命周期管理
docker compose up
创建项目容器并启动容器
docker compose up [OPTIONS] [SERVICE...]
`常用选项:
-d, --detach # detach模式:容器在后台运行
--scale <service=NUM> # 将service扩充到指定规模(容器个数)
docker compose down
停止并删除项目容器
docker compose down [OPTIONS] [SERVICES]
`常用选项:
docker compose build
构建或重新构建compose文件中指定要构建的镜像
docker compose build [OPTIONS] [SERVICE...]
`常用选项:
docker compose create
为项目services创建容器而不启动
docker compose create [OPTIONS] [SERVICE...]
`常用选项:
docker compose start
启动service容器
docker compose start [SERVICE...]
docker compose stop
停止service容器
docker compose stop [OPTIONS] [SERVICE...]
`常用选项:
docker compose restart
重启service容器
docker compose restart [OPTIONS] [SERVICE...]
`常用选项:
docker compose rm
删除已停止的service容器
docker compose rm [OPTIONS] [SERVICE...]
`常用选项:
docker compose kill
强制停止service容器
docker compose kill [OPTIONS] [SERVICE...]
`常用选项:
查看compose信息
docker compose ls
列出运行中的compose项目
docker compose ls [OPTIONS]
`常用选项:
docker compose ps
根据compose文件列出容器
docker compose ps [OPTIONS] [SERVICE...]
`常用选项:
docker compose images
列出创建的容器使用的镜像
docker compose images [OPTIONS] [SERVICE...]
`常用选项:
docker compose port
显示端口绑定的公共端口
docker compose port [OPTIONS] SERVICE PRIVATE_PORT
`常用选项:
docker compose top
显示运行中的进程
docker compose top [SERVICES...]
docker compose logs
浏览容器的前台输出
docker compose logs [OPTIONS] [SERVICE...]
`常用选项:
service容器内执行命令
docker compose run
在一个service容器内执行一次性命令
docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]
`常用选项:
docker compose exec
在一个service容器中执行一个命令
docker compose exec [OPTIONS] SERVICE COMMAND [ARGS...]
`常用选项:

浙公网安备 33010602011771号