7.Docker-compose
文章目录
- Docker-compose
- 概念
- Docker-compose部署
- YAML文件格式和编写注意事项
- 注意
- 数据结构
- 对象映射
- 序列属组
- 布尔值
- 序列的映射
- 映射的映射
- JSON格式
- 文本换行
- 锚点和引用
- Docker compose配置常用字段
- docker compose常用命令
- Docker Compose 文件结构
- docker compose部署apache
- docker compose 部署LNMP
Docker-compose
概念
-
Docker-Compose项目是基于Python开发的Docker官方开源项目,负责实现对Docker容器集群的快速编排。
-
Compose是单机编排容器集群或者是分布式服务容器的应用工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
-
Docker-Compose是一个容器编排工具。
-
通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker-compose up命令就像执行脚本一样,一个一个的安装并部署容器。
-
Docker compose 文件通常包含一个或多个服务,每个服务都由一个或多个容器组成。服条定义了容器应该执行的任务,以及容器之间的统赖关系。
-
Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器(container)。
-
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
-
一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。
-
Docker-compose总结
- 实现单机容器集群编排管理(使用YAML模板文件定义多个应用容器的启动参数和依赖关系,并使用Docker-compose来根据模板文件的配置来启动容器)
-
三大概念(包含关系)
- 项目/工程
- 默认使用目录名做项目名
- 支持 -p 或 --project-name 来指定项目名
- 在项目的目录中会包含一个docker-compose.yml 模板文件此文件为项目的默认配置文件(支持使用 -f 或 COMPOSE_FILE 来指定项目的配置模板文件)
- 在配置文件里面可以定义一个或多个服务,每个服务可以包含容器的名称、镜像、端口映射、依赖关系、环境变量、挂载点等配置参数
- 服务
- 容器
- 项目/工程
Docker-compose部署
##Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose##下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose##安装
chmod +x /opt/docker-composemv /opt/docker-compose /usr/local/bin/docker-compose##查看版本
docker-compose --version
##能查看到则,安装成功
YAML文件格式和编写注意事项
注意
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。YAML 数据结构通过缩进来表示,
连续的项目通过减号来表示,
键值对用冒号分隔,
数组用中括号 [] 括起来,
hash 用花括号 {} 括起来。
使用 YAML 时需要注意下面事项:大小写敏感通过缩进表示层级关系不支持制表符 tab 键缩进,只能使用空格缩进缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格用 # 号注释符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 - 如果包含特殊字符用单引号('')引起来会作为普通字符串处理,
双引号(""): 特殊字符作为本身想表示的意思
数据结构
对象映射
对象映射: 键值对的字典
animal: dogs
序列属组
序列属组: 一组按次序排列的列表##竖列表
pets:
- Cat
- Dog
- Pig##横列表
pets: ["cat", "dog", "pig"]
布尔值
##布尔值debug: true
debug: false
序列的映射
##序列的映射pets:- Cat- Dog- Pig
映射的映射
##映射的映射websetting:cpu: 2memory: 1024Mswap: 2048Mdisk: 60G
JSON格式
##JSON格式{pets: ["cat","dog","pig"],websetting: {cpu: ['2'],memory: ['1024M'],disk: ['60G']}
}
文本换行
# 注意“|”与文本之间须另起一行
# 使用|标注的文本内容缩进表示的块,可以保留块中已有的回车换行value: |helloworld!# 输出结果
# hello 换行 world!!
# 注意“>”与文本之间的空格
# 使用>标注的文本内容缩进表示的块,将块中回车替换为空格最终连接成一行value: > hello
world!# 输出结果
# hello 空格 world!
锚点和引用
# 复制代码注意*引用部分不能追加内容
# 使用&定义数据锚点,即要复制的数据
# 使用*引用锚点数据,即数据的复制目的地name: &a yaml
book: *a
books:- java- *a- python# 输出结果
book: yaml
books:[java, yaml, python]
Docker compose配置常用字段
字段 | 描述 |
---|---|
build | 指定 Dockerfile 文件名, 要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定 |
dockerfile | 构建镜像的目录下的文件 |
context | 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址 |
image | 指定镜像 |
command | 执行命令,覆盖容器启动后默认执行的命令 |
container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量 |
deploy | 指定部署和运行服务相关配置,只能在 Swarm 模式使用 |
environment | 添加环境变量 |
networks | 加入网络,引用顶级networks下条目 |
network_mode | 设置容器的网络模式,如 host,bridge,… |
ports | 暴露容器端口,与 -p 相同,但端口不能低于 60 |
volumes | 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称 |
volumes_from | 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 ‘2’ 支持 |
hostname | 容器主机名 |
sysctls | 在容器内设置内核参数 |
links | 连接到另外一个容器,- 服务名称[:服务别名] |
privileged | 用来给容器root权限,注意是不安全的,true |
restart | 设置重启策略,no,always,no-failure,unless-stopped no,默认策略,在容器退出时不重启容器。 on-failure,在容器非正常退出时(退出状态非0),才会重启容器。 on-failure:3,在容器非正常退出时重启容器,最多重启3次。 always,在容器退出时总是重启容器。 unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。 |
depends_on | 在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。 php: depends_on: - apache - mysql |
Dockercompose字段 | 相对的docker run命令 |
---|---|
image | 镜像:标签 |
command | 启动命令 |
container_name | –name |
environment | –env |
networks network_mode | –network |
ports | -p |
volumes | -v |
volumes_from | –volumes-from |
hostname | -h |
sysctls | -sysctl |
links | –link |
privileged | –privileged |
restart | –restart |
docker compose常用命令
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 -d 后台启动 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
Docker Compose 文件结构
/opt/compose_nginx/
├── docker-compose.yml #创建模板脚本
├── nginx
│?? ├── Dockerfile #创建容器脚本
│?? ├── nginx-1.12.0.tar.gz #复制源码包
│?? └── run.sh #启动服务脚本
└── wwwroot└── index.html #站点网页
docker compose部署apache
mkdir -p /usr/local/compose/docker-compose-apachecd /usr/local/compose/docker-compose-apachevim docker-compose.yml
version: '3'services:apache:image: httpd:latestcontainer_name: httpd-gglports:- 1314:80volumes:- ./html:/usr/local/apache2/htdocsnetworks:lamp:ipv4_address: 172.20.0.10networks:lamp:driver: bridgeipam:config:- subnet: 172.20.0.0/16
docker compose 部署LNMP
mkdir /usr/local/compose/docker-compose-lnmp/cd /usr/local/compose/docker-compose-lnmp/##在目录中准备 Dockerfile 创建LNMP的相关的文件vim docker-compose.yml
version: '3'services:nginx:build:context: ./nginxdockerfile: Dockerfilecontainer_name: nginxports:- 80:80volumes:- ./nginx/html:/usr/local/nginx/htmlnetworks:lnmp:ipv4_address: 172.18.0.10mysql:image: mysql:centos7container_name: mysqlports:- 3306:3306volumes:- db-data:/usr/local/mysqlnetworks:lnmp:ipv4_address: 172.18.0.20php:image: php:centos7container_name: phpports:- 9000:9000volumes:- db-data:/usr/local/mysql- ./nginx/html:/usr/local/nginx/htmlnetworks:lnmp:ipv4_address: 172.18.0.30depends_on:- nginx- mysqlnetworks:lnmp:driver: bridgeipam:config:- subnet: 172.18.0.0/16volumes:db-data:
##运行docker-compose##在 docker-compose.yml 的文件的目录中运行docker-compose up -ddocker-compose ps
##验证数据库是否连接成功vim /usr/local/compose/docker-compose-lnmp/nginx/html/index.php<?php
$link=mysqli_connect('192.168.242.66','admin','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
##进入到容器中docker exec -it mysql bash##修改mysql 的登录密码mysqladmin -u root -p password "123"mysql -uroot -p123create database word;
#创建一个数据库grant all ON word.* to 'admin'@'%' identified by 'admin123';#把数据库里面所有表的权限授予给admin,并设置密码admin123flush privileges;
#刷新数据库
相关文章:

7.Docker-compose
文章目录 Docker-compose概念Docker-compose部署YAML文件格式和编写注意事项注意数据结构对象映射序列属组布尔值序列的映射映射的映射JSON格式文本换行锚点和引用 Docker compose配置常用字段docker compose常用命令Docker Compose 文件结构docker compose部署apachedocker co…...

多线程:管程法
管程法 生产者把生产好的数据放入缓冲区,消费者从缓冲区拿出数据 package jingcheng.test.gaoji; //测试生产者消费者模型-->利用缓冲区解决:管程法 //生产者,消费者,产品,缓冲区 public class TestPc {public st…...

7.1 String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以String 对象是不可变的。 补充(来自issue 675):在 Java 9 之后,String 、StringBu…...

【C++STL标准库】容器适配器
功能:将功能类似,但是接口不符合的接口转换成另一个接口 stack 栈stack(栈) 特点:先入后出,只能从栈顶弹出值,只能从栈顶压入值 也就是说栈需要的功能:push_back、pop_back 所以可…...

2023深圳杯(东三省)数学建模ABC题思路及代码
大家好呀,比赛开赛后我一直在去写各个题,深圳杯的难度还是比较大的,在这里给大家带来初步的选题建议及思路。 本次深圳杯小白推荐选择A题,数据分析类题目无论怎样都能完成论文,内容也会比较丰富。学过嵌入信息的可以选…...
Set集合类详解(附加思维导图)
目录 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 2.2、TreeSet集合的使用 三、HashSet、LinkedHashSet、TreeSet的使用场景 四、list和set集合的区别 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 ①:add…...

【vue3】vue3接收props以及emit的用法
技术:vue3.2.40 UI框架:arco-design 2.44.7 css技术:less 4.1.3 实现:子组件接收props以及通过emit方法传值父组件 vue3使用的组合式API,我这里使用的是defineComponent 1.父页面调用子组件 <template><d…...

【Lua学习笔记】Lua入门
文章目录 Lua变量数据类型变量声明其他表示 Lua语法判断逻辑判断(Lua很特殊,这个比较重要)短路判断 ifif else 循环whileforrepeat 迭代器泛型for迭代器无状态迭代器多状态的迭代器 Lua函数select方法 数组字符索引_G (不是教程&a…...

LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程
编者按:在训练大语言模型的过程中,构建高质量的训练数据集是非常关键的一步,但关于构建大模型训练所需数据集的通用数据处理流程(Data pipelines)的相关资料极为稀少。 本文主要介绍了基于Common Crawl数据集的数据处理流程。首先,文章概述了…...

如何使用postman判断返回结果是否正确
针对一个接口,我们在知道参数以及参数对应的结果时,可以通过postman进行判断,验证返回数据是否与预期数据相等。这样可以使我们的接口测试更加的方便简洁。 1、准备数据。 postman可以接受的文件格式如图所示,一般来说可以将我们…...

A General framework for Prompt
你已经知道了 Prompt 可以具有一些通用的结构,比如一个简单的Prompt 结构: 能否帮我为我的课程 TAI自动化,设计一套数字营销策略? Action 我们的目标是激发目标受众一一那些希望利用人工智能简化工作流的人们的兴趣,并提高课程的知名度。 G…...

使用python将PDF转word
实现功能,将程序所在当前路径下的所有PDF文件转化为word import os from pdf2docx import Converter# 获取当前路径 current_path os.getcwd()# 遍历当前路径下的所有文件和文件夹 for file_name in os.listdir(current_path):# 检查文件是否为 PDF 文件if file_n…...

CMU 15-445 -- Logging Schemes - 17
CMU 15-445 -- Logging Schemes - 17 引言IndexFailure ClassificationTransaction FailuresSystem FailuresStorage Media Failures Buffer Pool PoliciesShadow Paging: No-Steal ForceWrite-Ahead Log (WAL): Steal No-ForceLogging SchemesCheckpoints小结 引言 本系列为…...

逻辑回归分析实战(根据鸢尾花的性质预测鸢尾花类别)
紧接着上过一个线性回归模型(一元线性回归模型实战) 一元线性回归模型和逻辑回归模型是统计学中常见的两种回归模型,它们有以下几点不同之处: 1. 目标变量类型:一元线性回归模型适用于连续型目标变量,即预测…...

【每日一题】2050. 并行课程 III
【每日一题】2050. 并行课程 III 2050. 并行课程 III题目描述解题思路 2050. 并行课程 III 题目描述 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其中 relations[j] [prevCoursej, nextCour…...

【kubernetes系列】kubernetes之使用kubeadm搭建高可用集群
概述 目前来说,kubernetes集群搭建的方式很多,选择一个稳定的适合自己的很重要。目前使用kubeadm方式搭建k8s集群还是很常见的,使用kubeadm搭建可以很简单差不多两条命令就行,也可以稍微复杂一点做一些基础优化,本文将…...

SpringBoot 快速实现 IP 地址解析
在spring boot 项目中获取请求的ip与详细地址,很多网站app 中都已经新增了ip 地址显示,大家也可以用在自己的开发中,显得更高级。 引入 如果使用本地ip 解析的话,我们将会借助ip2region,该项目维护了一份较为详细的本…...

【云原生】Docker镜像的创建,Dockerfile
一、Docker镜像的创建 创建镜像有三种方法,分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 1.基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改docker run -it --name web centos:7 /bin/…...

了解Unity编辑器之组件篇Event(七)
Event:用于在对象之间进行通信和交互的机制。它可以帮助你实现触发和响应特定动作或状态的逻辑一、Event System:用于处理 UI 事件的系统组件 First Selected 属性:定义了在场景加载或 UI 激活时,哪个 UI 元素将成为首选的选中元素…...

bash: 睡觉的冒号;是不是两个点?
文章目录 简介躺着的冒号是两个点正常冒号总结简介 在bash里冒号和躺着的冒号的用法不一样一定要注意别用错。 躺着的冒号是两个点 难道正常的不是两个点)的作用: A sequence expression takes the form {x…y[…incr]}, where x and y are either integers or single cha…...

揭秘爱数AnyShare认知助手:大模型深度产品化,深化人与机器的“分工协作”
文 | 智能相对论 作者 | 叶远风 大模型竞逐日趋白热化,百模大战热闹非凡。 但是,对产业主体或者普通看客而言,大模型究竟如何改变一线业务、实现工作方式的变革甚至组织转型,很多人并没有具象化的认知。 技术厉害、产品牛&…...

ad+硬件每日学习十个知识点(10)23.7.21
文章目录 1.verilog新建文件夹结构2.怎么在quartus2里新建工程?3.如果在quartus2新建工程后,发现器件选择错误,怎么修改?4.在quartus2新建工程后,怎么新建文件编写程序?4.在quartus2新建工程后,怎么添加已有文件编写程序?5.quartus2怎么调节字体?6.刚下载完quartus2的…...

RCU 使用及机制源码的一些分析
》内核新视界文章汇总《 文章目录 1 介绍2 使用方法2.1 经典 RCU2.2 不可抢占RCU2.3 加速版不可抢占RCU2.4 链表操作的RCU版本2.5 slab 缓存支持RCU 3 源码与实现机制的简单分析3.1 数据结构3.2 不可抢占RCU3.3 加速版不可抢占RCU3.4 可抢占RCU3.5 报告禁止状态3.6 宽限期的开…...

【第二套】Java面试题
第二套: 一、JavaScript前端开发 1、下列的代码输出什么? var y 1; if(function f(){}){y typeof f; } console.log(y);正确的答案应该是 1undefined。 JavaScript中if语句求值其实使用eval函数,eval(function f(){}) 返回 function f()…...

CSS3 实现边框圆角渐变色渐变文字效果
.boder-txt {width: 80px;height: 30px; line-height: 30px;padding: 5px;text-align: center;border-radius: 10px;border: 6rpx solid transparent;background-clip: padding-box, border-box;background-origin: padding-box, border-box;/*第一个linear-gradient表示内填充…...

第二天 kali代理配置
文章目录 环境一、虚拟机网络模式(1)NAT(2)NAT模式(3)桥接模式(4)仅主机模式(5)总结 二、配置代理(桥接模式)1、基础设置2、虚拟机浏览…...

stable-diffusion-webui汉化教程
第一种方法 1.打开stable diffusion webui,进入"Extensions"选项卡 2.点击"Install from URL" 3、注意"URL for extension’s git repository"下方的输入框 4、填入地址:https://github.com/VinsonLaro/stable-diffus…...

热备盘激活失败导致raid5阵列崩溃的服务器数据恢复案例
服务器数据恢复环境: 一台Linux Redhat操作系统服务器上有一组由5块硬盘组建的raid5阵列,包含一块热备盘。上层部署一个OA系统和Oracle数据库。 服务器故障: raid5阵列中的1块磁盘离线,硬盘离线却没有激活热备盘,直到…...

【ribbon】Ribbon的负载均衡和扩展功能
Ribbon的核心接口 参考:org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration IClientConfig:Ribbon的客户端配置,默认采用DefaultClientConfigImpl实现。IRule:Ribbon的负载均衡策略,默认采用ZoneA…...

数据链路层是如何传递数据的
数据链路层是如何传递数据的 数据链路层功能概述封装成帧透明传输差错控制 数据链路层功能概述 数据链路层的主要作用就是加强物理层传输原始比特流的功能。其负责将物理层提供的可能出错的物理连接,改造成逻辑上无差错的数据链路。 数据链路层包括三个基本问题&a…...