docker-compose单机容器集群编排工具

news2024/5/18 13:39:11

前言:

docker-compose用来单机上编排容器(定义和运行多个容器,使容器能互通)

Eg:前端和后端部署在一台机器上,现在直接通过编写docker-compose文件对多个服务(可定义依赖,按顺序启动服务)同时进行启动/停止/更新

容器编排工具

例如:我们现在需要启动10个容器,其中3个nginx,2个redis,3个mysql,1个zabbix,1个ansible,有些容器需求先启动,有容器需要后启动,在启动的时候是有先后顺序的。

这时候需要批量启动容器,而且启动的时候容器之间是有依赖关系,需要考虑启动顺序的

我们可以将编排的内容全部写到一个yaml文件里,docker 的compose根据这个yaml文件里的安排去启动容器。

一 docker-compose 简介

使用一个Dockerfile模板文件可以定义一个单独的应用容器(可实现在单机上对容器集群编排管理

的工具),如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,给大家介绍

Docker 官方产品 Docker Compose 。

1 docker swarm(管理跨节点)

Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格

式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加

上后端的数据库服务容器等。

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

2 Docker-Compose将所管理的容器分为三层

  • 分别是工程(project)
  • 服务(service)
  • 以及容器(container)

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件

等)组成一个工程,若无特殊指定工程名即为当前目录名。

①一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中

可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现

服务发现及负载均衡,比如 Consul。

② Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量

COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

③ 使用Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会

碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器

本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

④ Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相

关联的应用容器为一个项目(project)。

⑤ Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只

要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。

3 通过docker-compose的优势:

使用 Docker Compose命令可以方便地管理多个容器;

可以解决容器之间的依赖关系,同时启动一个 Web 服务器容器和一个数据库容器,并在它们之间

建立网络连接,再通过depends_on实现php依赖于nginx和mysql服务的启动顺序;

Docker Compose 还支持自定义网络,使得容器可以在不同的网络中进行通信;

4 docker-compose的三大概念

项目project -> 包含一个或多个服务service -> 包含一个或多个容器container的镜像、端口映射、

环境变量、依赖关系等启动参数

二 compose 部署

1 Docker Compose 环境安装

#注意必须是在安装docker的基础上
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下载安装包单独安装DockerCompose
chmod +x /usr/local/bin/docker-compose
#docker-compose添加执行权限
docker-compose --version
#查看docker-compose版本
[root@docker ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  模板  图片  下载  桌面
docker-compose   公共                  视频  文档  音乐
[root@docker ~]# mv docker-compose /opt
[root@docker opt]# chmod +x docker-compose
[root@docker opt]# mv docker-compose /usr/local/bin/
[root@docker opt]# docker-compose --version
docker-compose version 1.25.0-rc4, build 8f3c9c58

2 docker-compose的配置模板文件yaml文件的编写

YAML是一种标记语言,可以很直观的展示数据序列化格式,可读性很高。类似于json数据描述语

言,语法比json简单很多,关于yaml数据格式:

YAML数据结构通过缩进来表示字段的层级

连续的项目通过减号来表示,

键值对用冒号分隔,

数组用中括号 [] 括起来,

hash 用花括号 {} 括起来

3 yaml的注意事项:

大小写敏感

通过缩进表示层级关系

不支持制表符 tab 键缩进,只能使用空格缩进

缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

用 # 号注释

符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 - 

如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思

4 数据结构:

对象映射: 键值对的字典 animal: pets

序列数组: 一组按次序排列的列表

Cat

Dog

Goldfish

["Cat", "Dog", "Goldfish"]

5 布尔值

debug: true

debug: false

6 对象object类型类型

#yaml格式用 空格缩进 表示字段的层级关系,同一层字段要靠左对齐
 
一级字段:
    二级字段1:                    
    二级字段2:
	    三级字段: 
 
human:
  name:
    姓: "王"
	ming: 
	- 文宇
	- 飞龙
  age: 24
  sex: 男
  height: 180

7 文本块

value:              ->  value: "helloworld"
       hello 
       world
 
 
value: |            -> value: "hello\nworld"              #key: |  表示保留文本块里的换行符
       hello 
       world
 
value: |-           -> value: 相当于 echo -n "helloworld"
       hello        
       world
	   
value: |+           -> value: "hello\nworld\n"
       hello    
       world 

8 锚点

name: &a yaml       #锚点,相当于 a="yaml" 
                   
book: *a            #引用,相当于 echo $a     book: yaml   

9 关于json格式:

 json文件格式:文件名格式通常是以 .json 为后缀,用 大括号{} 表示字段的层级关系,每层字段除

了最后一个字段都要用逗号,结尾,特性:易于api接口解析

human:
  name:
    姓: "王"
	ming: 
	- 文宇
	- 思聪
  age: 24
  sex: 男
  height: 180
  
  
{
  "human": {                      #json格式用 大括号{} 表示字段的层级关系,每层字段除了最后一个字段都要用逗号,结尾
     "name": {
	    "姓": ["王"],
		"名":["文宇", "思聪"]
	 },
	 "age": ["24"],
	 "sex": ["男"],
     "height": ["180"]
  
  }
}

10 docker-compose配置模板文件常用的字段

image               使用本地镜像或从仓库拉取镜像创建容器
build              使用dockerfile现场构建镜像创建容器
context指定dockerfile文件所在的目录
dockerfile指定dockerfile的文件名称
command             指定容器启动命令,会覆盖镜像中的CMD指令
container_name      相当于指定容器的名称  --name 
environment        相当于指定容器的环境变量 -e  --env
network_mode        相当于指定容器的网络 --network
networks          指定加入的网络和IP    --IP以及自定义网络模式
ports               指定端口映射 -p
volumes            指定数据卷   -v 或者自定义顶级卷(版本3)
volumes_from        --volumes-from ,版本3不支持
 hostname  指定容器的主机名  -h  --hostname
sysctls             指定容器的内核参数  --sysctl
links               指定容器的名称以及连接别名,可以通过容器名称通信 --link
privileged          让容器拥有真正的root权限 不建议使用  不安全 --privileged

指定重启策略  --restart

设置重启策略,no,always,no-failure,unless-

stopped


no,默认策略,在容器退出时不重启容器。


on-failure,在容器非正常退出时(退出状态非0),才

会重启容器。


on-failure:3,在容器非正常退出时重启容器,最多重启

3次。
always,在容器退出时总是重启容器。


unless-stopped,在容器退出时总是重启容器,但是不

考虑在 Docker 守护进程启动时就已经停止了的容器。
 

restart

11 docker-compose命令

字段                    描述
build                   重新构建服务
ps                      列出容器
up                      创建和启动容器
exec                    在容器里面执行命令
scale                   指定一个服务容器启动数量
top                     显示容器进程
logs                    查看容器输出
down                    删除容器、网络、数据卷和镜像
stop/start/restart      停止/启动/重启服务

12 Docker Compose 文件结构

三 docker Compose部署nginx 镜像

把之前的容器删除,避免冲突——docker   rm   -f   `docker   ps    -aq`

删除network自定义的,会冲突报错——docker   network   rm  -f   ID号

(1)准备依赖文件

(2)编写nginx页面 

[root@docker opt]# cd nginx/
[root@docker nginx]# ls
Dockerfile  nginx-1.22.0.tar.gz  run.sh
[root@docker nginx]# vim Dockerfile 
[root@docker nginx]# ls
Dockerfile  nginx-1.22.0.tar.gz  run.sh
[root@zbx-proxy wwwroot]# pwd
/opt/compose_nginx/wwwroot
[root@zbx-proxy wwwroot]# echo "<h1>this is nginx web</h1>" > /opt/compose_nginx/wwwroot/index.html
[root@docker wwwroot]# cat index.html 
<h1>this is test nginx</h1>

[root@docker ~]# cd /opt/docker-compose_nginx/
[root@docker docker-compose_nginx]# ls
wwwroot

(3)创建网页目录和文件

[root@zbx-proxy nginx]# vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <mcb>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.25.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.25.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

(4)编写配置文件docker-compose.yml  

 [root@docker docker-compose_nginx]# vim docker-compose.yml

nginx:
    container_name: web01
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
     - 200:80
     - 201:443
    networks:
      mcb:
        ipv4_address: 172.18.0.13
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  mcb:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

(5)启动docker-compose.yul文件

[root@docker docker-compose_nginx]# docker-compose  -f docker-compose.yml up -d

[root@localhost compose_nginx]# docker-compose -f docker-compose.yaml up -d
# -f, --file FILE:使用特定的compose模板文件,默认为 docker-compose.yaml
# -p, --project-name NAME:指定项目名称,默认使用目录名称
# -d:在后台运行

 (6)访问检测:

 四 docker Compose 编写nginx+tomcat镜像

1 编写docker-compose.yul文件

version: '3'
services:
  nginx:
    container_name: web01
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
     - 200:80
     - 201:443
    networks:
      mcb:
    volumes:
      - ./wwwroot:/usr/local/nginx/html
tomcat:
    hostname: tomcat
    build:
      context: ./tomcat
dockerfile: Dockerfile
    ports:
      - 8080:8080
    networks:
      tm:
       ipv4_address: 172.18.0.18
networks:
  mcb:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

2 写tomcat容器的dokerfile文件 

[root@zbx-proxy compose_nginx]# vim Dockerfile 

FROM centos:7
MAINTAINER tomcat image <mcb>
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_291 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]

