Docekr三剑客之 Docekr compose
写在前面
Docker三剑客Docker Compose、Docker Machine、Docker Swarm分别是Docker官方开源的三个项目。有着不同的功能:
- Docker Compose负责实现对 Docker 容器集群的快速编排
 - Docker Machine负责在多种平台上快速安装 Docker 环境
 - Docker Swarm提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案
 
今天这篇文章我们来聊聊Docker compose,这部分我们会分为三篇文章来分别介绍。
一、什么是Docker compose
Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose 上
我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务
Compose 就是来做这个事情的,它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)
Compose 中有两个重要的概念:
   服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
   项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义
Compose 项目是由Python编写的,实际上就是调用了Docker服务提供的API来对容器进行管理,因此,只要所在的操作系统的平台支持Docker API,就可以在其上利用Compose来进行编排管理.
二、安装和卸载
2.1 安装
在 Linux 上的也安装十分简单,从 GitHub Release 处直接下载编译好的二进制文件即可。
 例如,在 Linux 64 位系统上直接下载对应的二进制包。
// 先把docker-compose文件dump到当前目录
wget https://github.com/docker/compose/releases/download/v2.12.2/docker-composelinux-x86_64
// 然后拷贝到/usr/bin/
$ sudo cp -arf docker-compose-linux-x86_64 /usr/bin/docker-compose
$ sudo chmod +x /usr/bin/docker-compose
 
2.1 卸载
如果是二进制包方式安装的,删除二进制文件即可。
sudo rm /usr/bin/docker-compose
 
三、常用命令
命令官方详细文档戳这里
3.1 命令对象及格式
对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如
 果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。
 执行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个
 命令的使用格式。
 docker-compose 命令的基本的使用格式是
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
 
3.2 常用选项
- -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml ,可以多次指定
 - -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
 
3.3 使用说明
3.3.1 build
构建或重新构建项目中service的镜像。构建之后镜像不会被应用到容器,必须将项目down之后,再重
 新up方能使用最新镜像。构建的镜像会被加上项目名称的前缀
 选项包括:
 –force-rm 删除构建过程中的临时容器。
 –no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。
 –pull 始终尝试通过 pull 来获取更新版本的镜像。
 –build-arg 设置构建参数
3.3.2 config
验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。
3.3.3 up&down
up命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容
 器的一系列操作。
 链接的服务都将会被自动启动,除非已经处于运行状态。
 可以说,大部分时候都可以直接通过该命令来启动一个项目。
 默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可
 以很方便进行调试。
 当通过 Ctrl-C 停止命令时,所有容器将会停止。
 如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选
 项。
 默认情况,如果服务容器已经存在, docker-compose up 将会尝试停止容器,然后重新创建(保持使
 用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如
 果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate 。这样将只会启动
 处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 dockercompose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会
 影响到其所依赖的服务。
 选项:
 -d 在后台运行服务容器。
 –no-color 不使用颜色来区分不同的服务的控制台输出。
 –no-deps 不启动服务所链接的容器。
 –force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
 –no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
 –no-build 不自动构建缺失的服务镜像。
 -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
down命令将会停止 up 命令所启动的容器,并移除网络
3.3.4 exec
进入指定的容器。
3.3.5 help
获得一个命令的帮助。
3.3.6 images
列出 Compose 文件中包含的镜像。
3.3.7 logs
格式为 docker-compose logs [options] [SERVICE…] 。
 查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。
 可以通过 --no-color 来关闭颜色。
 该命令在调试问题的时候十分有用。
3.3.8 pause&unpause
暂停一个服务容器。
 恢复处于暂停状态中的服务。
3.3.9 port
打印某个容器端口所映射的公共端口。
 选项:
 –protocol=proto 指定端口协议,tcp(默认值)或者 udp。
 –index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
3.3.10 ps
格式为 docker-compose ps [options] [SERVICE…] 。
 列出项目中目前的所有容器。
 选项:
 -q 只打印容器的 ID 信息。
3.3.11 pull&push
pull 格式为 docker-compose pull [options] [SERVICE…] 。
 拉取服务依赖的镜像。
 选项:
 –ignore-pull-failures 忽略拉取镜像过程中的错误。
push 推送服务依赖的镜像到 Docker 镜像仓库。
3.3.12 run
格式为 docker-compose run [options] [-p PORT…] [-e KEY=VAL…] SERVICE [COMMAND]
 [ARGS…] 。
 在指定服务上执行一个命令。类似docker run指令
 将会基于指定的service的镜像启动一个新的容器,并且运行指定命令
 默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。
 该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。
 两个不同点:
 给定命令将会覆盖原有的自动运行命令;
 不会自动创建端口,以避免冲突。
 如果不希望自动启动关联的容器,可以使用 --no-deps 选项,例如
 将不会启动 web 容器所关联的其它容器。
 选项:
 -d 后台运行容器。
 –name NAME 为容器指定一个名字。
 $ docker-compose run redis pwd
 //该操作为伪操作
 docker-compose run --no-deps web pwd
 –entrypoint CMD 覆盖默认的容器启动指令。
 -e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量。
 -u, --user=“” 指定运行容器的用户名或者 uid。
 –no-deps 不自动启动关联的服务容器。
 –rm 运行命令后自动删除容器, d 模式下将忽略。
 -p, --publish=[] 映射容器端口到本地主机。
 –service-ports 配置服务端口并映射到本地主机。
 -T 不分配伪 tty,意味着依赖 tty 的指令将无法运行。
3.3.13 start&stop
start 启动已经存在的服务。
 stop 停止已经处于运行状态的服务,但不删除它。通过 docker-compose start 可以再次启动这些服务。
 选项:
 -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
3.3.14 restart
重启项目中的服务。
 选项:
 -t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)
