Docker Compose的使用
文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html
目录
- Docker Compose是什么
- Docker Compose安装
- Docker Compose文件
- Docker Compose常用命令
- 案例:部署WordPress博客系统
Docker Compose是什么
Docker Compose是Docker官方的开源项目,负责实现对Docker容器的快速编排,Docker建议每个容器只运行一项服务,因为容器运行的开销很小,但是同时部署多个应用需要每个容器都单独编写Dockerfile会显得非常复杂,因而Docker官方提供了多容器部署的编排工具Docker Compose
Docker Compose允许用户通过一个单独的配置文件来定义一组相关联的应用容器为一个项目,Docker Compose可以管理多个Docker容器组成的一个应用,只需要定义好一个yaml
格式的配置文件docker-compose.xml
,写好多个容器之间的调用关系,然后只要一个命令就可以实现一键部署和一键启动和关闭这些容器。
Docker Compose文件格式版本有多种,这里以最为主流的3.x为例
Docker Compose安装
先去下载docker-compose
的可执行文件,Docker Compose发布在GitHub上面(https://github.com/docker/compose/releases/
),我下载的版本是linux64位的v2.30.3,下载地址:
- docker-compose-linux-x86_64
安装很简单,只要将下载下来的可执行文件赋予执行权限,并链接即可,先将下载下来的文件docker-compose-linux-x86_64
放到/opt
目录下,然后作为可执行文件,并建立软链接
chmod +x ./docker-compose-linux-x86_64
ln -s /opt/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
之后,就可以在任意目录执行docker-compose
的命令了
Docker Compose文件
一个DockerCompose文件就是一个工程,工程由服务组成,服务就是一个个的应用实例,由一组关联的容器组成一个完整的业务单元就是工程。
文件内包含以下顶级元素:
version
docker-compose文件版本,大多用3
name
应用部署的名称services
服务,下面可以定义多个部署的应用networks
自定义网络,供services下的应用使用volumes
卷,应用用到的卷配置configs
配置secrets
密钥
每个顶级元素下又有以下常用配置项:
services.$service-name.image
使用的镜像和TAGservices.$service-name.privileged
设置容器权限services.$service-name.container_name
容器名services.$service-name.environment
环境变量services.$service-name.restart
自启动,常见配置:总是always
,出错时自启on-failure
/on-failure:3
services.$service-name.command
自定义命令行参数services.$service-name.ports
端口映射services.$service-name.volumes
数据卷挂载services.$service-name.depends_on
依赖哪个服务,在哪些服务启动后再启动services.$service-name.networks
使用的自定义网络networks.$network-name.driver
自定义网络的类型,不设置的话默认是bridge
networks.$network-name.ipam.config
IP地址管理,用于管理网络的IP地址分配,不设置则Docker自动分配networks.$network-name.ipam.config.subnet
自定义网络的网段,例如192.168.1.0/24
networks.$network-name.ipam.config.gateway
自定义网络的网关,例如192.168.1.1
例:
version: '3'name: my-demoservices:app_1:# 镜像:TAGimage: demo:1.0# 容器名container_name: demo# 提升容器内权限privileged: true# 环境变量environment: - NAME1=VALUE1- NAME2=VALUE2restart: alwayscommand: ["-c nginx.conf"]# 宿主机端口:容器内端口ports:- "80:80"# 扩展语法设置卷,允许更详细的配置,如设置卷驱动和选项volumes:# 绑定挂载,将主机上的一个具体目录或文件直接挂载到容器中- type: bindsource: /var/lib/datatarget: /data# volume是由Docker管理的存储区域,通常在/var/lib/docker/volumes/下- type: volumesource: my-datatarget: /datavolume: nocopy: truesubpath: subnetworks:- my-networkapp_2:image: mysql:8 depends_on:- app_1# 绑定挂载,直接将主机路径映射到容器路径volumes: #宿主机路径:容器内路径- /data:/var/data #只读卷- /host/path:/container/path:ro app_3:# 命名卷,由用户指定名称,Docker 管理其存储位置volumes: - my-data2:/var/lib/mysqlapp_4:# 匿名卷,由Docker自动生成,不指定主机路径或命名卷volumes: - /var/lib/mysql#多容器共享卷app_5:image: mysql:8volumes: - my-data3:/var/lib/mysqlapp_6:image: mysql:8volumes: - my-data3:/var/lib/mysqlnetworks:my-network:driver: bridgeipam:config:- subnet: 192.168.1.0/24gateway: 192.168.1.1volumes:my-data:my-data2: my-data3:
Docker Compose常用命令
在docker-compose.yml
文件路径下执行以下命令,如果docker-compose.yml
文件的路径不是./
或文件名不是默认的docker-compose.yml
,你可以使用-f
参数来指定文件路径和文件名。这样,DockerCompose会使用你指定的文件来运行命令。
- 帮助
docker-compose -h
- 上线所有的服务
docker-compose up docker-compose -f ./compose.yml up
- 上线所有的服务并后台运行
docker-compose up -d docker-compose -f ./compose.yml up -d
- 上线某一服务
docker-compose up <service>docker-compose [-f ./compose.yml] up <service>
- 下线并删除容器、网络、数据卷和镜像
docker-compose down
- 停止某一服务
docker-compose stop <service>
- 删除某服务容器
docker-compose rm -f <service>
- 进入容器实例内部
docker-compose exec <service> /bin/bash
- 展示当前docker-compose文件编排过的运行的所有容器
docker-compose ps
- 展示当前docker-compose文件编排过的容器进程
docker-compose top
- 查看容器输出的日志
docker-compose logs <service>
- 检查配置是否有语法错误
docker-compose config
- 检查配置,有问题的才输出
docker-compose -q
- 重启服务
docker-compose restart <service>
- 启动服务
docker-compose start <service>
- 扩容,将服务名为app的应用扩容3份
docker-compose scale <service>×3
案例:部署WordPress博客系统
1.编辑compose.yml
name: by_blogservices:mysql:privileged: trueimage: mysql:8.0ports:- "3306:3306"environment: - MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.dnetworks:- blog-networkrestart: alwayswordpress:privileged: trueimage: wordpressports:- "8080:80"restart: alwaysdepends_on:- mysqlenvironment: - WORDPRESS_DB_HOST=mysql- WORDPRESS_DB_USER=root- WORDPRESS_DB_PASSWORD=123456- WORDPRESS_DB_NAME=wordpressvolumes:- wordpress-data:/var/www/htmlnetworks:- blog-networkvolumes:mysql-data:wordpress-data:networks:blog-network:
2.执行docker-compose命令启动服务
docker-compose -f ./compose.yml up -d
命令行输出
[root@localhost opt]# docker-compose -f ./compose.yml up -d
[+] Running 35/24✔ wordpress 22 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 66.2s ✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 93.2s [+] Building 0.0s (0/0)
[+] Running 5/5✔ Network by_blog_blog-network Created 0.4s ✔ Volume "by_blog_mysql-data" Created 0.0s ✔ Volume "by_blog_wordpress-data" Created 0.0s ✔ Container by_blog-mysql-1 Started 2.6s ✔ Container by_blog-wordpress-1 Started 3.6s
[root@localhost opt]#
编排完成,服务成功启动,可以看到docker-compose先是创建了自定义的网络,然后是创建和挂载数据卷,然后在按顺序启动容器。
打开浏览器,简单进行初始化的操作后,WordPress博客系统便进入可用状态了😊。
相关文章:

