高可用篇_A Docker容器化技术_V 基于DockerCompose实现容器编排

2024-03-13 11:44

本文主要是介绍高可用篇_A Docker容器化技术_V 基于DockerCompose实现容器编排,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原创作者:田超凡(程序员田宝宝) 

版权所有,引用请注明原作者,严禁复制转载

Docker Compose

Sit pre prd环境

为什么需要使用Docker Compose

Docker Compose  容器编排技术

容器编排技术

1.现在我们有一个springboot项目,需要依赖Redis、mysql5.7、nginx。

如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的

Docker compose实现容器编排技术。

基本的概念

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

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

开发一个springboot项目---大工程

  1. 依赖mysql
  2. 依赖redis
  3. 依赖zk

等。

需要在docker-compose.yml 配置项目工程依赖环境配置

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

Compose 中有两个重要的概念:

服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Docker-Compose分成三层

1.项目层 springboot项目依赖于我们的mysql redis、nginx等 一个项目是由多个容器组成的。

2.服务层  运行一个镜像的实例 ---

Compose环境安装(离线安装)

  1. 访问docker compose  github 官网
  2. docker-compose-Linux-x86_64 上传到服务器中,然后执行如下命令将其移动到/usr/local/bin/目录中 并且更名为docker-compose

mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

  1. 执行如下命令:添加可执行的权限

sudo chmod +x /usr/local/bin/docker-compose

  1. 验证docker-compose

docker-compose -v

Compose常用命令

docker-compose -h                           # 查看帮助

docker-compose up                           # 创建并运行所有容器

docker-compose up -d                        # 创建并后台运行所有容器

docker-compose -f docker-compose.yml up -d  # 指定模板

docker-compose down                         # 停止并删除容器、网络、卷、镜像。

docker-compose logs       # 查看容器输出日志

docker-compose pull       # 拉取依赖镜像

dokcer-compose config     # 检查配置

dokcer-compose config -q  # 检查配置,有问题才有输出

docker-compose restart   # 重启服务

docker-compose start     # 启动服务

docker-compose stop      # 停止服务

Compose入门案例

流程:

  1. 需要定义一个docker-compose.yml文件----工程
  2. 需要在docker-compose文件配置依赖服务
  3. docker-compose up 执行该文件

  1. 创建一个docker-compose.yml
  2. 定制docker-compose 内容;
  3. 运行 docker-compose up

version: '3.0'services:tomcat: ##服务名称image: tomcat:8 #镜像文件名称ports:- 8080:8080

Compose模板文件

version: '3.0'services:tomcat80: ##服务名称#container_name: tomcat8080 指定容器名称image: tomcat:8 #镜像文件名称 run imagesports###端口号的映射 -p- 8080:8080volumes: ## 数据源 宿主机与容器数据共享  -v- /usr/tomcat/webapps:/usr/local/tomcat/webappsnetworks###定义网络的桥- tcftomcat81: ##服务名称#container_name: tomcat8080 指定容器名称image: tomcat:8 #镜像文件名称ports###端口号的映射- 8081:8080volumes: ## 数据源 宿主机与容器数据共享- /usr/tomcat/webapps:/usr/local/tomcat/webappsnetworks:- tcfnetworks## 定义服务的桥tcf:


Compose常用命令

docker-compose ps  列出项目中所有的容器

docker-compose stop 停止docker-compose

docker-compose logs  查看容器中日志信息

docker-compose pull  拉取服务依赖的镜像

Compose常用配置

Image 镜像名称;

Build 根据docker file 打包 成镜像;

Context  指定docker file文件位置;

Commond 使用command可以覆盖容器启动后默认执行的命令;

Container_name 容器名称;

depends_on 指定依赖那个服务;

Ports 映射的端口号;

extra_hosts 会在/etc/hosts文件中添加一些记录;

Volumes 持久化目录;

volumes_from 从另外一个容器挂在数据卷;

Dns 设置dns

Compose部署springboot项目

定义Compose文件
version: "3.0"services:mysql: # mysql服务image: mysql:5.7command: --default-authentication-plugin=mysql_native_password #解决外部无法访问ports:- "3306:3306"      #容器端口映射到宿主机的端口environment:MYSQL_ROOT_PASSWORD: 'root'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'tcf'MYSQL_USER: 'tcf'MYSQL_PASSWORD: 'tcf'networks:- tcf_webtcf-web: #自己单独的springboot项目hostname: tcfbuild: ./     #需要构建的Dockerfile文件ports:- "38000:8080"      #容器端口映射到宿主机的端口depends_on:      #web服务依赖mysql服务,要等mysql服务先启动- mysqlnetworks:- tcf_webnetworks## 定义服务的桥tcf_web:

Spring项目配置
spring:profiles:active: prddatasource:url: jdbc:mysql://mysql:3306/tcf?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverserver:###端口号port: 8080servlet:##设置springboot项目访问路径context-path: /tcf

Docker可视化工具使用

Portainer

Portainer是一款Docker可视化管理工具,允许我们在网页中方便的查看和管理Docker容器。

要使用Portainer很简单,运行下面两条命令即可。这些命令会创建一个Portainer专用的卷,然后在8000和9000端口创建容器并运行。

启动:

docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

CentOS Docker 安装

docker rm $(docker ps -aq)

docker stop $(docker ps -q) & docker rm $(docker ps -aq) ---删除所有的容器

docker rmi $(docker images -q)

docker network ls

Linux关闭防火墙命令

systemctl stop firewalld

本文部分素材转载自蚂蚁课堂

这篇关于高可用篇_A Docker容器化技术_V 基于DockerCompose实现容器编排的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804760

相关文章

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco