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

Docker编排工具---Compose的概述及使用

目录

一、Compose工具的概述

二、Compose的常用命令

1、列出容器

2、查看访问日志

3、输出绑定的公共端口

4、重新构建服务

5、启动服务

6、停止服务

7、删除已停止服务的容器

8、创建和启动容器

9、在运行的容器中执行命令

10、指定一个服务启动容器的个数

11、其他管理命令

三、docker-compose.yml文件

1、image标签

2、build标签

3、command标签

4、dns标签

5、environment标签

6、env_file标签

7、expose标签

8、port标签

9、network_mode标签

10、depends_on标签

11、links标签

12、volumes标签

13、volumes_from标签

14、logs标签


一、Compose工具的概述

        Compose是Docker 官方的开源项目,定位是“定义和运行多个Docker 容器应用的工具”,其前身是Fig,负责实现对Docker容器集群的快速编排。Compose 通过YMAL配置文件来创建和运行所有服务。

        在Docker中构建自定义镜像是通过使用Dockerfile 模板文件来实现的,从而使用户方便地定义一个单独的应用容器。而Compose使用的模板文件是一个YAML格式文件,它允许用户通过一个docker-compose.yml 模板文件来定义一-组相关联的应用容器为一个项目。

        Compose 项目使用Python语言编写而成,调用了Docker 服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose工具来进行编排管理。

        Compose有以下两个重要概念。

        (1)服务(Service): 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。每个服务都有自己的名称、使用的镜像、挂载的数据卷、所属的网络、依赖的服务等。

        (2)项目( Project):由一组关联的应用容器组成的一-个完整业务单元,在docker-compose.yml中定义,即Compose的一个配置文件可以解析为一个项目,Compose 通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。

        Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。

二、Compose的常用命令

        Compose的常用命令常跟在docker-compose主命令后面。

1、列出容器

        ps命令用于列出所有运行的容器。

        其常用选项说明如下。

-q:只显示ID

例如,列出所有运行容器。

docker-compose ps

2、查看访问日志

        logs命令用于查看服务日志输出。

        其常用选项说明如下。

(1) -f,--follow:实时输出日志。

(2) -t,--timestamps:显示时间戳。

(3) --tail="all":从日志末尾显示行。

例如,查看nginx的实时日志。

docker-compose logs -f nginx

3、输出绑定的公共端口

        port命令用于输出绑定的公共端口。

        其常用选项说明如下。

(1) --protocol=proto: TCP或UDP, 默认为TCP。

(2) --index=index: 多个容器时的索引数字,默认为1。

例如,输出eureka 服务8761 端口所绑定的公共端口。

docker-compose port eureka 8761

4、重新构建服务

        build命令用于构建或重新构建服务。

        其常用选项说明如下。

(1) --no-cache: 不使用缓存构建镜像。

(2) --build-arg key=val:设置构建时变量。

例如,构建镜像。

docker-compose build

5、启动服务

        start命令用于自动指定服务已存在的容器。

例如,启动nginx容器。

docker-compose start nginx

6、停止服务

        stop命令用于停止已运行服务的容器。

例如,停止nginx容器。

docker-compose stop nginx

7、删除已停止服务的容器

        rm命令用于删除指定服务的容器。
        其常用选项说明如下。

(1) -f,--force: 强制删除。

(2) -s,--stop: 删除容器时需要先停止容器。

(3)-V,删除与容器相关的任何匿名卷。

例如,删除已停止的nginx容器。

docker-compose rm nginx

8、创建和启动容器

        up命令用于创建和启动容器。

        其常用选项说明如下。

( 1)-d:在后台运行容器。

(2) -t:指定超时时间。

(3) -no-deps:不启动连接服务。

( 4) --no-recreate:如果容器存在,则不重建容器。

(5) --no-build:不构建镜像,即使其会丢失。

(6) --build:启动容器并构建镜像。

(7) --scale SERVICE=NUM:指定-个服务(容器)的启动数量。

例如,创建并启动nginx容器。

docker-compose up -d nginx

9、在运行的容器中执行命令

        exec命令用于在支持的容器中执行命令。

        其常用选项说明如下。

(1) -d:在后台运行命令。

(2) --privileged:给这个进程赋予特殊权限。

