docker compose容器编排工具

华子目录

  • `docker compose`概述
  • 主要功能
  • 工作原理
  • `docker compose`中的`管理层`
  • `docker compose`的常用命令参数
  • 构建和重新构建服务
  • `docker compose`的`yaml文件`
    • 一、`服务`(`services`)
    • 二、`数据卷`(`volumes`)
    • 三、`网络`(`networks`)

docker compose概述

  • Docker Compose是一个用于定义和运行多容器应用程序的工具
  • 其是官方的一个开源项目,托管到github上:https://github.com/docker/compose

主要功能

定义服务

  • 使用YAML格式配置文件来定义一组相关的容器服务每个服务可以指定镜像、端口映射、环境变量、存储卷等参数
  • 例如,可以在配置文件中定义一个Web服务一个数据库服务,以及它们之间的连接关系

一键启动和停止

  • 通过一个简单的命令,可以启动停止整个应用程序所包含的所有容器。这大大简化多容器应用的部署和管理过程
  • 例如,使用docker-compose up命令可以启动配置文件中定义的所有服务,使用docker-compose down命令可以停止并删除这些服务

服务编排

  • 可以定义容器之间依赖关系,确保服务按照正确的顺序启动和停止。例如,可以指定数据库服务必须在Web服务之前启动
  • 支持网络配置,使不同服务容器可以相互通信。可以定义一个自定义的网络,将所有相关的容器连接到这个网络上

环境变量管理

  • 可以在配置文件中定义环境变量,并在容器启动时传递给容器。这使得在不同环境(如开发、测试和生产环境)中使用不同的配置变得更加容易
  • 例如,可以定义一个数据库连接字符串环境变量,在不同环境中可以设置不同的值

工作原理

1.读取配置文件

  • Docker Compose读取YAML配置文件解析其中定义的服务参数

2.创建容器

  • 根据配置文件中的定义Docker Compose调用Docker引擎创建相应的容器。它会下载所需的镜像(如果本地没有),并设置容器各种参数

3.管理容器生命周期

  • Docker Compose监控容器状态,并在需要启动、停止、重启容器
  • 它还可以处理容器故障恢复,例如自动重启失败的容器

docker compose中的管理层

  • 服务 (service) 一个应用容器实际上可以包括若干运行相同镜像容器实例
  • 项目 (project) 由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义
  • 容器container)是服务具体实例每个服务可以有一个或多个容器容器是基于服务定义镜像创建的运行实例

docker compose的常用命令参数

  • -d表示后台运行
  • docker compose默认的文件为docker-compose.yml,如果不是这个文件名,则需要使用-f指定对应的文件名
[root@docker-node1 ~]# cd huazi/
[root@docker-node1 huazi]# vim docker-compose.yml
services:web:   #服务名image: nginx:1.23  #服务名用的镜像ports:  #映射的端口- "80:80"testnode:  #服务名image: busybox:latestcommand: ["/bin/sh","-c","sleep 10000"]
#可以单独指定需要的运行的容器
[root@docker-node1 huazi]# docker compose up
testnode  web
#不指定表示全部运行
#-d表示在后台运行,不加-d进程不会结束
[root@docker-node1 huazi]# docker compose up -d
[+] Running 3/3✔ Network huazi_default       Created                                            0.1s✔ Container huazi-web-1       Started                                            0.5s✔ Container huazi-testnode-1  Started                                            0.5s
#查看容器状态
[root@docker-node1 huazi]# docker compose ps
NAME               IMAGE            COMMAND                   SERVICE    CREATED          STATUS          PORTS
huazi-testnode-1   busybox:latest   "/bin/sh -c 'sleep 1…"   testnode   46 seconds ago   Up 45 seconds
huazi-web-1        nginx:1.23       "/docker-entrypoint.…"   web        46 seconds ago   Up 45 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp
#stop表示停止容器,并不会删除容器,可以使用start开启容器
[root@docker-node1 huazi]# docker compose stop
[+] Stopping 2/2✔ Container huazi-testnode-1  Stopped                                           10.2s✔ Container huazi-web-1       Stopped                                            0.3s
#start开启容器
[root@docker-node1 huazi]# docker compose start
[+] Running 2/2✔ Container huazi-testnode-1  Started                                            0.3s✔ Container huazi-web-1       Started                                            0.3s
#重启服务
[root@docker-node1 huazi]# docker compose restart
#down表示停止并删除容器
[root@docker-node1 huazi]# docker compose down
[+] Running 3/3✔ Container huazi-testnode-1  Removed                                           10.2s✔ Container huazi-web-1       Removed                                            0.2s✔ Network huazi_default       Removed                                            0.1s
#logs查看服务的日志输出
[root@docker-node1 huazi]# docker compose logs
testnode  web
[root@docker-node1 huazi]# docker compose logs web

构建和重新构建服务

  • docker compose build
#先创建dockerfile
[root@docker-node1 ~]# cd docker/
[root@docker-node1 docker]# vim dockerfile
FROM busybox:latest
RUN ["/bin/sh","-c","touch /file1.txt"]
[root@docker-node1 ~]# cd huazi/
[root@docker-node1 huazi]# vim docker-compose.yml
services:test1:  #服务名image: test1   #构建的镜像名build:context: /root/docker   #构建上下文为/root/docker目录dockerfile: dockerfile   #Dockerfile的名称command: ["/bin/sh","-c","sleep 10000"]   #容器启动后执行的命令container_name: huazi1   #容器的名称为huazi1test2:  #服务名image: test2  #构建的镜像名build:context: /root/docker   #构建上下文为/root/docker目录dockerfile: dockerfile  #Dockerfile的名称command: ["/bin/sh","-c","sleep 10000"]   #容器启动后执行的命令container_name: huazi2  #容器的名称为huazi2
#up直接运行
[root@docker-node1 huazi]# docker compose -f docker-compose.yml up -d
#只创建镜像
[root@docker-node1 huazi]# docker compose -f docker-compose.yml build 
test1  test2[root@docker-node1 huazi]# docker compose -f docker-compose.yml build
#进入容器
[root@docker-node1 huazi]# docker compose exec -it test1 /bin/sh
/ # ls
bin        etc        home       lib64      root       tmp        var
dev        file1.txt  lib        proc       sys        usr
#拉群镜像
[root@docker-node1 huazi]# docker compose pull
#语法检测,没有问题,会打印yaml文件内容
[root@docker-node1 huazi]# docker compose -f docker-compose.yml config

docker composeyaml文件

一、服务services

服务名称

  • 每个服务配置文件中都有一个唯一名称,用于在命令行其他部分引用该服务
services:service1:  #服务名为service1#服务1的配置service2:  #服务名为service2#服务2的配置

镜像image

  • 指定服务所使用的镜像名称标签。例如, image: nginx 表示使用nginx镜像最新版本
services:service1:image: nginxservice2:image: mysql:5.7

端口映射ports

  • 容器内部端口映射到主机的端口,以便外部可以访问容器内服务
  • 例如:- "8080:80"表示将宿主机8080端口映射到容器内部80端口
services:web:  image: nginxcontainer_name: web_nginx  #容器名restart: always  #容器的重启策略expose:- 1234  #容器暴露的端口ports:- "8080:80"  #端口映射,宿主机:容器

环境变量environment

  • 容器设置环境变量,可以在容器内部应用程序中使用。
  • 例如, key: value1设置环境变量key的值为value1
services:web:image: mysql:5.7environment:  #设置环境变量MYSQL_ROOT_PASSWORD: 123456

存储卷volumes

  • 主机上目录或文件挂载到容器中,以实现数据持久化共享
  • 例如/host/data:/container/data宿主机/host/data目录挂载到容器内/container/data路径
services:test:image: busyboxcommand: ["/bin/sh","-c","sleep 1000"]restart: alwayscontainer_name: busybox1volumes:- /etc/passwd:/tmp/passwd:ro

网络networks

  • 服务连接到特定网络,以便不同服务容器可以相互通信
services:test1:image: busyboxcontainer_name: huazicommand: ["/bin/sh","-c","sleep 10000"]
[root@docker-node1 huazi]# docker compose up -d

在这里插入图片描述
在这里插入图片描述

  • network_modebridge,host,none
services:test1:image: busyboxcontainer_name: huazicommand: ["/bin/sh","-c","sleep 10000"]network_mode: bridge  #使用默认的bridge模式
[root@docker-node1 huazi]# docker compose up -d

在这里插入图片描述
在这里插入图片描述

  • 使用networks创建网络
services:test1:image: busyboxcontainer_name: huazicommand: ["/bin/sh","-c","sleep 10000"]networks:- bridge1- bridge2networks:bridge1:driver: bridgebridge2:driver: bridge