3 删除镜像 

 

4 删除network 

5 创建并运行 

总结

consul 部署

1 准备consul服务器(consul服务、Nginx服务、consul-template守护进程)和registrator服务器(registrator容器、Nginx服务)

2 consul服务器部署

解压安装包(.zip);设置代理,在后台启动 consul 服务端

3 registrator服务器部署

安装 Gliderlabs/Registrator;测试

启动consul后默认会监听5个端口:

8300:replication、leader farwarding的端口

8301:lan cossip的端口

8302:wan gossip的端口

8500:web ui界面的端口

8600:使用dns协议查看节点信息的端口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

conda环境安装的pyproj包报错

conda环境安装的pyproj包报错 文章目录 conda环境安装的pyproj包报错问题解决参考 问题 在conda创建的Python3.9虚拟环境中安装pyproj包3.6在运行时出现以下报错 UserWarning: pyproj unable to set database path. _pyproj_global_context_initialize()解决 先激活并进入创…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

从零开始学AI绘画,万字Stable Diffusion终极教程(二)

【第2期】关键词 欢迎来到SD的终极教程&#xff0c;这是我们的第二节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在第一节课里面&#xff0c;我们…

【数据库原理及应用】期末复习汇总高校期末真题试卷

试卷 一、填空题 1.________是位于用户与操作系统之间的一层数据管理软件。 2.数据库系统的三级模式结构是指________、________、________。 3.数据库系统的三种数据模型是________ 、________、________。 4.若关系中的某一属性组的值能唯一地标识一个元组&#xff0c;则…

【LinuxC语言】信号的基本概念与基本使用

文章目录 前言一、信号的概念二、信号的使用2.1 基本的信号类型2.2 signal函数 总结 前言 在Linux环境下&#xff0c;信号是一种用于通知进程发生了某种事件的机制。这些事件可能是由操作系统、其他进程或进程本身触发的。对于C语言编程者来说&#xff0c;理解信号的基本概念和…

使用 ORPO 微调 Llama 3

原文地址&#xff1a;https://towardsdatascience.com/fine-tune-llama-3-with-orpo-56cfab2f9ada 更便宜、更快的统一微调技术 2024 年 4 月 19 日 ORPO 是一种新的令人兴奋的微调技术&#xff0c;它将传统的监督微调和偏好校准阶段合并为一个过程。这减少了训练所需的计算…

8.MyBatis 操作数据库(进阶)

文章目录 1.动态SQL插入1.1使用注解方式插入数据1.2使用xml方式插入数据1.3何时用注解何时用xml&#xff1f;1.4使用SQL查询中有多个and时&#xff0c;如何自动去除多余and1.4.1方法一&#xff1a;删除and之后的代码如图所示&#xff0c;再次运行1.4.2方法二&#xff1a;加上tr…

C语言——文件相关操作

2.什么是文件 3.文件的打开和关闭 4.文件的顺序读写 5.文件的随机读写 6.文本文件和二进制文件 7.文件读取结束的判定 8.文件缓冲区 一、文件相关介绍 1、为什么使用文件 文件用于永久存储数据。通过使用文件&#xff0c;我们可以在程序关闭后保存数据&#xff0c;以便将来…