Docker Compose的使用
文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例:部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…...

[STM32 HAL库]串口空闲中断+DMA接收不定长数据
一、空闲中断 STM32的串口具有空闲中断,什么叫做空闲呢?如何触发空闲中断呢? 空闲:串口发送的两个字符之间间隔非常短,所以在两个字符之间不叫空闲。空闲的定义是总线上在一个字节的时间内没有再接收到数据。触发条件…...

三、华为交换机 Hybrid
一、Hybrid功能 Hybrid口既可以连接普通终端的接入链路(类似于Access接口),又可以连接交换机间的干道链路(类似于Trunk接口)。它允许多个VLAN的帧通过,并可以在出接口方向将某些VLAN帧的标签剥掉࿰…...

如何通过 Apache Airflow 将数据导入 Elasticsearch
作者:来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排(schedule)和监控工作流的平台。它用于编排 ETL(Extract-Transform-Load࿰…...
Android Studio:Linux环境下安装与配置
更多内容:XiaoJ的知识星球 Android Studio:Linux环境下安装与配置 1.安装JDK2.安装Android Studio2.1 获取安装包2.2 安装(1)配置环境变量:(2)运行安装:(3)配…...

token是用来鉴权的,那session是用来干什么的?
在Web应用和API设计中,鉴权与会话管理是两个核心概念,它们对于确保用户身份的安全性和维护用户会话状态至关重要。Token和Session是两种常用的鉴权与会话管理机制,它们各自具有独特的工作原理和适用场景。下面是对Token和Session的详细解析及…...
基于 WEB 开发的二手车辆销售管理系统设计与实现
标题:基于 WEB 开发的二手车辆销售管理系统设计与实现 内容:1.摘要 摘要:随着互联网技术的不断发展,电子商务在各个领域得到了广泛的应用。本文以二手车辆销售管理系统为例,探讨了基于 WEB 开发的销售管理系统的设计与实现。通过对系统需求的…...
wordpress的火车头商品发布接口
<?php require ../wp-load.php; ini_set(memory_limit, 1024M); set_time_limit(180);$top_cat ; # 图片链接域名替换 $image_host ;$start_time microtime(true);$counter 0; // 临时缓存 $products $skus $categories []; $var_sku_index 1;$rowData$_POST;// if…...

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…...

总结3..
#include<stdio.h> int n,m; int a[1002][1002]; int b[1002][1002];//判断该空的八连通图是否被走过 int gg0; int dd0; int xz[8]{-1,-1,-1,0,0,1,1,1},yz[8]{-1,0,1,-1,1,-1,0,1};//八个方向 void dfs(int x,int y) { int dx,dy; for(int i0;i<8;i) { …...

信息奥赛一本通 1168:大整数加法
这道题是一道大整数加法,涉及到高精度的算法,比如说有两个数要进行相加,1111111111111111111111111111111111111112222222222222222222222222222222,那么如果这两个数很大的话我们常用的数据类型是不能进行计算的,那么…...
3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南
OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…...

横盘出击的三种经典走势形态,买点以及需要注意的问题技术详解
龙头股在横盘整理过程中,也会出现几种不同的形态,比如矩形整理形态,或者在某一趋势线下方运行。 第一种形态:突破横盘趋势线 突破横盘趋势线时识别横盘龙头启动的关键点位。股价经过一段时间的横盘后,突然出现快速上…...
处理没有提示的字符串、计算相隔天数应用题
正常情况下,小云每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小云要跑 2 千米。如果同时是周一或月初,小云也是跑 2 千米。 小云跑步已经坚持了很长时间,从 1990 年 1 月 1 日周…...

【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程表 实现 Trie (前缀树)(C++)
一、搜索二维矩阵 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 可以使用 从右上角开始搜索 的方法来有效地找到目标值。 选择起始位置: 从矩…...

react使用react-redux状态管理
1、安装 npm install react-redux2、创建store.js import { createStore } from redux;// 定义初始状态 const initialState {counter: 888 };// 定义 reducer 函数,根据 action 类型更新状态 function reducer(state initialState, action) {switch (action.ty…...

04_角色创建窗口
将上文的登录窗口隐藏 创建空节点 作为创建角色窗口 命名为CreateWnd 创建输入的名字的输入框 再创建一个按钮用来随机角色名字 创建开始游戏按钮 End....
Dockerfile -> Docker image -> Docker container
1. Dockfile -> Docker image docker build -t shuai_image -f xxx/xxx/Dockerfile . (.不能少)出现: [] Building xxx(10/17) > [internal] load build definition from Dockerfile > > transferring dockerfile: … > > transferring context …...
LDN的蓝牙双模键盘帮助文档
文档索引 已支持的PCB列表(仅列出少部分):键盘特性硬件软件键盘以及驱动蓝牙模式USB模式 驱动功能介绍主界面键盘列表页面键盘配置(使用双模键盘的请务必细看本说明)功能层配置(改键)触发层配置(改FN键等触发功能)功能选择(重要&a…...

搭建一个基于Spring Boot的驾校管理系统
搭建一个基于Spring Boot的驾校管理系统可以涵盖多个功能模块,例如学员管理、教练管理、课程管理、考试管理、车辆管理等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的系统。 1. 项目初始化 使用 Spring Initializr 生成一个Spring Boot项目&am…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...