3.3.15 rm
删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
 选项:
 -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
 -v 删除容器所挂载的数据卷。
3.3.16 top
查看各个服务内运行的进程。
3.3.17 version
打印版本信息。
四、yml 配置指令参考(以下内容只作为参考)
官方文档:https://docs.docker.com/compose/compose-file/
 version
 Compose 文件格式有3个版本,分别为1, 2.x 和 3.x 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的
 版本
 build
 指定镜像构建参数,其作用与docker build 命令一样
 例如:
build: ./dir
或
build:
context: .
dockerfile: Dockerfile-compose
args:
- http_proxy: https://proxy.golang.com.cn,https://goproxy.cn,direct
labels:
- "myhello:1.0"
- "com.example.description=Accounting webapp"
tags:
- "myhello:1.0.0"
- "localhost:5000/myhello:1.0.0"
 
- context:上下文路径
 - dockerfile:指定构建镜像的 Dockerfile 文件名
 - args:添加构建参数,这是只能在构建过程中访问的环境变量。
 - labels:设置构建镜像的标签。
 - target:多层构建,可以指定构建哪一层。
 - tags:指定镜像的tags
 
相关文章:
Docekr三剑客之 Docekr compose
写在前面 Docker三剑客Docker Compose、Docker Machine、Docker Swarm分别是Docker官方开源的三个项目。有着不同的功能: Docker Compose负责实现对 Docker 容器集群的快速编排Docker Machine负责在多种平台上快速安装 Docker 环境Docker Swarm提供 Docker 容器集…...
企业是否具备等保测评资质在哪里查?怎么查?
为了规范等保相关业务办理流程,确保等保业务顺利办理,保障企业合法权益,政策规定,只有取得等保测评资质机构方可办理等保测评业务。因此很多人在问,企业是否具备等保测评资质在哪里查?怎么查? …...
Spacedesk软件推荐,让你的平板也变成电脑的副屏
我的设备: 电脑:戴尔G15 5511、i7-11800H、Windows 11、RTX3060 平板:荣耀V6、麒麟985、安卓10、分辨率2000*1200(手机也行,我用的平板) 实际使用: 先给放一张实际使用的照片 可以让平板变成电脑的副屏…...
Vue 3.0 组合式API 介绍 【Vue3 从零开始】
提示 在阅读文档之前,你应该已经熟悉了这两个 Vue 基础和创建组件。 在 Vue Mastery 上观看关于组合式 API 的免费视频。 通过创建 Vue 组件,我们可以将接口的可重复部分及其功能提取到可重用的代码段中。仅此一项就可以使我们的应用程序在可维护性和…...
【算法数据结构体系篇class13、14】:贪心算法思想
一、贪心算法概念贪心算法概念:1)最自然智慧的算法2)用一种局部最功利的标准,总是做出在当前看来是最好的选择3)难点在于证明局部最功利的标准可以得到全局最优解4)对于贪心算法的学习主要以增加阅历和经验…...
C++知识点,关键字inline ,String,强制类型转化
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...
MyBatis源码分析(六)MetaObject工具类的使用与源码分析
文章目录一、MetaObject基本使用二、关键类源码分析1、MetaObject的构造方法2、PropertyTokenizer分词器3、BeanWrapper4、MetaClass5、DefaultReflectorFactory6、Reflector7、总结三、MetaObject的getValue源码分析写在后面一、MetaObject基本使用 public class User {priva…...
文献资源最多的文献下载神器,99.99%的文献都可下载
用对工具事半功倍,查找下载文献用对工具能节约大量的时间和精力去做更多的事情。 文献党下载器(wxdown.org),几乎整合了所有文献数据库资源,涵盖各种文献类型,包含全部学科。文献党下载器整合的资源如&…...
工控机ARM工业边缘计算机搭建Node-Red环境
搭建Node-Red环境Node-RED是一个基于Node.js的开源可视化流程编程环境,可以轻松构建自定义应用程序,通过连接简单的节点来完成复杂的任务。Node-RED提供了一种简单的方法,可以快速连接到外部服务,从而实现物联网应用的开发。Node-…...
位图/布隆过滤器/海量数据处理方式
位图 位图的概念 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 直接来看问题: 给40亿个不重复的无符号整数,没排过序。给一个无符号整数࿰…...
Tomcat 配置文件数据库密码加密
几年前研究过Tomcat context.xml 中数据库密码改为密文的内容,因为当时在客户云桌面代码没有留备份也没有文章记录,最近项目又提出了这个需求就又重新拾起来学习一下。在网上找了一些资料,自己也大概试了一下,目前功能是实现了。参…...
k8s-Kubernetes集群部署
文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构 1.Kubernetes…...
Python数据分析案例19——上市银行财务指标对比
我代码栏目都是针对基础的python数据分析人群,比如想写个本科毕业论文,课程论文,做个简单的案例分析等。过去写的案例可能使用了过多的机器学习和深度学习方法,文科的同学看不懂,可能他们仅仅只想用python做个回归或者…...
Python 中错误 ConnectionError: Max retries exceeded with url
出现错误“ConnectionError: Max retries exceeded with url”有多种原因: 向 request.get() 方法传递了不正确或不完整的 URL。我们正受到 API 的速率限制。requests 无法验证您向其发出请求的网站的 SSL 证书。 确保我们指定了正确且完整的 URL 和路径。 # ⛔️…...
SpringBoot下的Spring框架学习(Tedu)——DAY02
SpringBoot下的Spring框架学习(Tedu)——DAY02 目录SpringBoot下的Spring框架学习(Tedu)——DAY02Spring框架学习1.1 Spring介绍1.2 知识铺垫1.2.1 编辑Dog类1.2.2 编辑Cat类1.2.3 编辑测试类User.java1.2.4 上述代码的总结1.3 面…...
容易混淆的点:C语言中char* a[] 与 char a[] 的区别以及各自的用法
char* a[] 和 char a[] 的区别 char* a[] 和 char a[] 是 C 语言中数组的不同声明方式,二者具有以下区别: char a[] 声明的是一个字符数组,其中存储的是一串字符。此时,a 可以被视为一个指向字符的指针。 char* a[]则声明了一个…...
认识Spring(下)
作者:~小明学编程 文章专栏:Spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 Spring更加高效的读取和存储对象 存储bean对象 五大注解 关于五大类注解 对象的注入 属性注入 构造方法注入 Setter注入 三种注入方式的…...
Educational Codeforces Round 144 (Rated for Div. 2) C - Maximum Set
传送门 题意: 对于一个集合,如果它的任意两个元素都能 有 其中一个能整除另一个,那么它是好的。问在区间[L,R] 中由这个区间某些数内构成的好的集合的最长长度是多少,以及且满足这个长度的好集合有多少个。(懒得想就借…...
学python的第四天---基础(2)
一、三角形类型读入数组并排序的方法nlist(map(float,input().split())) c,b,asorted(n)list_1 list(map(float, input().split())) list_1.sort() list_1.reverse()lengthssorted(map(float,input().split(" ")),reverseTrue)二、动物写法一:d{" &…...
spring之refresh流程-Java八股面试(六)
系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 第五章ConcurrentHashMap-Java八股面试(五) 动态每日更新算法题,想要学习的可以关注一下…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果:print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
