Docker Compose:简化多容器应用部署

序言

在当今的软件开发中,容器化技术的使用已经很普遍了。而 Docker 作为其中最流行的容器化平台之一,为开发者提供了方便、快捷、一致的开发和部署环境。但是,当我们的应用开始变得更加复杂,涉及到多个容器时,手动管理这些容器之间的依赖关系和部署过程将会变得非常繁琐。这时候,Docker Compose 就能帮助我们解决这些问题。

一、什么是 Docker Compose

Docker Compose 是 Docker 官方推出的一个工具,用于定义和运行多容器 Docker 应用。通过使用 Docker Compose,开发者可以通过一个简单的 YAML 文件来定义多个容器之间的关系、配置信息、网络设置等,从而实现一键式的应用部署。

二、安装 Docker Compose

Docker Compose 需要额外安装,安装的方式有两种:

  1. 插件方式安装
  2. standalone 方式安装

2.1 插件安装 Docker Compose

  1. 执行以下命令安装 Docker Compose 插件

    # Ubuntu 命令
    sudo apt-get install docker-compose-plugin# CentOS 命令
    yum install docker-compose-plugin
    
  2. 执行以下命令验证安装

    docker compose version
    

    安装结果:

    image.png

2.2 standalone 方式安装

  1. 执行以下命令安装 Docker Compose 独立版本

    # 以下命令 linux 通用
    curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose# 添加执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    
  2. 执行以下命令验证安装

    docker-compose --version
    

    安装结果:

    image.png

三、使用 Docker Compose

Docker Compose 的使用一般分为以下 3 步:

  1. 编写 Docker Compose 文件:创建一个名为 docker-compose.yml 的 YAML 格式文件,并在其中定义各个服务的配置信息,包括镜像、端口映射、环境变量、依赖关系等。
  2. 启动应用:在 Docker Compose 文件所在目录下,运行命令 docker-compose up,Docker Compose 将会根据配置文件启动所有的容器。
  3. 停止应用:运行命令 docker-compose down,Docker Compose 将会停止并移除所有的容器。

四、使用案例

场景假设:我们需要部署两个容器,分别是 Kibana 和 Elasticsearch。其中,Kibana 依赖 Elasticsearch(注:我们采用 standalone 方式部署的 Docker Compose)

  1. 编写 docker-compose.yml文件

    # 指定 Docker Compose 文件的版本
    version: '3.7'# 定义服务
    services:# Elasticsearch 服务es:# 使用 Elasticsearch 镜像image: docker.elastic.co/elasticsearch/elasticsearch:7.15.1# 指定容器名称container_name: es# 设置环境变量environment:- ES_JAVA_OPTS=-Xms512m -Xmx512m- discovery.type=single-node# 挂载卷volumes:- es-data:/usr/share/elasticsearch/data- es-logs:/usr/share/elasticsearch/logs- es-plugins:/usr/share/elasticsearch/plugins# 授予特权权限privileged: true# 指定网络networks:- es-net# 端口映射ports:- "9200:9200"- "9300:9300"# Kibana 服务kibana:# 使用 Kibana 镜像image: docker.elastic.co/kibana/kibana:7.15.1# 指定容器名称container_name: kibana# 设置环境变量environment:- ELASTICSEARCH_HOSTS=http://es:9200# 指定网络networks:- es-net# 端口映射ports:- "5601:5601"# 依赖关系,确保 Elasticsearch 服务先于 Kibana 服务启动depends_on:- es# 定义网络
    networks:# 定义名为 es-net 的网络,使用 bridge 驱动es-net:driver: bridge# 定义卷
    volumes:# 定义名为 es-data 的卷es-data:# 定义名为 es-logs 的卷es-logs:# 定义名为 es-plugins 的卷es-plugins:
    
  2. docker-compose.yml文件所在目录执行命令启动应用

    # 根据 docker-compose.yml 文件启动服务, 前台启动
    docker-compose up# 后台启动
    docker-compose up -d
    

    正常启动日志:

    image.png

    打开浏览器输入网址 localhost:5601 查看 Kibana 容器启动情况

    image.png

  3. 停止应用

    # 停止后台运行的应用
    docker-compose down
    

五、FAQ

Docker Compose 如果以插件方式安装,那么执行命令是 docker compose [选项] 的格式,若是以 standalone 方式安装,那么执行命令的格式是 docker-compose [选项]

推荐阅读

  1. RabbitMQ(Docker 单机部署)
  2. 深入理解 Java 并发:AbstractQueuedSynchronizer 源码分析
  3. 深入了解 Arthas:Java 应用程序诊断利器
  4. 基于 AI 的数据库助手-Chat2DB
  5. EasyExcel 处理 Excel

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁游戏主机多少钱?幻兽帕鲁游戏服务器一个月仅需32元

随着游戏产业的蓬勃发展,腾讯云紧跟潮流,推出了针对热门游戏《幻兽帕鲁Palworld》的专属游戏服务器。对于广大游戏爱好者来说,这无疑是一个激动人心的消息。那么,腾讯云幻兽帕鲁游戏主机到底多少钱呢?让我们一起来揭晓…

android系统serviceManger源码解析

一,serviceManger时序图 本文涉及到的源码文件: /frameworks/native/cmds/servicemanager/main.cpp /frameworks/native/libs/binder/ProcessState.cpp /frameworks/native/cmds/servicemanager/ServiceManager.cpp /frameworks/native/libs/binder/IP…

C语言 循环控制流程的跳转语句

