一起学docker系列之十七Docker Compose 与手动操作的比较与优势分析

目录

  • [1 前言](#1 前言)
  • [2 不使用 Docker Compose](#2 不使用 Docker Compose)
    • [2.1 启动 MySQL 容器](#2.1 启动 MySQL 容器)
    • [2.2 启动 Redis 容器](#2.2 启动 Redis 容器)
    • [2.3 启动微服务容器](#2.3 启动微服务容器)
  • [3 使用 Docker Compose](#3 使用 Docker Compose)
  • [4 使用 Docker Compose 的优势](#4 使用 Docker Compose 的优势)
  • [5 结语](#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 容器

bash 复制代码
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 容器

bash 复制代码
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 启动微服务容器

bash 复制代码
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 文件,

yaml 复制代码
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)以及它们的配置、网络设置和依赖关系。通过执行以下命令,即可根据该文件启动所有服务:

bash 复制代码
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

相关推荐
Leinwin21 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_8653825021 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇21 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.75921 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣21 小时前
智能体选型实战指南
运维·人工智能
yy552721 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 天前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔1 天前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密1 天前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20151 天前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