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"

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

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

相关文章

C25-数组应用及练习

第一题 题目: 代码 #include <stdio.h> int main() {//数组及相关数据定义int arr[10];int i;//基于循环的数组数据输入for(i0;i<10;i){arr[i]i;}//基于循环的数组数据输出for(i9;i>0;i--){printf("%d ",arr[i]);}return 0; }结果 第二题 题目 代码 …

网络安全怎么入门?快速了解

网络安全是一个快速发展的领域&#xff0c;入门需要系统化的学习和实践。以下是适合零基础或转行者的分阶段学习路径&#xff0c;涵盖必备知识、学习资源、实战方法和职业方向&#xff1a; 一、基础阶段&#xff08;1-3个月&#xff09; 1. 掌握核心基础知识 计算机网络&#…

express 怎么搭建 WebSocket 服务器

一&#xff1a;使用 express-ws var express require(express); var app express(); var expressWs require(express-ws)(app);app.use(function (req, res, next) {console.log(middleware);req.testing testing;return next(); });app.get(/, function(req, res, next){…

【AI论文】SuperEdit:修正并促进基于指令的图像编辑的监督信号

摘要&#xff1a;由于手动收集准确的编辑数据存在挑战&#xff0c;现有的数据集通常使用各种自动化方法构建&#xff0c;导致编辑指令和原始编辑图像对之间不匹配导致监督信号出现噪声。 最近的研究试图通过生成更高质量的编辑图像、在识别任务上进行预训练或引入视觉语言模型&…

关于大疆红外图片提取温度方法 python 方法

思路 红外图片需要是黑白图片 提取红外图片最高和最低温度 温度图例 根据最高温度31.2摄氏度 最低温度19.9摄氏度 那中间的值在 0到255 之间 那有这个值之后。就可以获取到图片里面 每个点或者面的值 实现方式 def find_Gray(self, t_max, t_min, c_temp):"""…

金融小知识

&#x1f4c9; 一、“做空”是啥&#xff1f; 通俗说法&#xff1a;押“它会跌”&#xff0c;赚钱&#xff01; ✅ 举个例子&#xff1a; 有一天老王的包子涨价到 10 块一个&#xff0c;张三觉得这价格肯定撑不住&#xff0c;未来会跌到 5 块。于是他&#xff1a; 向朋友借了…

JavaScript 数据存储全攻略:从 Cookie 到 IndexedDB

1. Cookie&#xff1a;传统的轻量级存储 Cookie 是最早的客户端存储解决方案之一&#xff0c;最初设计用于服务器和客户端之间的状态保持。 基本用法 javascript 复制 下载 // 设置cookie document.cookie "usernameJohnDoe; expiresThu, 18 Dec 2025 12:00:00 UTC…

Leetcode 刷题记录 09 —— 链表第三弹

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答&#xff0c;01~07为C语言&#xff0c;08及以后为Java语言。 01 合并 K 个升序链表 /*** Definitio…

如何利用 Elastic Load Balancing 提升应用性能与可用性?

当今云计算的快速发展中&#xff0c;随着应用需求的增加&#xff0c;如何确保系统能够高效、稳定地处理不断增长的流量成为了每个技术团队关注的焦点。Elastic Load Balancing&#xff08;ELB&#xff09;作为一种强大的工具&#xff0c;能够帮助开发者和运维人员轻松应对流量波…

Word如何制作三线表格

1.需求 将像这样的表格整理成论文中需要的三线表格。 2.直观流程 选中表格 --> 表格属性中的边框与底纹B --> 在设置中选择无&#xff08;重置表格&#xff09;–> 确定 --> 选择第一行&#xff08;其实是将第一行看成独立表格了&#xff0c;为了设置中线&…

JVM的双亲委派模型

引言 Java类加载机制中的双亲委派模型通过层层委托保证了核心类加载器与应用类加载器之间的职责分离和加载安全性&#xff0c;但其单向的委托关系也带来了一些局限性。尤其是在核心类库需要访问或实例化由应用类加载器加载的类时&#xff0c;双亲委派模型无法满足需求&#xf…

6.4.高并发设计

目录 一、高并发系统设计基础理论 CAP定理与高可用性权衡 • 一致性&#xff08;C&#xff09; vs 可用性&#xff08;A&#xff09;在电商、社交场景的取舍 • 分区容错性&#xff08;P&#xff09;的实践意义&#xff1a;异地多活与脑裂处理 性能指标与评估模型 • QPS、TP…

工程师转型算法工程师 深入浅出理解transformer-手搓板

编码器 以下部分引用台湾大学李宏毅教授的ppt 自己理解解释一遍(在youtobe 上可以搜索李宏毅即可) 首先先来看transformer的架构图 Embedding 我们先从Imput Embedding 跟 OutPutEmbedding 开始&#xff0c;让我们用 bert 模型来做一个解释 从huggingface上下载的bert-base…

软件工程学概述

一、软件危机 &#xff08;一&#xff09;软件危机的介绍 1. 基本思想与定义 软件危机&#xff08;Software Crisis&#xff09;是指在计算机软件的开发和维护过程中所遇到的一系列严重问题&#xff0c;这些问题既包括技术层面的挑战&#xff0c;也涉及管理层面的困境。其核心…

【ArcGIS Pro微课1000例】0068:Pro原来可以制作演示文稿(PPT)

文章目录 一、新建演示文稿二、插入页面1. 插入地图2. 插入空白文档3. 插入图像4. 插入视频三、播放与保存一、新建演示文稿 打开软件,新建一个地图文档,再点击【新建演示文稿】: 创建的演示文档会默认保存在目录中的演示文稿文件夹下。 然后可以对文档进行简单的设计,例如…

[吾爱出品][Windows] 产品销售管理系统2.0

[Windows] 产品销售管理系统 链接&#xff1a;https://pan.xunlei.com/s/VOPej1bHMRCHy2np9w3TBOyKA1?pwdgjy7# 使用方法&#xff1a;1、先设置一下图片保存路径 2、维护产品。客户等基础信息。例如&#xff1a;销售类型&#xff1a;一次性 销售编码&#xff1a;RCX。 3、销…

MySQL数据库高可用(MHA)详细方案与部署教程

一&#xff1a;MHA简介 核心功能 二&#xff1a;MHA工作原理 三&#xff1a;MHA组件 四&#xff1a;MHA 架构与工具 MHA架构 Manager关键工具 Node工具 五&#xff1a;工作原理与流程 1: 故障检测 2: 故障切换&#xff08;Failover&#xff09; 3 : 切换模式 六&a…

华为设备链路聚合实验:网络工程实战指南

链路聚合就像为网络搭建 “并行高速路”&#xff0c;既能扩容带宽&#xff0c;又能保障链路冗余&#xff0c;超实用&#xff01; 一、实验拓扑速览 图中两台交换机 LSW1 和 LSW2&#xff0c;PC1、PC2 归属 VLAN 10&#xff0c;PC3 归属 VLAN 30。LSW1 与 LSW2 通过 GE0/0/1、…

数组和集合

数组和集合的区别&#xff1a; 1、数组是固定长度的数据结构&#xff0c;一旦创建长度就无法改变&#xff0c;集合是动态长度数据结构&#xff0c;可根据需求动态增加或减少元素。 2、数组包含基本数据类型和对象&#xff0c;而集合只能包含对象。 3、数组可以直接访问元素&…

WPF MVVM进阶系列教程(一、对话框)

&#x1f360; WPF MVVM进阶系列教程 一、对话框 在前面的文章中&#xff0c;我们介绍了MVVM开发的一些基础知识。 对于日常开发来说&#xff0c;基本已经足够应付大部分场景。 从这里开始&#xff0c;介绍的都是在MVVM模式开发中&#xff0c;提升程序可维护性、灵活性、健壮…