Docker Compse单机编排
一.Docker Compse 介绍
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务、网络和卷,然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程序变得更加简单。
github地址: GitHub - docker/compose: Define and run multi-container applications with Docker
官方地址: https://docs.docker.com/compose/
1.yml 语言
AML 文件格式及编写注意事项
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。
类似于 json 数据描述语言,语法比 json 简单的很多。
YAML 数据结构通过缩进来表示,连续的项目通过减号来表示, 键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来
2.使用YAML时需要注意下面事项
-
大小写敏感
-
通过缩进表示层级关系
-
不支持制表符 tab 键缩进,只能使用空格缩进
-
缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
-
用 # 号注释
-
符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
-
如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思
指令 | 作用 | 演示 |
---|---|---|
build | 指定构建上下文和可选的Dockerfile用于构建镜像。 | build: context: /opt/test dockerfile: Dockerfile |
dockerfile | 指定Dockerfile的路径。通常在build部分中使用。 | dockerfile: Dockerfile.prod |
context | 指定构建上下文的路径,即包含Dockerfile和构建上下文的目录路径 | context: /opt/test |
image | 指定用于服务/容器的镜像名称。 | image: myapp:latest |
command | 覆盖由镜像指定的默认命令 | command: ["python", "app.py"] |
container_name | 为容器指定自定义名称。 | container_name: my_container |
deploy | 指定部署选项,如副本和放置 | deploy: replicas: 3 |
environment | 为服务指定环境变量 | environment: - DEBUG=true |
networks | 指定连接服务的网络 | networks: - frontend - backend |
network_mode | 指定容器的网络模式 | network_mode: "host" |
ports: | 将容器端口映射到主机端口 | ports: - "8080:80" |
volumes | 挂载主机或其他容器的卷 | volumes: - "nginx-data:/usr/local/nginx/html |
volumes_from | 从另一个服务/容器挂载卷 | volumes_from: - data-container |
hostname: | 指定主机名 | hostname: my-container |
sysctls | 为容器设置内核参数 | sysctls: - net.core.somaxconn=1024 |
restart | 重启策略 | restart: always |
depends_on | 指定该服务依赖的其他服务 | depends_on: - mysql |
3.常用指令
命令只能在docker-compose.yml的目录下执行
命令 | 解释 |
---|---|
build | #构建镜像 |
bundle | #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件 |
config -q | #查看当前配置,没有错误不输出任何信息 |
create | #创建服务,较少使用 |
down | #停止和删除所有容器、网络、镜像和卷 |
events | #从容器接收实时事件,可以指定json 日志格式,较少使用 |
exec | #进入指定容器进行操作 |
help | #显示帮助细信息 |
images | #显示镜像信息,较少使用 |
kill | #强制终止运行中的容器 |
logs | #查看容器的日志 |
pause | #暂停服务 |
port | #查看端口 |
ps | #列出容器,较少使用 |
pull | #重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用 |
push | #上传镜像 |
restart | #重启服务,较少使用 |
rm | #删除已经停止的服务 |
run | #一次性运行容器 |
scale | #设置指定服务运行的容器个数 |
start | #启动服务 ,较少使用 |
stop | #停止服务,较少使用 |
top | #显示容器运行状态 |
unpause | #取消暂定 |
up | #创建并启动容器 ,较少使用 |
二.安装和准备
1.安装Docker Compose
yum安装
yum install epel-release.noarch -y
yum -y install docker-compose
二进制安装
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin
2.查看命令格式
官方文档: https://docs.docker.com/compose/reference/
docker-compose --help
Define and run multi-container applications with Docker.
Usage:docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]docker-compose -h|--help
#选项说明:
-f,–file FILE #指定Compose 模板文件,默认为docker-compose.yml
-p,–project-name NAME #指定项目名称,默认将使用当前所在目录名称作为项目名。
--verbose #显示更多输出信息
--log-level LEVEL #定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi #不显示ANSI 控制字符
-v, --version #显示版本#以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行
build #构建镜像
bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件
config -q #查看当前配置,没有错误不输出任何信息
create #创建服务,较少使用
down #停止和删除所有容器、网络、镜像和卷
events #从容器接收实时事件,可以指定json 日志格式,较少使用
exec #进入指定容器进行操作
help #显示帮助细信息
images #显示镜像信息,较少使用
kill #强制终止运行中的容器
logs #查看容器的日志
pause #暂停服务
port #查看端口
ps #列出容器,较少使用
pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用
push #上传镜像
restart #重启服务,较少使用
rm #删除已经停止的服务
run #一次性运行容器
scale #设置指定服务运行的容器个数
start #启动服务 ,较少使用
stop #停止服务,较少使用
top #显示容器运行状态
unpause #取消暂定
up #创建并启动容器 ,较少使用
显示 docker-compose 拉起的容器
3.docker compse 文件格式
官方文档: https://docs.docker.com/compose/compose-file/
docker compose 文件是一个yaml格式的文件,所以注意行首的缩进很严格默认docker-compose命令会调用当前目录下的docker-compose.yml的文件,因此一般执行docker-compose命令前先进入docker-compose.yml文件所在目录
docke- compose文件的格式很不同版本,版本不同,语法和格式有所不同,参看以下列表
三.演示
1.启动单台容器
docker compose 文件可在任意目录,创建文件名为docker-compose.yml 配置文件,要注意前后的缩进
[root@localhost harbor]#mkdir /mnt/docker-compose
[root@localhost harbor]#cd /mnt/docker-compose/
[root@localhost docker-compose]#vim docker-compose.yml
#准备yml文件
server-nginx-web:image: nginxcontainer_name: web1expose:- 80- 443ports:- "8080:80"- "8443:443"
2.检测语法
docker-compose config
3.启动
docker-compose up
#docker-compose start
#docker-compose up -d
后台启动
docker-compose ps
4.关闭
4.1 使用docker-compose down 会将容器直接删除 镜像也会删除
docker-compose down
docker-compose ps
docker ps -a
4.2 使用docker-compose kill 只是退出容器
docker-compose kill
docker ps -a
docker-compose ps
4.3 只删除停止的容器
docker-compose rm
5.查看事件 docker-compose events
docker-compose events
#json 格式
#docker-compose events --json
6.启动多个容器
server-nginx-web:image: nginxcontainer_name: web1expose:- 80- 443ports:- "8001:80"- "8443:443"
server-mysql:image: mysqlcontainer_name: mysql1[root@localhost docker-compose]#docker-compose config -q
# -q 静默不输出
启动
docker-compose up -d
docker ps -a
7.调用dockerfile 文件执行编排
FROM centos:centos7.9.2009
LABEL author="zhou cloud" \version="1.0" \description="test"
RUN rm -rf /etc/yum.repos.d/
ADD qh.repo /etc/yum.repos.d/
RUN yum -y install gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel wget
ADD nginx-1.18.0.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install
COPY index.html /apps/nginx/html
EXPOSE 80
CMD ["-g","daemon off;"]
ENTRYPOINT ["/apps/nginx/sbin/nginx"][root@localhost centos7]#docker build -t c7:n3 .
[root@localhost centos7]#docker run -d -p 80:80 --name web1 c7:n1
编写compse 文件
vim /opt/compose_nginx/docker-compose.yml services:nginx:container_name: web1hostname: nginxbuild:context: /data/dockerfile/system/centos/centos7/dockerfile: Dockerfileports:- 1216:80- 1217:443networks:mynet:ipv4_address: 172.18.0.10volumes:- ./wwwroot:/usr/local/nginx/html
networks:mynet:driver: bridgeipam:config:- subnet: 172.18.0.0/16services: 定义了要运行的服务。nginx: Nginx 服务的配置。container_name: 指定容器的名称为 web1。hostname: 指定容器的主机名为 nginx。build: 指定了构建 Nginx 容器所需的上下文和 Dockerfile。ports: 将主机端口 1216 映射到容器的 80 端口,将主机端口 1217 映射到容器的 443 端口。networks: 将服务连接到名为 lnmp 的自定义网络。volumes: 将主机上的 ./wwwroot 目录挂载到容器中的 /usr/local/nginx/html 目录。networks: 定义了自定义网络。lnmp: 自定义网络的配置。driver: 网络驱动程序为 bridge。ipam: IP 地址管理配置。config: 子网配置,指定了 IP 地址范围。cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d
----------------------------------------------------------------------------------------------------------
-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行
----------------------------------------------------------------------------------------------------------docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b48dceee248f compose_nginx_nginx "/run.sh" About a minute ago Up About a minute 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1cd /opt/compose_nginx/
docker-compose ps #必须在docker-compose.yml所在目录执行此命令docker-compose -f docker-compose.yml up -d
相关文章:

