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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/212099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法

当在本地计算机上使用Microsoft Office相关库时&#xff0c;可能会出现“未在本地计算机上注册microsoft.ACE.oledb.12.0”提供程序的报错。这是由于缺少相关的驱动程序或者未安装相应的软件所导致的。下面是解决该问题的完整攻略。 可能是因为没有安装数据访问组件&#xff0…

反序列化漏洞(二)

目录 pop链前置知识&#xff0c;魔术方法触发规则 pop构造链解释&#xff08;开始烧脑了&#xff09; 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识&#xff0c;魔术方法触…

树基本概念+前中后序遍历二叉树

&#x1f308;一、树的基本概念 ☀️1.树的定义&#xff1a;树是一种非线性结构&#xff0c;看起来像一棵倒挂的树&#xff0c;根朝上&#xff0c;而叶朝下。 ☀️2.相关术语 1.根节点&#xff1a;图中的A&#xff0c;无前驱结点 2.叶节点&#xff08;终端节点&#xff09;&a…

iptables——建立linux安全体系

目录 一. 安全技术类型 二. linux防火墙 1. 按保护范围划分&#xff1a; 2. 按实现方式划分&#xff1a; 3. 按网络协议划分&#xff1a; 4. 防火墙原理 三. 防火墙工具——iptables 1. netfilter 中五个勾子函数和报文流向 数据包传输过程&#xff1a; ① .五表四链…

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式&#xff08;Facade Pattern&#xff09;隐藏系统的复杂性&#xff0c;并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口&#xff0c;来隐藏系统的复杂性。 这种模式涉及到一个单一的类&#xff0c;该类…

爬虫-xpath篇

1.xpath的基础语法 表达式描述nodename选中该元素/从根节点选取、或者是元素和元素间的过渡//从匹配选择的当前节点选择文档中的节点&#xff0c;而不考虑它们的位置.选取当前节点…选取当前节点的父节点选取属性text()选取文本 举例&#xff1a; 路径表达式结果html选择html元…

使用java批量生成Xshell session(*.xsh)文件

背景 工作中需要管理多套环境, 有时需要同时登陆多个节点, 且每个环境用户名密码都一样, 因此需要一个方案来解决动态的批量登录问题. XShell Xshell有session管理功能: 提供了包括记住登录主机、用户名、密码及登录时执行命令或脚本(js,py,vbs)的功能 session被存储在xsh文…

6-49.自定义的学生类

本题要求定义一个简单的学生类&#xff0c;数据成员仅需要定义学号和姓名&#xff0c;函数成员的原型见给出的代码&#xff0c;请给出函数成员的类外完整实现。 其中m_id和m_name分别表示学生的学号和姓名&#xff0c;类型已经定义好。类内声明了3个成员函数&#xff0c;分别表…

Linux docker批量安装软件

1.前提 具备docker-compose.yml 和 prometheus.yml 文件 常见报错&#xff1a; 1.没有配置network 配置network即可&#xff1a; 2.缺少相关依赖 docker-compose.yml加入相关配置 3.重复项 删除掉重复的 最后 执行 等待完成 下载后相当于有了这些软件包的镜像 启动的每…

大数据Hadoop-HDFS_架构、读写流程

大数据Hadoop-HDFS 基本系统架构 HDFS架构包含三个部分&#xff1a;NameNode&#xff0c;DataNode&#xff0c;Client。 NameNode&#xff1a;NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode&#xff1a;DataNode用于存储实际的数据&#xff0c;将自己管理…

OpenHarmony亮相MTSC 2023 | 质量效率共进,赋能应用生态发展

11月25日&#xff0c;MTSC 2023第十二届中国互联网测试开发大会在深圳登喜路国际大酒店圆满举行。大会以“软件质量保障体系和测试研发技术交流”为主要目的&#xff0c;旨在为行业搭建一个深入探讨和交流的桥梁和平台。OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&a…

Langchain-Chatchat的安装过程

参考&#xff1a;LLMs之RAG&#xff1a;LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs多款embe_一个处女座的程序猿的博客-CSDN博客 1、安装过程中出现了 GPU驱动版本 是11.8 而 python -c "…

文心版吴恩达课程:语义核心(Semantic Kernel)插件的商业应用

文心版吴恩达课程&#xff1a;语义核心&#xff08;Semantic Kernel&#xff09;插件的商业应用 Semantic Kernel is an SDK that integrates Large Language Models (LLMs) like OpenAI, Azure OpenAI, and Hugging Face with conventional programming languages like C#, P…

HTTP 基本概念(计算机网络)

一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本地浏览器的协议…

【海思SS528 | VDEC】MPP媒体处理软件V5.0 | VDEC的使用总结

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

SQL简介

目录 一、SQL 简史 二、数据库简史 1、Dr. Codds 对关系型数据库系统的十二条规则 2、设计数据库的结构 3、数据库的前景 4、对于什么是客户机/服务器型电脑系统 BernardH.Boar的定义如下&#xff1a; 5、交互式语言 6、易于实现 7、SQL 总览 三、流行的 SQL 开发工具…

QT 中 QProgressDialog 进度条窗口 备查

基础API //两个构造函数 QProgressDialog::QProgressDialog(QWidget *parent nullptr, Qt::WindowFlags f Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *…

Vue安装及环境配置详细教程

一、下载node.js 访问node.js官网&#xff1a;Download | Node.js 选择Windows Installer (.msi)的64-bit进行下载。 在E盘新建一个文件夹&#xff0c;取名为nodejs&#xff0c;也可以在其他盘符新建。 在安装node.js时&#xff0c;点击Change...&#xff0c;进行切换盘符安…

C#,数值计算——插值和外推,三次样条插值(Spline_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 三次样条插值 /// Cubic Spline Interpolation /// Cubic spline interpolation object. Construct with x and y vectors, and /// (optionally) values of the first…