在平常的开发工作中,我们经常需要部署项目,一个项目开发完成后,部署环境先编写 Dockerfile 文件,编写完成后使用 docker build -t 构造镜像,接下来就可以启动容器,可以直接用docker run 后面接一堆指令启动,也可以用 docker-compose.yml 文件管理指令,docker compose>docker compose 是定义和运行多容器 Docker 应用的工具,用 docker compose>docker compose 命令启动,这样更加的便捷,今天总结下 docker-compose.yml 的写法。
1:docker compose>docker compose 概述:
定义和运行多容器 Docker 应用的工具,可以在里面定义多个服务信息,定义每个服务的服务名、端口映射、环境变量、网络模式等。这样可以方便的管理启动命令,方便拓展。常用于部署测试环境等。这样可以保证每个环境映射的端口、依赖的镜像等信息一致,减少因环境问题导致的差异。
2:新建 docker-compose.yml
一般建议将 Dockerfile、jar 包、docker-compose.yml 文件放在同一个目录下,这样操作起来更加的方便,如下图所示:
3:编写 docker-compose.yml
docker-compose.yml 文件主要定义版本、服务、镜像名称及tag、容器名称、环境信息、重启方式等。文件示例:
services:
mall-admin:
image: mall-admin:1.0
container_name: mall-admin
ports:
- "8008:8008"
environment:
- TZ=Asia/Shanghai
- SERVER_PORT=8008
# 可选,Java 启动参数
- JAVA_OPTS="-Xmx2g -Xms2g"
privileged: true
restart: always
network_mode: "host"
(1):version:在docker compose>docker compose v1版本,需要根据需求定义 version 的值,在 docker compose>docker compose v2版本,不需要自定义 version 的值,建议省略,查看 docker compose>docker compose 版本,使用命令,docker compose>docker compose version,查看如下:
Docker Compose version v2.27.1
(2):services:定义服务信息,不同的服务有不同的服务名称,可以定义多个服务。
(3):image:指定运行服务时所使用的 Docker 镜像。
(4):container_name:可选的配置项,为 Docker 容器指定一个自定义的名称。
(5):ports:实现容器内部端口与宿主机端口之间的映射,"8008:8008" 指把宿主机的8008端口映射到容器的8008端口,前边的为宿主机的端口,后边的是容器的端口。
(6):environment:定义容器中的环境变量。基本语法:
a:键值对形式:
TZ="Asia/Shanghai"
SERVER_PORT="8008"
b:列表形式:
- TZ=Asia/Shanghai
- SERVER_PORT=8008
(7):privileged:控制容器权限的配置,当值为 true 的时候,给容器等同于宿主机的权限,安全性较差。通常不建议设置为 true。
(8):restart:为容器指定了一种重启策略,确保容器在各种情况下都能尽可能保持运行状态。当容器由于各种原因(如正常退出、异常崩溃、宿主机重启等)停止运行时,Docker 会依据此策略自动尝试重启容器。
除了always,还有其他几种重启策略:
no:默认策略,容器停止后不会自动重启。
on-failure:只有当容器以非零退出码退出时,Docker 才会尝试重启它。可以通过 on-failure: N 的形式指定最多重启 N 次。
unless-stopped:容器停止后,除非手动停止(如使用 docker stop 命令),否则 Docker 会在 Docker 守护进程重启或宿主机重启后自动重启容器。
(9):network_mode:配置容器的网络模式,指定容器与宿主机及与其他容器之间通信的网络模式。网络模式有 bridge、host、none、Overlay等模式,每种模式对应不同的场景,可以根据自己实际的业务需求进行选择网络模式,这儿不做详解,不清楚的小伙伴可以看之前的博客:docker 网络详解-CSDN博客。
4:docker compose>docker compose 常用命令
(1):docker compose>docker compose up -d:启动新的容器,会先拉取镜像等然后创建新的容器。带上 -d 是非阻塞的,不阻塞当前的命令窗口,不带 -d 是阻塞的,会阻塞当前的命令窗口。
(2):docker compose>docker compose down:停止所有运行中的容器
(3):docker compose>docker compose start:启动一个停止的容器
(4):docker compose>docker compose restart:重启容器
(5):docker compose>docker compose build:构建镜像
(6):docker compose>docker compose config:查看配置
(7):docker compose>docker compose logs:查看容器日志
(8):docker compose>docker compose exec service-name command:进入运行中的容器
以上为 docker compose>docker compose 文件编写的基本步骤及主要内容,我们用docker-compose.yml 文件可以定义不同的服务,对容器的管理更加便捷。docker-compose.yml 中主要定义服务相关信息,如服务名、容器名、映射端口、环境变量等信息。编写完成后,可以用 docker compose>docker compose up -d 命令进行测试,如果启动启动,可以用 docker ps 查看运行中的容器。