(3) -u,--user USER:作为该用户运行该命令。

(4) -T:禁用分配伪终端,默认分配一个终端。

(5) --index=index:多个容器时的索引数字,默认1。

例如,登录到nginx容器中。

docker-compose exec nginx bash

10、指定一个服务启动容器的个数

        scale命令用于指定服务启动容器的个数。

例如,设置指定服务运行容器的个数,以service=num的形式指定。

docker-composo scale user=3 movie=3

11、其他管理命令

(1) restart命令用于重启服务。

(2) kill命令通过发送SIGKILL信号来停止指定服务的容器。

(3) pause命令用于挂起容器。

(4) image命令用于列出本地Docker的镜像。

(5) down命令用于停止容器和删除容器、网络、数据卷及镜像。

(6) create命令用于创建一个服务。

(7) pull命令用于下载镜像。

(8) push命令用于推送镜像。

(9) help命令用于查看帮助信息。

三、docker-compose.yml文件

        docker-compose.yml文件包含version、services、 networks 三部分,其中,services 和networks是关键部分。常见的services书写规则如下。

1、image标签

        image标签用于指定基础镜像。

services:web:image:nginx (image:"nginx:latest")

        在services标签下的web为第二级标签,标签名可由用户自定义,它也是服务名称。

        image可以指定服务的镜像名称或镜像ID,如果镜像在本地不存在,则Compose会尝试获取这个镜像。

2、build标签

        build标签用于指定Dockerfile所在文件夹的路径。该值可以是一个路径, 也可以是一个对象。Compose 会利用它自动构建镜像,并使用构建的镜像启动容器。

build: /path/to/build/dir

        也可以使用相对路径,即

build: ./dir

        还可以设置上下文根目录,并以该目录指定Dockerfile。

build:context: ../dockerfile: path/of/Dockerfile

3、command标签

        command标签用于覆盖容器启动后默认执行的命令。

command: bundle exec thin -P 3000

        也可以写为类似Dockerfile中的格式,例如:

comand: [bundle, exec, thin, -P, 3000]

4、dns标签

        dns标签用于配置DNS服务器,其可以是一个具体值。

dns: 114.114.114.114

        也可以是一个列表。

dns:- 114.114.114.114- 115.115.115.115

        还可以配置DNS搜索域,其可以是一个值或列表。

dns_ search: example.com
dns_ search:- dc1.example.com- dc2.example.com

5、environment标签

        environment标签用于设置镜像变量。与arg标签不同的是,arg 标签设置的变量仅用于构建过程中,而environment标签设置的变量会一直保存在镜像和容器中。

environment:RACK_ ENV: developmentSHOW: 'true'SESSION_SECRET:

        或者:

environment:- RACK_ ENV=development- SHOW=true- SESSION_SECRET

6、env_file标签

        env_file标签用于设置从env文件中获取的环境变量。可以指定一个文件路径或路径表,其优先级低于environment指定的环境变量,即当其设置的变量名称与environment标签设置的变量名称冲突时,以environment标签设置的变量名称为主。

env_file: .env

        可以根据docker.compose.yml设置路径列表。

env_file:- ./common.env- ./apps/web.env- /opt/secrets.env

7、expose标签

        expose标签用于设置暴露端口,只将端口暴露给连接的服务,不暴露给主机。

expose:- "8000"- "8010"

8、port标签

        port标签用于对外暴露端口定义,使用host:container格式,或者只指定容器的嘴口号,宿主机会随机映射端口。

ports:- "3000"- "8763:8763"- "宿主机端口:容器端口"

        注意:当使用host:container格式来映射端口时,如果使用的容器端口号小于60,则可能会得到错误的结果,因为YAML会将<xx:yy>格式的数字解析为60进制,所以建议使用字符串格式。

9、network_mode标签

        network_mode标签用于设置网络模式。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

10、depends_on标签

        depends_on标签用于指定容器服务的启动顺序。

version: '2'
services: web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

        这里,容器会先启动Redis和DB两个服务,再启动Web服务。

11、links标签

        links标签用于指定容器连接到当前连接,可以设置别名。

links:- db- db:database- redis