Docker Compse单机编排
一.Docker Compse 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务、网络和卷,然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程…...

“AI+Security”系列第2期(一):对抗!大模型自身安全的攻防博弈
近日,由安全极客、Wisemodel 社区和 InForSec 网络安全研究国际学术论坛联合主办的“AISecurity”系列第 2 期——对抗!大模型自身安全的攻防博弈线上活动如期举行。本次活动邀请了君同未来创始人兼 CEO 韩蒙、前阿里云高级安全专家郑瀚、ChaMd5 AI 组负…...

Python Static Typing: 提升代码可靠性与可读性的使用技巧
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...

Datawhale多模态赛事(1)
赛事说明:https://tianchi.aliyun.com/competition/entrance/532251/introduction?spma2c22.12281925.0.0.2f307137p8qZmp 学习平台:https://linklearner.com/home 第一天 1.报名赛道学习赛事 https://tianchi.aliyun.com/competition/entrance/53225…...

云手机在海外社交媒体运营中的作用
随着社交媒体的全球普及,海外社交媒体运营成为众多企业与个人提升品牌影响力和扩大市场份额的重要策略。在这一进程中,海外云手机以其独特的功能,为海外社交媒体运营提供了强大的支持。 那么,海外云手机在海外社交媒体运营中究竟扮…...