Springboot图片上传【本地+oss】

文章目录 1 前端组件页面2 本地上传3 上传到阿里云oss3.1申请开通账号&#xff0c;做好先导准备3.2 开始使用 1 前端组件页面 使用的VueElement组件 在线cdn引入&#xff1a; <script src"https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js"></script&…

Simulink|【免费】虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型

目录 主要内容 仿真模型要点 2.1 整体仿真模型 2.2 电压电流双闭环模块 2.3 SVPWM调制策略 2.4 无功电压模块 2.5 自适应控制策略及算法 部分结果 下载链接 主要内容 该模型为simulink仿真模型&#xff0c;主要实现的内容如下&#xff1a; 随着风力发电、…

免费APP分发平台 - 一个指南和解析

数字化时代的APP分发平台 随着数字化进程的加速免费APP分发平台 - 一个指南和解析&#xff0c;移动应用&#xff08;APP&#xff09;市场正迅速扩大。在这个充满竞争的市场中免费APP分发平台 - 一个指南和解析&#xff0c;一个优秀的APP分发平台能够帮助开发者和商家更有效地触…

用keras识别狗狗

一、需求场景 从照片从识别出狗狗 from keras.applications.resnet50 import ResNet50 from keras.preprocessing import image from keras.applications.resnet50 import preprocess_input, decode_predictions import numpy as np# 加载预训练的ResNet50模型 model ResNet5…

网络知识点之—QoS

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c; 是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

【matlab基础知识】(三)二维曲线绘制plot

x[-pi:0.0001:pi]; 选择较小步距 ysin(tan(x))-tan(sin(x));plot(x,y) 条件和函数值做一个点乘 x[-2:0.02:2];y1.1*sign(x).*(abs(x)>1.1)x.*(abs(x)<1.1);plot(x,y) 颜色&#xff0c;线形&#xff0c;曲线上的标志 由于0.01cosx波动太小&#xff0c;所以plotyy绘制多…

C语言 | Leetcode C语言题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; int minPathSum(int** grid, int gridSize, int* gridColSize) {int rows gridSize, columns gridColSize[0];if (rows 0 || columns 0) {return 0;}int dp[rows][columns];dp[0][0] grid[0][0];for (int i 1; i < rows; i) {dp[i…

【吃透Java手写】- Spring(上)-启动-扫描-依赖注入-初始化-后置处理器

【吃透Java手写】Spring&#xff08;上&#xff09;启动-扫描-依赖注入-初始化-后置处理器 1 准备工作1.1 创建自己的Spring容器类1.2 创建自己的配置类 ComponentScan1.3 ComponentScan1.3.1 Retention1.3.2 Target 1.4 用户类UserService Component1.5 Component1.6 测试类 2…

STM32——WWDG(窗口看门狗)

技术笔记&#xff01; 1.WWDG&#xff08;窗口看门狗&#xff09;简介 本质&#xff1a;能产生系统复位信号和提前唤醒中断的计数器。 特性&#xff1a; 递减的计数器&#xff1b; 当递减计数器值从 0x40减到0x3F时复位&#xff08;即T6位跳变到0&#xff09;&#xff1b; …

GPT-ArcGIS数据处理、空间分析、可视化及多案例综合应用

在数字化和智能化的浪潮中&#xff0c;GIS&#xff08;地理信息系统&#xff09;和GPT&#xff08;生成式预训练模型&#xff09;的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能…

OpenCV 实现重新映射(53)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 实现霍夫圆变换(52) 下一篇 :OpenCV实现仿射变换(54) 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 一个。使用 OpenCV 函数 cv&#xff1a;&#xff1a;remap 实现简…

mysql-sql-练习题-4-标记(排名 条件判断)

标记 标记找规律连续登录2-7天用户建表排名找规律 最大连胜次数建表多次排名 找规律输出更多数据 标记计数 百分比 标记找规律 连续登录2-7天用户 建表 create table continuous_login(user_id1 integer comment 用户id,date_login date comment 登陆日期 ) comment 用户登录…