目录
- 1 前言
- 2 不使用 Docker Compose
- 2.1 启动 MySQL 容器
- 2.2 启动 Redis 容器
- 2.3 启动微服务容器
- 3 使用 Docker Compose
- 4 使用 Docker Compose 的优势
- 5 结语
- 参考地址
1 前言
在当今容器化应用的开发与部署中,容器编排工具的选择对于简化流程、提高效率至关重要。本文将探讨在不使用 Docker Compose 与使用 Docker Compose 两种场景下,针对多个容器的启动、管理和交互所涉及的差异。通过对比手动执行 docker run
命令与使用 docker-compose.yml
文件定义服务的方式,突出了 Docker Compose 在简化容器编排和管理方面的优势。让我们深入探索这两种方法的异同,以及为何 Docker Compose 成为众多开发者和运维人员的首选工具。
2 不使用 Docker Compose
在不使用 Docker Compose 的情况下,您需要手动运行多个 docker run
命令,依次启动各个容器,并手动管理它们的交互和依赖关系。以下是演示步骤:
2.1 启动 MySQL 容器
docker run -d --name mysql_container -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=no \
-e MYSQL_DATABASE=db2021 \
-e MYSQL_USER=test \
-e MYSQL_PASSWORD=test123 \
-v /app/mysql/db:/var/lib/mysql \
-v /app/mysql/conf/my.cnf:/etc/my.cnf \
-v /app/mysql/init:/docker-entrypoint-initdb.d \
--network=my_net \
mysql:5.7 --default-authentication-plugin=mysql_native_password
2.2 启动 Redis 容器
docker run -d --name redis_container -p 6379:6379 \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
--network=my_net \
redis:6.0.8 redis-server /etc/redis/redis.conf
2.3 启动微服务容器
docker run -d --name microservice_container -p 6001:6001 \
-v /app/microService:/data \
--network=my_net \
--link redis_container:redis \
--link mysql_container:mysql \
my_microService:1.0
这样,您便完成了手动启动三个容器的过程,但是在容器的启动顺序和管理上,需要手动执行多个命令,且容器间的连接需要通过 --link
和 --network
参数手动指定。
3 使用 Docker Compose
与手动执行多个命令相比,使用 Docker Compose 将会更加简单和高效。
提供了一个示例的 docker-compose.yml
文件,
version: "3"
services:
microService:
image: my_microService:1.0
container_name: ms01
ports:
- "6001:6001"
lumes:
- /app/microService:/data
tworks:
- my_net
pends_on:
- redis
mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
lumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
/app/redis/data:/data
networks:
-my_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2021'
MYSQL_USER: 'test'
MYSQL_PASSWORD: 'test123'
ports:
- "3306:3306"
umes:
- /app/mysql/db:/var/lib/mysql
app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
works:
- my_net
mmand: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
my_net :
其中定义了三个服务(microService、redis、mysql)以及它们的配置、网络设置和依赖关系。通过执行以下命令,即可根据该文件启动所有服务:
docker-compose up -d
这一命令将会根据 docker-compose.yml
文件中的定义自动创建、连接和启动三个容器。Docker Compose 会自动处理容器的启动顺序和连接关系,确保容器能够按照指定的依赖关系启动。此外,使用 Docker Compose 还能够通过 docker-compose stop
命令一键停止所有容器,简化了管理和维护的流程。
4 使用 Docker Compose 的优势
简化部署流程: 只需运行 docker-compose up
命令,即可根据定义在 docker-compose.yml
中的服务关系自动启动所有容器。
容器间连接管理: Docker Compose 会自动处理容器之间的连接和依赖关系,确保服务按照指定顺序启动。
统一管理: 通过一个文件统一管理多个容器,易于维护和更新。
这种方法使得整个应用程序的部署和管理变得更加简单和高效。Docker Compose 自动管理容器之间的连接和启动顺序,减少了人为错误的可能性,提高了开发和部署的效率。
5 结语
使用 Docker Compose 相较于手动运行 docker run
命令具有诸多优势。它通过定义简明的 docker-compose.yml
文件,自动化了多个容器的创建、连接和启动过程,简化了容器间的交互和依赖管理。相比之下,手动操作容器的启动需要更多的命令和额外的注意事项,容易导致错误和管理困难。Docker Compose 提供了更高效、更一致的容器化部署方式,为开发团队带来了便捷和可维护性,并成为构建复杂应用程序的首选工具之一。
参考地址
Docker Compose overview | Docker Docs