Ubuntu怎么进入救援模式或单用户模式
进入救援模式(Rescue Mode)或单用户模式(Single User Mode)的方法取决于你所使用的Linux发行版。以下是通用的步骤,适用于大多数基于GRUB引导的系统,如Ubuntu、Debian、CentOS等: 重启你的系统。…...

学习鸿蒙-构建私有仓储
1.选择 鸿蒙提供ohpm-repo工具用于构建本地私有仓储 ohpm-repo下载 2.环境配置 安装node,ohpm-repo 支持 node.js 18.x 及以上版本 node最新版本下载 3.配置文件及运行 1.解压 ohpm-repo 私仓工具包 2.进入 ohpm-repo 解压目录的 conf 目录内,打开 c…...

经验是负债,学习是资产
经验是负债,学习是资产 经验是负债,学习是资产。这是李嘉诚先生的一句名言。他一语道出了学习在企业发展中的推动作用。 企业家经营的目的,无非就是将利润最大化。企业能够产生利润,靠的是提升自身业绩、降低运营成本,…...

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)
日月更迭,转眼间已经来到了2024年的立秋,在这个数字技术快速发展的时代,电脑录屏技术已经成为了一项不可或缺的技能,无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢?接下来,…...
Docker资源隔离的实现策略以及适用场景
Docker通过多种技术实现资源隔离,确保不同容器之间相互独立并有效利用主机资源。 以下是Docker资源隔离的主要实现策略以及适用场景: 实现策略 1、命名空间(Namespaces) 进程命名空间(PID Namespace): 隔…...

PLL基本原理、设计及应用
PLL基本原理 锁相环(Phase-Locked Loop, PLL)是一种基本的反馈控制系统,广泛应用于电子通信、信号处理、时钟同步等多个领域。PLL通过反馈机制锁定输入信号的频率和相位,从而实现输出信号与输入信号的同步。其基本工作原理可以概…...

Qt实现类似淘宝商品看板的界面,带有循环翻页以及点击某页跳转的功能
效果如下: #ifndef ModelDashboardGroup_h__ #define ModelDashboardGroup_h__#include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QWidget>#include <QLabel> #include <QWidget> #include <QMou…...
2024下半年国际学术会议一览表
在科技与人文的交汇点,2024年的国际学术会议季即将拉开帷幕,一系列聚焦于计算机科学与人工智能、工程与技术、教育与社会科学的盛会,不仅展示了全球学术研究的最新成果,更促进了跨学科交流与合作,为未来的科技发展与社…...

serial靶场
项目地址 https://download.vulnhub.com/serial/serial.zip 实验过程 将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机 使用C段扫描,获取靶机IP地址 arp-scan -l 扫描一下端口 nmap -sV -p- 192.168.48.149 查看…...
如何在Vue3项目中引入并使用Echarts图表
在Vue 3项目中引入并使用ECharts图表,你可以通过npm或yarn来安装ECharts,然后在Vue组件中引入并使用它。以下是一个基本的步骤指南: 1. 安装ECharts 首先,你需要在你的Vue 3项目中安装ECharts。打开你的终端或命令提示符&#x…...
C# 子类、接口
栏目总目录 子类 继承的概念 继承机制:C#支持单继承,即一个类只能直接继承自一个基类。但基类本身可以继承自另一个类,从而实现继承链。继承关键字:使用冒号(:)表示继承关系,子类在声明时指定…...

Qt实现圆形窗口
重新实现paintEvent()函数。 效果如下: 效果为蓝色区域,背景是vs接面,代码直接复制可用,留给有需要的人。 #ifndef CircleWidget_h__ #define CircleWidget_h__#include <QWidget>class CCircleWidget : public QWidget {Q…...
LeetCode 算法:有效的括号 c++
原题链接🔗:有效的括号 难度:简单⭐️ 题目 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: …...
react和vue的diff算法的差别
React 的 Diff 算法 React 的 diff 算法主要基于以下几个原则: 同层比较: React 只会比较同一层级的节点,不会跨层级比较。假设跨层级的变化较少,从而简化了算法,提高了性能。 深度优先遍历: React 采用深…...
算法【滑动窗口】
滑动窗口指的是维持左、右边界都不回退的一段范围,来求解很多子数组(串)的相关问题。 滑动窗口的关键是找到范围和答案指标之间的单调性关系(类似贪心)。 滑动过程:滑动窗口可以用简单变量或者结构来维护…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...

C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...