前言
“Compose”
一词的原意是创作、组成、构成(一个整体),那么“Docker Compose”
一词可以理解为一组docker。今天博主着重介绍一下这个“容器导演”
—— 一个docker自带的容器管理工具。
Docker Compose入门
1. 定义
Docker Compose
is a tool for running multi-container applications on Docker defined using the Compose file format. A Compose file is used to define how one or more containers that make up your application are configured. Once you have a Compose file, you can create and start your application with a single command: docker compose up.
博主尝试翻译一下:
Docker Compose
是一个使用规范的Compose file
(即YML)文件运行多容器应用的工具。而这个YML文件被用于“组织”
你的应用中的一个或多个容器,一旦你有了该文件,你能够通过一个命令:docker compose up
,完成应用的启停。
2. 开始必备
2.1 dockerfile
dockerfile是构建镜像的必备文件,也是镜像的根本。关于它的详细内容可以回顾博主的相关博文,这里不再重点介绍。
2.2 compose.yml
compose文件是compose运转的必备文件,也是构建“一组”
容器的依赖关系,有序且准确的运行一个完整应用的基础。
有些盆友可能好奇了,这是个什么文件?博主举个栗子(来自github):
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: redis
简单讲就是一个YAML
文件。YAML
是一个类似 XML、JSON 的标记性语言,便于阅读、易于理解,已普遍用于各种开发语言中。compose基于YML完成服务的定义与编排。
2.3 run application
启动应用时,我们使用如下命令,可一键完成多容器的启动:
docker compose up --build
3. 核心知识
3.1 基本概念
通过“开始必备”
一节,我们知道,如熟练使用compose,需重点掌握compose.yml。该文件决定了一个service“需要哪些docker镜像以及每个镜像间的依赖关系”
,而众多的service构成了一个application,或者是一个project。
从博主的描述来看,这里有2个重要的概念:project和service。
术语 | 解释 |
---|---|
service | 一个服务单元,在compose中可视为一个镜像的实例。 |
project | 一个完整的项目或者应用,在compose中可视由多个镜像实例组合而成的应用。 |
3.2 选项与指令集
这是一个compose的命令:
docker compose [-f <arg>...] [options] [COMMAND] [ARGS...]
其中主要的Option(选项)如下:
选项 | 用途 |
---|---|
–ansi | 控制何时打印 ANSI 控制字符。可选项有:“never” ,“always” ,“auto” |
–compatibility | 向后兼容运行 |
–env-file | 指定环境文件。比如一些环境变量的配置文件 |
-f,–file | 指定 Compose 配置文件(最重要 ) |
–parallel | 控制最大并行性,-1 为无限制 (默认 -1) |
–profile | 指定要启动的服务 |
–project-directory | 指定一个替代的工作目录(默认: Compose 文件的路径) |
-p,–project | 指定一个项目名称 |
主要的Command(命令)如下:
命令 | 用途 |
---|---|
config | 验证compose.yml 的格式是否正确 |
up | 创建并启动所有服务(即容器组),如后台启动加-q |
pull | 拉取服务依赖的镜像 |
logs | 查看服务容器的输出日志,如跟踪日志加-f |
ps | 查看工程中的所有服务(即容器组),如查看具体的服务,需指定名称 |
run | 在指定服务(容器)上执行一个命令 |
exec | 进入指定的服务(容器),如服务包含多个容器加--index ,指定序号 |
pause、unpause | 暂停、恢复服务(容器) |
start、stop、restart | 启动、停止、重启服务(容器),如操作具体的服务,需指定名称 |
rm | 删除已停止运行的服务(容器),如同步删除挂载的卷加-v |
port | 输出指定服务(容器)的端口所映射的主机端口 |
images | 输出指定服务(容器)对应的镜像 |
4. 举个例子
# 定义compose版本号
version : '3.8'
# 定义服务集
services:
test-nacos: #service名称
container_name: test-nacos # 容器名称
build:
context: ./nacos # 指定构建镜像上下文路径
dockerfile: Dockerfile #指定nacos dockerfile文件名
environment: # 环境变量
- MODE=standalone
depends_on: # 依赖的service
- test-mysql
test-mysql:
container_name: test-mysql
build:
context: ./mysql
dockerfile: Dockerfile #指定mysql dockerfile文件名
environment:
MYSQL_DATABASE: dbname
MYSQL_ROOT_PASSWORD: password
定义完成YML文件,如无误,你就可以根据命令执行启动了。
结语
通过玩转docker
系列文章,我想能够让各位盆友对docker产生基本的认识,进而通过不断的尝试与实践,加深这种认识。我们面对新技术、新工具时,通常需要勤思考、勤动手、勤总结。在IT领域,没有什么比行动更重要。
文章再长,终有一尾;
知识再多,一篇难尽!
玩转docker,不一样的精彩,欢迎各位大佬指点与关注,博主在这里不甚感激!
系列回顾
微服务实战系列之玩转Docker(七)
微服务实战系列之玩转Docker(六)
微服务实战系列之玩转Docker(五)
微服务实战系列之玩转Docker(四)
微服务实战系列之玩转Docker(三)
微服务实战系列之玩转Docker(二)
微服务实战系列之玩转Docker(一)
微服务实战系列之云原生