一起学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

相关推荐
小猿姐10 小时前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站1 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站2 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ2 天前
Kubeneters HA Cluster部署
运维
lichenyang4532 天前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang4532 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4532 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4532 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
江华森2 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森2 天前
Matplotlib 数据绘图基础入门
运维