12、volumes标签

        volumes标签用于指定卷挂载路径,可以挂载一个日录或者一个已存在的数据卷容器。可以直接使用"host:container”格式,或者使用"host:container:ro" 格式,对于容器来说,后者的数据卷是只读的,这样可以有效保护宿主机的文件系统。

volumes://只是指定一个路径,Docker会自动创建个数据卷 (该路径是容器内部的)- /var/1ib/mysq1//使用绝对路径挂载数据卷- /opt/data:/var/lib/mysq1//以Compose配置文件为中心的相对路径作为数据卷挂载到容器- ./cache:/tmp/cache//使用用户的相对路径( ~/ 表示的目录是/home/<用户目录>/ 或者 /root/)- ~/configs:/etc/configs/:ro//已经存在的命名的数据卷- datavolume:/var/1ib/mysq1

        如果不使用宿主机的路径,则可以指定一个volume_driver。

volume_ driver: mydriver

13、volumes_from标签

        volumes_from标签用于设置从其他容器或服务挂在数据卷,可选的参数是:ro或者:rw,前者表示容器只读,后者表示容器对数据卷是可读可写的。默认情况下是可读可写的。

volumes_ from:- service_ name- service_ name:ro- container:container_name- container:container_name:rw

14、logs标签

        logs标签用于设置日志输出信息。

logging :driver: syslogoptions:syslog-address: "tcp://192.168.0.42:123"

相关文章:

Docker编排工具---Compose的概述及使用

目录 一、Compose工具的概述 二、Compose的常用命令 1、列出容器 2、查看访问日志 3、输出绑定的公共端口 4、重新构建服务 5、启动服务 6、停止服务 7、删除已停止服务的容器 8、创建和启动容器 9、在运行的容器中执行命令 10、指定一个服务启动容器的个数 11、其…...

5.10-套接字通信 - C++

套接字通信 1.1 通信效率问题 服务器端 单线程 / 单进程 无法使用&#xff0c;不支持多客户端 多线程 / 多进程 写程序优先考虑多线程&#xff1a;什么时候考虑多进程&#xff1f; 启动了一个可执行程序 A &#xff0c;要在 A 中启动一个可执行程序 B 支持多客户端连接 IO 多…...

suricata增加单元测试编译失败

一、环境 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammysuricata: suricata7.0.5 IDE: vscode 二、背景 在suricata中开发了某个功能后&#xff0c;增加unittest时&#xff0c;…...

高并发场景下的BI架构设计:衡石分布式查询引擎与缓存分级策略

在电商大促、金融交易时段或IoT实时监控场景中&#xff0c;企业BI系统常面临瞬时万级并发查询的冲击——运营团队需要实时追踪GMV波动&#xff0c;风控部门需秒级响应欺诈检测&#xff0c;产线监控需毫秒级反馈设备状态。传统单体架构的BI系统在此类场景下极易崩溃&#xff0c;…...

鱼眼摄像头(一)多平面格式 单缓冲读取图像并显示

鱼眼摄像头&#xff08;一&#xff09;多平面格式 单缓冲读取图像并显示 1.摄像头格式 1. 单平面格式&#xff08;Single Plane&#xff09;&#xff1a;各通道数据保存在同一个平面&#xff08;缓冲&#xff09;&#xff0c;图像数据按行连续存储a. mjpeg&#xff0c;yuyv等…...

机器学习笔记——特征工程

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本笔记介绍机器学习中常见的特征工程方法、正则化方法和简要介绍强化学习。 文章目录 特征工程&#xff08;Fzeature Engineering&#xff09;1. 特征提取&#xff…...

A Survey of Learning from Rewards:从训练到应用的全面剖析

A Survey of Learning from Rewards&#xff1a;从训练到应用的全面剖析 你知道大语言模型&#xff08;LLMs&#xff09;如何通过奖励学习变得更智能吗&#xff1f;这篇论文将带你深入探索。从克服预训练局限的新范式&#xff0c;到训练、推理各阶段的策略&#xff0c;再到广泛…...

Python爬虫第20节-使用 Selenium 爬取小米商城空调商品

目录 前言 一、 本文目标 二、环境准备 2.1 安装依赖 2.2 配置 ChromeDriver 三、小米商城页面结构分析 3.1 商品列表结构 3.2 分页结构 四、Selenium 自动化爬虫实现 4.1 脚本整体结构 4.2 代码实现 五、关键技术详解 5.1 Selenium 启动与配置 5.2 页面等待与异…...

