当前位置: 首页 > article >正文

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

目录

  • 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


http://www.kler.cn/news/159802.html

相关文章:

  • Linux(gRPC):Ubuntu22.04安装gRPC
  • 程序员都在收藏的免费好用API接口
  • Python Pandas处理csv文件常用操作代码
  • MAC笔记本里Spyder python 的安装问题 和 虚拟环境VENV的创建
  • 大话数据结构-查找-多路查找树
  • SimplePIR——目前最快单服务器匿踪查询方案
  • 基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(二)
  • 输入日期求n天后
  • 二叉树的前、中和后序遍历的递归与迭代实现
  • Springboot 项目关于版本升级到 3.x ,JDK升级到17的相关问题
  • Boost:asio捕获信号
  • 【BroadcastReceiver】
  • 排序:直接插入排序希尔排序
  • 【Docker】从零开始:13.Docker安装tomcat
  • 猫头虎分享已解决Bug || 报错npm ERR! A complete log of this run can be found in: npm ERR!
  • 8个Python高效数据分析的技巧!
  • 【链表Linked List】力扣-24 两两交换链表中的节点
  • Python小案例:while练习题
  • css 3D背景反转实现
  • 品牌要随时监测电商价格现实吗
  • uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ✨
  • pytorch学习6-非线性变换(ReLU和sigmoid)
  • 电力仪表在工厂车间设备电能管理系统的设计-安科瑞黄安南
  • uView ui 1x uniapp 表格table行内容长度不一导致高度不统一而出现的不对齐问题
  • 信息系统安全运维服务资质认证申报流程详解
  • 游戏:火星孤征 - deliver us mars - 美图秀秀~~
  • 【SQLite】SQLite3约束总结
  • 服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例
  • bpftrace原理与使用方法
  • Python float(input())的用法,web中的应用