docker-compose教程
1. docker-compose是什么?
1. 1 简介
compose、machine 和 swarm 是docker 原生提供的三大编排工具。
简称docker三剑客。Compose 项目是 Docker 官方的开源项目,定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
【官方解释】:
-
服务 (service):
一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 -
项目 (project):由
一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
【个人理解】:
-
服务是一个应用程序的逻辑单元,它可以由一个或多个容器组成。每个服务都拥有自己的配置,包括镜像、端口映射、环境变量、卷和网络等。 -
项目是一个包含
多个服务的集合。它定义了应用程序的整体架构,并提供了管理所有服务的工具。
【服务和项目的例子】
-
一个 Web 应用程序可以包含以下服务:
-
web:运行应用程序代码的服务。
-
db:运行数据库的服务。
-
cache:运行缓存服务的服务。
-
一个 Docker Compose 项目可以包含以下文件:
-
docker-compose.yml:定义所有服务的配置文件。
-
Dockerfile:构建服务镜像的配置文件。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。


1.2 Docker Compose, Docker Swarm 和 Kubernetes 对比
Docker Compose
- 单机部署:Docker Compose 通常用于
单机部署,因为它没有集群管理功能。 - 简单易用:Docker Compose 使用 YAML 文件定义应用,语法简单易懂,易于上手。
- 开发和测试:Docker Compose 非常适合在开发和测试环境中使用,因为它可以快速启动和停止应用,并方便地进行配置更改。
Docker Swarm
- 集群管理:Docker Swarm 是一个
集群管理工具,可以管理多个 Docker 主机,并把它们作为一个集群来使用。 - 服务发现和负载均衡:Docker Swarm 提供
服务发现和负载均衡功能,可以自动发现集群中的服务并进行负载均衡。 - 高可用性:Docker Swarm 可以自动重启失败的容器,并确保应用的
高可用性。 - 生产环境部署:Docker Swarm 非常适合在生产环境中使用,因为它可以提供高可用性、可扩展性和容错性。
Kubernetes
- 集群管理:k8s 是一个
集群管理工具,可以管理多个 Docker 主机,并把它们作为一个集群来使用。 - 功能强大:Kubernetes 是一个功能强大的容器编排工具,它提供了丰富的功能,例如
服务发现、负载均衡、自动扩展、滚动更新、健康检查等。 - 高可用性:Docker Swarm 可以自动重启失败的容器,并确保应用的
高可用性。 - 复杂性高:Kubernetes 的学习曲线比较陡峭,需要掌握大量的概念和配置选项。
- 生产环境部署:Kubernetes 非常适合在生产环境中使用,因为它可以提供高可用性、可扩展性和容错性。
总结
| 特征 | Docker Compose | Docker Swarm | Kubernetes |
|---|---|---|---|
| 功能 | 简单 | 中等 | 强大 |
| 复杂性 | 低 | 中等 | 高 |
| 部署方式 | 单机 | 集群 | 集群 |
| 服务发现 | 无 | 有 | 有 |
| 负载均衡 | 无 | 有 | 有 |
| 高可用性 | 无 | 有 | 有 |
| 滚动更新、健康检查、高级调度等 | 无 | 无 | 有 |
| 适用场景 | 开发和测试 | 生产环境 | 生产环境 |
2. docker compose安装
2.1 二进制包
# 1. 安装
$ sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose# 国内用户可以使用以下方式加快下载
$ sudo curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose$ sudo chmod +x /usr/local/bin/docker-compose# 2. 卸载
$ sudo rm /usr/local/bin/docker-compose
2.2 pip安装
# 1. 安装
$ sudo pip install -U docker-compose# 2. 卸载
$ sudo pip uninstall docker-compose# 3. 查看版本
docker-compose --versiom
3. compose模版文件
Docker Compose YAML 文件解释
version: '3'services:mysql:build:context: ./mysqlenvironment:MYSQL_ROOT_PASSWORD: adminrestart: alwayscontainer_name: mysqlvolumes:- /data/edu-bom/mysql/test:/var/lib/mysqlimage: mysql/mysql:5.7ports:- 3306:3306networks:net:eureka:build:context: ./edu-eureka-bootrestart: alwaysports:- 8761:8761container_name: edu-eureka-boothostname: edu-eureka-bootimage: edu/edu-eureka-boot:1.0depends_on:- mysqlnetworks:net:networks:net:volumes:vol:
详细解释:
-
version: 指定 Docker Compose 文件的版本。此处为 3。
-
services: 定义服务部分,包含应用程序的不同组件。
-
mysql: 定义名为 “mysql” 的服务,用于构建和运行 MySQL 数据库。
-
build: 指示 Docker Compose 从 ./mysql 目录构建 Docker 镜像。
-
environment: 设置环境变量,包括 MySQL 数据库的 root 用户密码。
-
restart: 指定容器在意外停止后自动重启。
-
container_name: 指定容器的名称为 “mysql”。
-
volumes: 将主机上的 /data/edu-bom/mysql/test 目录挂载到容器的 /var/lib/mysql 目录,用于存储数据库数据。
-
image: 指定使用官方的 MySQL 5.7 镜像。
-
ports: 将容器的 3306 端口映射到主机的 3306 端口,以便访问 MySQL 数据库。
-
networks: 将 “mysql” 服务连接到名为 “net” 的网络。
-
eureka: 定义名为 “eureka” 的服务,用于构建和运行 Eureka 服务发现服务器。
-
build: 指示 Docker Compose 从 ./edu-eureka-boot 目录构建 Docker 镜像。
-
restart: 指定容器在意外停止后自动重启。
-
ports: 将容器的 8761 端口映射到主机的 8761 端口,以便访问 Eureka 服务发现服务器。
-
container_name: 指定容器的名称为 “edu-eureka-boot”。
-
hostname: 指定容器的主机名为 “edu-eureka-boot”。
-
image: 指定使用 edu/edu-eureka-boot:1.0 镜像。
-
depends_on: 指定 “eureka” 服务依赖于 “mysql” 服务,确保数据库启动后再启动 Eureka 服务。
-
networks: 将 “eureka” 服务连接到名为 “net” 的网络。
-
networks: 定义名为 “net” 的网络。
-
volumes: 定义名为 “vol” 的卷,但未被任何服务使用。
4. docker-compose命令
up
docker-compose up [options] [SERVICE...]
该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
可以说,大部分时候都可以直接通过该命令来启动一个项目。
如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。
默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose 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 秒)。
start
docker-compose start [SERVICE...]
启动已经存在的服务容器
down
docker-compose down
此命令将会停止 up 命令所启动的容器,并移除网络
stop
docker-compose stop [options] [SERVICE...]
停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
选项:
-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
ps
docker-compose ps [options] [SERVICE...]
列出项目中目前的所有容器。
选项:
-q只打印容器的 ID 信息。
logs
docker-compose logs [options] [SERVICE...]
查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。
build
docker-compose build [options] [SERVICE...]
构建(重新构建)项目中的服务容器。
服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。
可以随时在项目目录下运行 docker-compose build 来重新构建服务。
选项:
--force-rm删除构建过程中的临时容器。--no-cache构建镜像过程中不使用 cache(这将加长构建过程)。--pull始终尝试通过 pull 来获取更新版本的镜像。
restart
docker-compose restart [options] [SERVICE...]
重启项目中的服务
选项:
-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
rm
docker-compose rm [options] [SERVICE...]
删除所有停止状态的)服务容器。推荐先执行docker-compose stop 命令来停止容器。
选项:
-f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。-v删除容器所挂载的数据卷。
top
docker-compose top
查看各个服务容器内运行的进程。
images
docker-compose images
列出 Compose 文件中包含的镜像。
run
docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服务上执行一个命令。
使用举例:
1.在web服务器运行python脚本
docker-compose run web python my_script.py
2. 在 Web 服务容器中运行 shell 命令,并映射端口,设置环境变量,使用卷,连接网络:
docker-compose run -p 8080:80 -e MY_VAR=value -v my_volume:/path/to/file/in/container --network my_network web bash
这将在 “web” 服务的容器中打开一个交互式 shell,并进行以下操作:
- 将容器的 80 端口映射到主机的 8080 端口。
- 设置环境变量 MY_VAR 的值为 “value”。
- 将名为 “my_volume” 的卷挂载到容器中的 /path/to/file/in/container 路径。
- 连接到名为 “my_network” 的网络。
3. 在数据库容器中运行 SQL 命令,使用环境变量,连接网络:
docker-compose run -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password --network my_network db psql -U postgres mydatabase
这将在 “db” 服务的容器中使用 PostgreSQL 客户端连接到 “mydatabase” 数据库,并进行以下操作:
- 设置环境变量 POSTGRES_USER 的值为 “postgres”。
- 设置环境变量 POSTGRES_PASSWORD 的值为 “password”。
- 连接到名为 “my_network” 的网络。
4. 在 Web 服务容器中运行 Python 脚本,使用卷,连接网络:
docker-compose run -v my_volume:/path/to/file/in/container --network my_network web python my_script.py
这将在 “web” 服务的容器中运行名为 “my_script.py” 的 Python 脚本,并进行以下操作:
- 将名为 “my_volume” 的卷挂载到容器中的 /path/to/file/in/container 路径。
- 连接到名为 “my_network” 的网络。
port
docker-compose port [options] SERVICE PRIVATE_PORT
打印某个容器端口所映射的公共端口。
选项:
--protocol=proto指定端口协议,tcp(默认值)或者 udp。--index=index如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
# 下面结果表示:将web服务的5000端口映射到了宿主机的5001端口$ docker-compose port web 50000.0.0.0:5001
5. 简单示例
参考链接:
[Docker] Docker Compose 基础教程(概念/基础操作)
全网最详细的Docker-Compose详细教程
Docker Compose
相关文章:
docker-compose教程
1. docker-compose是什么? 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目,定义和运行多个 Docker 容器的应用(Defining and running multi-container Do…...
结果出乎意料!MySQL和MariaDB谁快?MySQL 8.0比MySQL 5.6快吗?
MySQL和MariaDB哪个更快?MySQL 8.0的版本和早期MySQL 5.6的版本哪个更快?这儿有个第三方的测试报告回答了这两个大家关心的问题,姚远来和大家一起解读一下。https://smalldatum.blogspot.com/2024/04/sysbench-on-small-server-mariadb-and.h…...
Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复
装后恢复到您开箱的体验界面,包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http://w…...
【NI国产替代】高速数据采集模块,最大采样率为 125 Msps,支持 FPGA 定制化
• 双通道高精度数据采集 • 支持 FPGA 定制化 • 双通道高精度采样率 最大采样率为 125 Msps12 位 ADC 分辨率 最大输入电压为 0.9 V -3 dB 带宽为 30 MHz 支持 FPGA 定制化 根据需求编程实现特定功能和性能通过定制 FPGA 实现硬件加速,提高系统的运算速度FPGA…...
【网络安全的神秘世界】2024.6.6 Docker镜像停服?解决最近Docker镜像无法拉取问题
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 解决Docker镜像无法拉取问题 🙋♂️问题描述 常用镜像站:阿里云、科大、南大、上交等,全部挂掉 执行docker pull命…...
【Python入门与进阶】1基本输入和输出
基本输入输出 1.等号赋值 1.1 基本赋值 number_110number_1 1.2 多个赋值 number_2number_3number_420 number_2 number_3 number_4 1.3 多重赋值 number_5,number_6,number_730,35,40 number_5 number_6 number_7 1.4 下划线赋值 _50 _ 2.命名规则 注意:…...
CTF Show MISC做题笔记
MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件:misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息:flag{flag…...
【QT5】<总览二> QT信号槽、对象树及常用函数
文章目录 前言 一、QT信号与槽 1. 信号槽连接模型 2. 信号槽介绍 3. 自定义信号槽 二、QT的对象树 三、添加资源文件 四、样式表的使用 五、QSS文件的使用 六、常用函数与宏 前言 承接【QT5】<总览一> QT环境搭建、快捷键及编程规范。若存在版…...
Button按钮类
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 按钮是GUI界面中应用最为广泛的控件,它常用于捕获用户生成的单击事件,其最明显的用途是触发绑定到一个处理函数。 wxPython类…...
代码随想录-二叉树 | 111 二叉树的最小深度
代码随想录-二叉树 | 111 二叉树的最小深度 LeetCode 111 二叉树的最小深度解题思路代码难点总结 LeetCode 111 二叉树的最小深度 题目链接 代码随想录 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…...
PCA降维算法
decomposition.h #pragma once #include <arrayfire.h>namespace decomposition {class PCA{public:af::array zero_centred(af::array...
Fast R-CNN 与 R-CNN的不同之处
目录 一、Fast R-CNN如何生成候选框特征矩阵 二、 关于正负样本的解释 三、训练样本的候选框 四、Fast R-CNN网络架构 4.1 分类器 4.2 边界框回归器 一、Fast R-CNN如何生成候选框特征矩阵 在R-CNN中,通过SS算法得到2000个候选框,则需要进行2000…...
前端开发环境:Vue、Element Plus、Axios
目录 1. Vue简介 2. Element Plus简介 3. Axios简介 4. 创建Vue项目 4.1 Node.js安装 4.2 创建Vue项目 4.3 Vue项目的结构 4.4 安装Element-Plus 4.5 安装Axios 4.6 解决跨域问题 5. 应用实例 5.1 创建Vue组件 5.2 配置路由 5.3 配置根组件 5.4 启动前端应用服…...
我的创作纪念日-在SCDN的5年
机缘 五年前,一个偶然的机会让我接触到了SCDN这个充满活力和创造力的社区。我抱着对技术的热爱和对知识的渴望,决定在这里开启我的创作之旅。最初,我成为创作者的初心,是希望将自己在实战项目中的经验、日常学习过程中的点滴&…...
AI-知识库搭建(二)GPT-Embedding模型使用
上一篇:AI-知识库搭建(一)腾讯云向量数据库使用-CSDN博客 一、Embedding模型 Embedding模型是一种将高维度的离散数据(如文本、图像、音频等)映射到低维度的连续向量空间的技术。这种技术广泛应用于自然语言处理&…...
qt网络事件之QSocketNotifier
简介 QSocketNotifier用于处理网络事件的,即事件处理器 结构 #mermaid-svg-xcNdAyHNkKqNCLQY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xcNdAyHNkKqNCLQY .error-icon{fill:#552222;}#mermaid-svg-xcNdAyHNk…...
如何统计EXCEL中的数据透视表的信息?
也没什么可分析的,直接上代码,看看是不是你需要的: Sub GetPVT() 定义一个1000行的数组,如果你预判工作簿中数据透视表数量可能大小1000,那就改成10000,甚至10万,以确保能大于数据透视表数量即…...
日本结构型产品及衍生品业务变迁报告
日本结构型产品及衍生品业务变迁报告 一、业务发展阶段 阶段一:2000年之前 零售结构型产品几乎不存在,主要销售对象为机构投资者或企业。主要策略为卖出看涨期权(covered call)。会计记录准则对业务有重要影响,例如…...
解决Mac无法上网/网络异常的方法,重置网络
解放方法 1、前往文件夹:/Library/Preferences/SystemConfiguration 2 、在弹窗中输入上边的地址 3 、把文件夹中除了下图未选中的文件全部删掉,删除时需要输入密码 4 、重启mac 电脑就搞定了。...
[12] 使用 CUDA 进行图像处理
使用 CUDA 进行图像处理 当下生活在高清摄像头的时代,这种摄像头能捕获高达1920*1920像素的高解析度画幅。想要实施的处理这么多的数据,往往需要几个TFlops地浮点处理性能,这些要求CPU也无法满足通过在代码中使用CUDA,可以利用GP…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