无线定位之 三 SX1302 网关源码 thread_gps 线程详解

前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...

Aware和InitializingBean接口以及@Autowired注解失效分析

Aware 接口用于注入一些与容器相关信息&#xff0c;例如&#xff1a; ​ a. BeanNameAware 注入 Bean 的名字 ​ b. BeanFactoryAware 注入 BeanFactory 容器 ​ c. ApplicationContextAware 注入 ApplicationContext 容器 ​ d. EmbeddedValueResolverAware 注入 解析器&a…...

Unity3D仿星露谷物语开发41之创建池管理器

1、目标 在PersistentScene中创建池管理器&#xff08;Pool Manager&#xff09;。这将允许一个预制对象池被创建和重用。 在游戏中当鼠标点击地面时&#xff0c;便会启用某一个对象。比如点击地面&#xff0c;就创建了一棵树&#xff0c;而这棵树是从预制体对象池中获取的&a…...

Modbus协议介绍

Modbus是一种串行通信协议&#xff0c;由Modicon公司&#xff08;现为施耐德电气&#xff09;在1979年为可编程逻辑控制器&#xff08;PLC&#xff09;通信而开发。它是工业自动化领域最常用的通信协议之一&#xff0c;具有开放性、简单性和跨平台兼容性&#xff0c;广泛应用于…...

深度学习遇到的问题处理

小土堆课程学习 1.tensorboard远程到本地无法显示 1.检查本地与远程端口是否被占用 2.一定要在远程服务器的项目下创建对应的存储文件夹 且 远程服务器一定要有需要处理的数据 ## 此时远程项目路径下有logs文件夹 存放上传的图像与数据 writerSummaryWriter("logs"…...

I/O多路复用(select/poll/epoll)

通过一个进程来维护多个Socket&#xff0c;也就是I/O多路复用&#xff0c;是一种常见的并发编程技术&#xff0c;它允许单个线程或进程同时监视多个输入/输出&#xff08;I/O&#xff09;流&#xff08;例如网络连接、文件描述符&#xff09;。当任何一个I/O流准备好进行读写操…...

Westlake-Omni 情感端音频生成式输出模型

简述 github地址在 GitHub - xinchen-ai/Westlake-OmniContribute to xinchen-ai/Westlake-Omni development by creating an account on GitHub.https://github.com/xinchen-ai/Westlake-Omni Westlake-Omni 是由西湖心辰&#xff08;xinchen-ai&#xff09;开发的一个开源…...

Egg.js知识框架

一、Egg.js 核心概念 1. Egg.js 简介 基于 Koa 的企业级 Node.js 框架&#xff08;阿里开源&#xff09; 约定优于配置&#xff08;Convention over Configuration&#xff09; 插件化架构&#xff0c;内置多进程管理、日志、安全等能力 适合中大型企业应用&#xff0c;提供…...

随手记录5

一些顶级思维&#xff1a; ​ 顶级思维 1、永远不要自卑。 也永远不要感觉自己比别人差&#xff0c;这个人有没有钱&#xff0c;有多少钱&#xff0c;其实跟你都没有关系。有很多人就是那个奴性太强&#xff0c;看到比自己优秀的人&#xff0c;甚至一些装逼的人&#xff0c;这…...

Linux驱动:驱动编译流程了解

要求 1、开发板中的linux的zImage必须是自己编译的 2、内核源码树,其实就是一个经过了配置编译之后的内核源码。 3、nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。 内核源码树 解压 tar -jxvf x210kernel.tar.bz2 编译 make x210ii_qt_defconfigmakeCan’t use ‘…...

使用 Flowise 构建基于私有知识库的智能客服 Agent(图文教程)

使用 Flowise 构建基于私有知识库的智能客服 Agent(图文教程) 在构建 AI 客服时,常见的需求是让机器人基于企业自身的知识文档,提供准确可靠的答案。本文将手把手教你如何使用 Flowise + 向量数据库(如 Pinecone),构建一个结合 RAG(Retrieval-Augmented Generation)检…...

RabbitMQ ③-Spring使用RabbitMQ