在这里插入图片描述

[root@docker-node1 huazi]# docker compose up -d

在这里插入图片描述

[root@docker-node1 huazi]# docker compose exec -it test1 /bin/sh

在这里插入图片描述

命令command

  • 指定容器启动执行的命令
  • 例如, command: python app.py指定容器启动时运行python app.py命令
services:web:image: busyboxcontainer_name: busyboxnetwork_mode: bridge1command: ["/bin/sh","-c","sleep 1000"]

二、数据卷volumes

services:test1:image: busyboxcommand: ["/bin/sh","-c","sleep 1000"]restart: alwayscontainer_name: busyboxvolumes:- data:/test- /etc/passwd:/tmp/passwd:rovolumes:data:name: huazi   #数据卷名称
[root@docker-node1 huazi]# docker compose up -d
[root@docker-node1 huazi]# docker volume ls
DRIVER    VOLUME NAME
local     huazi

三、网络networks

services:test1:image: busyboxcontainer_name: test1command: ["/bin/sh","-c","sleep 1000"]network_mode: default  #设置为default,意味着该服务将连接到Docker Compose自动创建的默认网络test2:image: busyboxcontainer_name: test2command: ["/bin/sh","-c","sleep 1000"]networks:- bridge1- bridge2networks:default:external: truename: bridgebridge1:driver: bridgebridge2:ipam:driver: defaultconfig:- subnet: 172.26.0.0/24  #网络的子网端gateway: 172.26.0.254  #网关
[root@docker-node1 huazi]# docker compose up -d

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

科普时刻 | 无线充电热管理:挑战与解决方案

无线充电器可通过电磁感应,在不直接进行电接触的情况下执行电能传输,因此无需繁杂的电缆电线连接,便可为我们的手机、手表、平板电脑以及耳机等设备供电。然而,随着对电子设备更快充电的需求不断增加,热管理对于防止过…

用ChatGPT-o1进行论文内容润色效果怎么样?

目录 1.引导问题发现 2.角色设定 3.整理常问修改 4.提供样例 5.小细节 小编在这篇文章中分享如何充分利用ChatGPT-o1-preview来提升论文润色的技巧。小编将持续跟进最新资源和最新的调研尝试结果,为宝子们补充更多实用的写作技巧。这些技巧将有助于您更有效地利…

数据可视化大屏UI组件库:B端科技感素材PSD

在数据可视化领域,一个出色的大屏UI设计不仅能够准确传达数据背后的信息,更能提升用户的视觉体验。然而,对于UI设计师而言,设计这样一款界面往往面临着寻找合适设计素材的挑战。为了应对这一难题,我们推出了这款数据可…

使用elasticsearch-java客户端API生成DSL语句

在Elasticsearch7.15.0之后,官方提供了elasticsearch-java包作为java客户端工具包,用于取代elasticsearch-rest-high-level-client,其底层依然依赖Elasticsearch Low Level REST 客户端,即elasticsearch-rest-client。 elasticsea…

Python OpenCV按照像素点图片切割

图像分割是从图像处理到图像分析的关键步骤,在目标检测、特征提取、图像识别等领域具有广泛应用。OpenCV是一个强大的计算机视觉库,提供了多种图像分割方法。本文将详细介绍如何使用Python和OpenCV进行基于像素点的图像分割,包括阈值分割、自…

selenium:新窗口切换、关闭

背景 当前页面A,点击跳转到页面B 句柄就是你点击一个页面,跳转了一个新的窗口。你要操作的元素可能在原窗口上,也有可能在新窗口上。 通过索引定位 window_handles driver.window_handlesdriver.switch_to.window(window_handles[1])#定位到第二个通过当前页面的…

Kubernetes和ZStack分配CPU的机制

