有时一个项目可能包含多个容器。手动启停每个容器既低效又需要大量维护工作。多个容器之间还可能存在依赖关系,需要按照指定的顺序启动,所以手动维护这些容器会变得复杂和繁琐。
因此需要一个工具,来进行多容器的管理和编排,它就是 Docker Compose。
Docker Compose 通过一个 YAML 配置文件(通常是 docker-compose.yml),来定义管理应用程序的各种服务、网络和卷,并通过一条命令就可以启动、停止一组相关联的多个容器。
一、编写 docker-compose.yml 文件
# 定义服务,每一个容器就是一个服务
services:
# redis 服务名称,与容器对应
liwy-redis:
# 使用的镜像
image: redis:7.2.4
# 挂载容器卷
volumes:
- /opt/docker/redis/conf:/etc/redis
- /opt/docker/redis/data:/data
- /etc/localtime:/etc/localtime
# 端口映射
ports:
- 6379:6379
# 启动模式
restart: always
# 运行的命令和参数
command: ['redis-server', '/etc/redis/redis.conf']
# 指定加入的网络
networks:
- liwy-net
# boot 服务名称
liwy-springboot:
# 使用当前目录下的 Dockerfile 构建镜像
build: .
ports:
- 8080:8080
restart: always
networks:
- liwy-net
# 依赖于哪个服务,需要在这些服务后启动
depends_on:
- liwy-redis
# 定义网络
networks:
# 创建 liwy-net 网络
liwy-net:
driver: bridge
可以看到上面的 docker-compose.yml 文件和 docker 命令基本是一致的,只是使用了 YAML 文件的格式而已,还是比较好理解的。
这里我们会创建一个 bridge 模式的自定义网络 liwy-net,将两个服务都加入到该网络中,因此,我们的 liwy-springboot 服务中就可以使用 liwy-redis 的服务名称来连接 redis 了。
在使用这个 docker-compose.yml 文件之前,我们还要准备好 redis 服务要挂载的配置文件,以及 liwy-springboot 服务的 jar 包及 Dockerfile 文件,这些内容我们之前的容器部署实例中都有做过,这里就不再赘述了。
二、Docker Compose 命令
我们先将 liwy-springboot-1.0-SNAPSHOT.jar、Dockerfile、docker-compose.yml 放在同一个目录下(liwyProject),并在当前目录中使用如下命令:
# 检查 docker-compose.yml 有没有问题
docker compose config
# 检查 docker-compose.yml 有没有问题,
# 有问题才会输出内容
docker compose config -q
# 显示 compose 编排的所有正在运行的容器
docker compose ps
# 显示 compose 编排的所有容器
docker compose ps -a
# 启动
docker compose up
# 后台启动
docker compose up -d
# 停止并删除容器、网络、容器卷
docker compose down
# 停止服务
docker compose stop
# 停止 docker-compose.yml 中定义的某一个服务
docker compose stop <服务名>
# 启动已停止的容器
docker compose start
# 启动 docker-compose.yml 中定义的某一个服务
docker compose start <服务名>
# 重启
docker compose restart
# 重启 docker-compose.yml 中定义的某一个服务
docker compose restart <服务名>
需要注意,如上这些命令都需要在 docker-compose.yml 所在目录下执行。
所有容器启动后,我们可以查看下容器与网络列表,发现多了一个名为 liwyproject_liwy-net 的网络,和两个容器:liwyproject-liwy-springboot-1,liwyproject-liwy-redis-1。也就是我们在 docker-compose.yml 中配置的两个服务,容器名称由所在目录名称+服务名称组成。
本文暂时没有评论,来添加一个吧(●'◡'●)