Spring使用RabbitMQ 创建 Spring 项目后&#xff0c;引入依赖&#xff1a; <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp --> <dependency><groupId>org.springframework.boot</groupId><artifac…...

测试文章标题01

模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09;深度解析 一、MCP的核心概念 模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09;是一种用于规范机器学习模型与外部环境交互的标准化框架。其核心目标是通过定义统一的接口和数据格式&am…...

linux中常用的命令(四)

目录 1-cat查看文件内容 2-more命令 3-less命令 4-head命令 5-tail命令 1-cat查看文件内容 cat中的一些操作 -b : 列出行号&#xff08;不含空白行&#xff09;-E : 将结尾的断行以 $ 的形式展示出来-n : 列出行号&#xff08;含空白行&#xff09;-T : 将 tab 键 以 ^I 显示…...

2025年阿里云大数据ACP高级工程师认证模拟试题(附答案解析)

这篇文章的内容是阿里云大数据ACP高级工程师认证考试的模拟试题。 所有模拟试题由AI自动生成&#xff0c;主要为了练习和巩固知识&#xff0c;并非所谓的 “题库”&#xff0c;考试中如果出现同样试题那真是纯属巧合。 1、下列关于MaxCompute的描述中&#xff0c;错误的是&am…...

【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit

1.问题描述&#xff1a; 预览PDF文件&#xff0c;文档上所描述的loadDocument接口&#xff0c;可以返回文件的状态&#xff0c;并无法实现PDF的预览&#xff0c;是否有能预览PDF相关接口&#xff1f; 解决方案&#xff1a; 1、执行loadDocument进行加载PDF文件后&#xff0c…...

二元随机响应(Binary Randomized Response, RR)的翻转概率

随机响应&#xff08;Randomized Response&#xff09;机制 ✅ 回答核心&#xff1a; p 1 1 e ε 才是「翻转概率」 \boxed{p \frac{1}{1 e^{\varepsilon}}} \quad \text{才是「翻转概率」} p1eε1​​才是「翻转概率」 而&#xff1a; q e ε 1 e ε 是「保留真实值」…...

hive两个表不同数据类型字段关联引发的数据倾斜

不同数据类型引发的Hive数据倾斜解决方案 #### 一、‌原因分析‌ 当两个表的关联字段存在数据类型不一致时&#xff08;如int vs string、bigint vs decimal&#xff09;&#xff0c;Hive会触发隐式类型转换引发以下问题&#xff1a; ‌Key值的精度损失‌&#xff1a;若关联字…...

利用SSRF击穿内网!kali靶机实验

目录 1. 靶场拓扑图 2. 判断SSRF的存在 3. SSRF获取本地信息 3.1. SSRF常用协议 3.2. 使用file协议 4. 172.150.23.1/24探测端口 5. 172.150.23.22 - 代码注入 6. 172.150.23.23 SQL注入 7. 172.150.23.24 命令执行 7.1. 实验步骤 8. 172.150.23.27:6379 Redis未授权…...

DVWA在线靶场-xss部分

目录 1. xxs&#xff08;dom&#xff09; 1.1 low 1.2 medium 1.3 high 1.4 impossible 2. xss&#xff08;reflected&#xff09; 反射型 2.1 low 2.2 medium 2.3 high 2.4 impossible 3. xss&#xff08;stored&#xff09;存储型 --留言板 3.1 low 3.2 medium 3.3 high 3.…...

Go 语言 slice(切片) 的使用

序言 在许多开发语言中&#xff0c;动态数组是必不可少的一个组成部分。在实际的开发中很少会使用到数组&#xff0c;因为对于数组的大小大多数情况下我们是不能事先就确定好的&#xff0c;所以他不够灵活。动态数组通过提供自动扩容的机制&#xff0c;极大地提升了开发效率。这…...

Android Exoplayer 实现多个音视频文件混合播放以及音轨切换

在之前的文章ExoPlayer中常见MediaSource子类的区别和使用场景中介绍了Exoplayer中各种子MediaSource的使用场景&#xff0c;这篇我们着重详细介绍下实现多路流混合播放的用法。常见的使用场景有&#xff1a;视频文件电影字幕、正片视频广告视频、背景视频背景音乐等。 初始化…...