在 Kubernetes (k8s) 环境中限制 CPU 资源与在 ZStack 虚拟机中分配 CPU 资源的机制存在一些关键差异。以下是这两种环境下 CPU 分配机制的详细对比: Kubernetes 中的 CPU 管理 资源请求与限制:Kubernetes 允许你为每个容器指定 CPU 请求(re…

深度学习中的损失函数

损失函数是深度学习模型训练过程中不可或缺的一部分,是模型预测值与真实值之间差异的客观衡量标准。它们是模型训练的基础,指导算法调整模型参数,以最小化损失并提高预测准确性。它们衡量了模型预测值与真实值的吻合程度。通过最小化这种损失…

#自定义数据类型-简单模拟进程执行

#include <iostream> #include <string> #include <iomanip> using namespace std;//定义一个名为process的结构体&#xff0c;用于表示进程相关信息 //包含进程名、进程ID、进程优先级、进程状态、进程所需CPU时间、进程描述等成员 struct process {string …

KNN算法做预测的几个例子

准备工作 # 安装机器学习算法所用到的第三方库 pip install numpy pip install pandas pip install scikit-learn pip install matplotlibKNN算法 示例一&#xff1a; 鸢尾花数据集分类 Iris也称鸢尾花卉数据集&#xff0c;是一类多重变量分析的数据集。数据集包含150个数据…

【论文阅读】处理器芯片敏捷设计方法:问题与挑战

作者&#xff1a;包云岗老师 包云岗老师是计算机体系结构方向的大牛&#xff0c;推动了体系结构方面的开源事业! 欢迎对本栏目感兴趣的人学习"一生一芯"~ 学习体会&#xff1a; 已有的软硬件生态系统和开发成本制约了对新结构的探索。但目前仍在几种路线上做尝试~ 1…

20. 内置模块

一、random模块 random 模块用来创建随机数的模块。 random.random() # 随机生成一个大于0且小于1之间的小数 random.randint(a, b) # 随机生成一个大于等于a小于等于b的随机整数 random.uniform(a, b) …

嵌入式的软实时和硬实时系统

我觉得嵌入式的软实时和硬实时系统&#xff0c;一定要在应用场景里面去判断。假如你的需求是一个任务的执行时间&#xff0c;必须在2ms内响应&#xff0c;那么你选择的一个系统&#xff0c;系统的设计最晚响应时间是10us&#xff0c;那么这个系统对你来说就是硬实时的。 而且这…

Redis原理—4.核心原理摘要

大纲(9870字) 1.Redis服务器的Socket网络连接建立 2.Redis多路复用监听与文件事件模型 3.基于队列串行化的文件事件处理机制 4.完整的Redis Server网络通信流程 5.Redis串行化单线程模型为什么能高并发 6.Redis内核级请求处理流程与原理 7.Redis通信协议与内核级请求数据…

【UE5】制作插件 并调试【vs2022】

视频教程&#xff1a;好看视频-轻松有收获 https://www.youtube.com/watch?vIjpa9mI2b5I 官方&#xff1a;https://dev.epicgames.com/documentation/zh-cn/unreal-engine/plugins-in-unreal-engine 原文&#xff1a;【UE】制作插件_ue插件-CSDN博客 C制作插件 1. 我们可…

cocos creator 的 widget组件的使用及踩坑

以下的内容基于cocos creator 3.8版本&#xff0c;如有错误&#xff0c;恳请指出。 &#x1f449;官方文档的指引 应用&#xff1a;以上官方指引有非常清晰的使用方式&#xff0c;接下来说明一些注意事项&#xff1a; 1、与canvas搭配的使用&#xff0c;解决多分别率适配问题。…

十五、K8s计划任务JobCronJob

K8s计划任务CronJob&Job 一、Job可以干什么 Job 控制器用于管理 Pod 对象运行一次性任务,比方说我们对数据库备份,可以直接在 k8s 上启动一个 mysqldump 备份程序,也可以启动一个 pod,这个 pod 专门用来备份用的,备份结束 pod 就可以终止了,不需要重启,而是将 Pod…

关于LinuxWindows双系统在八月更新后出现的问题

问题描述类似于&#xff1a;Verifying shim SBAT data failed: If you are, this is caused by a reported problem in the August update if you can get into Windows, either uninstall the August update, or open Command Prompt as administrator and run this command,…

【Elasticsearch 中间件】Elasticsearch 客户端使用案例

文章目录 一、安装 Elasticsearch1.1 启动 Elasticsearch1.2 启动 Kibana 二、客户端代码2.1 导入依赖2.2 配置 application.yaml2.3 定义实体类2.4 连接 Elasticserach2.5 定义 Service 层接口2.6 实现 Service 层功能 三、测试项目3.1 添加数据3.2 搜索数据3.3 更新数据3.4 删…

一文掌握 OpenGL 几何着色器的使用

学习本文需要具备 OpenGL ES 编程基础,如果看起来比较费劲,可以先看入门文章 OpenGL ES 3.0 从入门到精通系统性学习教程 。 什么是几何着色器 几何着色器(Geometry Shader) OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心…