本文 我们来说 控制流程的跳转语句 C语言 提供三种 控制流程的跳转语句 1. break 语句 我们之前讲 switch 时 大家已经看到过这个 break 了 作用是跳出当前 switch 在循环中 它的作用也差不多 这里 我们举个生活中的例子 例如 我们在操场上跑步 计划跑十圈 但是 还没跑完 我…

负氧离子大气监测系统解析

TH-FZ5负氧离子大气监测系统是一个综合性的环境监测系统,主要用于实时监测和评估大气中负氧离子的浓度水平。负氧离子,也称为空气维生素,对人体健康和环境质量有重要影响。负氧离子大气监测系统通常包括以下几个主要组成部分: 负氧…

python基础---基础运算

基础运算 可以使用type获取一个变量的类型 常见的数据类型 整形, 可以存储任意大小的整数, 支持二进制(如0b100,换算成十进制是4)、八进制(如0o100,换算成十进制是64)、十进制(100)…

BACnet通信协议

1.简介 BACnet是用于智能建筑的通信协议,是国际标准化组织(ISO)、美国国家标准协会(ANSI)及美国采暖、制冷与空调工程师学会(ASHRAE)定义的通信协议。BACnet针对智能建筑及控制系统的应用所设计…

双重检验锁方式实现单例模式

单例模式(Singleton Pattern):是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象&#xff0c…

我是如何带团队从0到1做了AI中台

经历心得 我从18年初就开始带这小团队开始做项目,比如最初的数字广东的协同办公项目,以及粤信签小程序等,所以,在团队管理,人员安排,工作分工,项目拆解等方面都有一定的经验。 19年中旬&#…

WireShark对tcp通信数据的抓包

一、抓包准备工作 安装wireshark sudo apt update sudo apt install wireshark 运行 二、WireShark工具面板分析 上图中所显示的信息从上到下分布在 3 个面板中,每个面板包含的信息含义如下: Packet List 面板:显示 Wireshark 捕获到的所…

Qt QImageReader类介绍

1.简介 QImageReader 是用于读取图像文件的类。它提供了读取不同图像格式的功能,包括但不限于 PNG、JPEG、BMP 等。QImageReader 可以用于文件,也可以用于任何 QIODevice,如 QByteArray ,这使得它非常灵活。 QImageReader 是一个…

【Docker】docker compose服务编排

docker compose 简介 Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。 docker swarm(管理跨节点) Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板&#xff08…

商城数据库88张表结构完整示意图51~60(十三)

五十一: 五十二: 五十三: 五十四: 五十五: 五十六: 五十七: 五十八: 五十九: 六十:

GEE案例分析——2019年3月30日,四川省凉山州木里县雅砻江镇立尔村火灾面积分析(Sentinel-2和NBR)

简介 2019年3月30日18时许,四川省凉山州木里县雅砻江镇立尔村发生森林火灾,着火点在海拔3800米左右,地形复杂、坡陡谷深,交通、通讯不便。 1212据凉山州人民政府新闻办公室消息,火场在雅砻江边上,距木里县车程6到7个小时,火场平均海拔4000米,多个火点均位于悬崖上。森…

如何进行音频压缩大小?6个软件教你快速的压缩音频

如何进行音频压缩大小?6个软件教你快速的压缩音频 以下是六款常用的音频压缩软件,它们可以帮助您快速压缩音频文件大小: 迅捷视频剪辑软件: 这是一款非常实用的音频编辑软件,除了编辑音频外,它还提供了音…

C++使用json11开源库快速生成JSON格式的数据

在程序开发中,JSON格式的接口数据应用很广泛,C生态中有许多高效的JSON库,如nlohmann/json、RapidJSON、jsoncpp等,这些库提供了便捷的API来实现JSON数据的解析、生成、序列化和反序列化,简化了C程序对JSON数据的操作&a…

文件加密软件排行榜前四名(2024年4大好用的加密软件推荐)

说到文件加密,想必大家都很熟悉,文件加密已经普遍应用,文件加密是一种重要的安全措施,可以确保数据的机密性、完整性和可用性,降低因数据泄露或丢失带来的风险 。 下面小编给大家分享几款常用的加密软件,…

STM32单片机中C语言的一些隐藏bug

必须类型一致的判断才能正常 double a-0.4; if(a < -0.2){print("低电平"); }这段代码可能未必如你所愿的运行. < 小于号的判断一定要类型一致, 尤其是牵扯到双精度类型的判断… 一定要保证符号 两边的数据类型一致才有可能得到你想要的结果. 代码里 -0.4 默认…

贪心算法、Dijkstra和A*类路径搜索算法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言系列文章目录前言1.贪心算法、Dijkstra和A*类路径搜索算法(1)greedy best frist search贪心算法(仅仅考虑启发式代价)1.核心思想2.构造启发式猜…

权益商城系统源码 现支持多种支付方式

简介&#xff1a; 权益商城系统源码&#xff0c;支持多种支付方式&#xff0c;后台商品管理&#xff0c;订单管理&#xff0c;串货管理&#xff0c;分站管理&#xff0c;会员列表&#xff0c;分销日志&#xff0c;应用配置。 上传到服务器&#xff0c;修改数据库信息&#xff…

C++例题:大数运算---字符串相加(使用数字字符串来模拟竖式计算)

1.代码速览 class Solution2 { public:string addStrings(string num1, string num2){//end1和end1是下标int end1 num1.size() - 1;int end2 num2.size() - 1;string str;//下标(指针)从后向前走,走到头才可以结束,所以是end>0int next 0;while (end1 > 0 || end2 &…