微服务自动化管理【docker compose】

news/2024/11/7 16:51:30/

1.什么是docker-compose

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排
通过编写docker-compose文件可对多个服务同时进行启动/停止/更新(可定义依赖,按顺序启动服务)

docker-compose将所管理的容器分为3层结构:
project 1 一个微服务项目
service (服务) N 由N个微服务组成
container(容器) N 而每个微服务又由N个节点组成

docker-compose.yml组成一个project,project里包括多个service,每个service定义了容器运行的镜像(或构建镜像),
网络端口,文件挂载,参数,依赖等,每个service可包括同一个镜像的多个容器实例。
即 project 包含 service ,service 包含 container

注1:Docker-Compose的工程配置文件默认为docker-compose.yml
注2:compose英文意思:组成

2.为什么要使用docker-compose

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。
然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,
那么效率之低,维护量之大可想而知

。而使用 Docker Compose 可以轻松、高效的管理容器,
它是一个用于定义和运行多容器 Docker 的应用程序工具。

注1:images/01 docker与docker-compose区别.jpg

使用compose基本上是一个三步过程:
1)用dockerfile,或者镜像定义应用程序的环境,以便在任何地方复制。
2)在docker-compose.yml中定义组成应用程序的服务,以便它们可以在单独的环境中一起运行。
3)运行docker compose up启动并运行整个应用程序。

3.docker-compose安装与配置

1.安装方式有3种
官网的方式去安装
pip进行安装
离线安装(本章介绍),官网下载速度太慢了,离线方式更快


2.离线安装

#1.下载安装文件
访问https://github.com/docker/compose/releases,下载 docker-compose-Linux-x86_64,我是复制链接地址,
在迅雷中下载的,下载后,将docker-compose-Linux-x86_64重命名为docker-compose

#2.将刚才下载的docker-compose文件上传到centos7的/usr/local/bin/目录下
cd /usr/local/bin
rz

#3.添加可执行权限
chmod +x /usr/local/bin/docker-compose

#4.通过查看版本,测试安装是否成功
docker-compose -v
#查看所有命令
docker-compose -h

4.docker-compose.yml配置文件基本介绍

1.version:指定 docker-compose.yml 文件的写法格式
注1:Compose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。

2.services:多个容器集合
services:
容器1:
容器2:

3.image:镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像

4.build:服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器

build:./eureka-server-peer1  #创建镜像,会自动执行当前目录下的eureka-server-peer1文件夹下的Dockerfile注1:build都是一个目录,如果要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定。
注2:如果同时指定image和build两个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。

5.hostname:启动高可用(集群)微服务时,必须与代码配置中的spring.profiles属性一致。例如:peer1、peer2等
hostname:peer1/peer2/consumer1/consumer2

6.network_mode:配置服务容器的网络模式
network_mode:“bridge”
network_mode:“host”
network_mode:“none”
network_mode:“service:[service_name]”
network_mode:“container:[container name/id]”

7.environment:环境变量配置,可以用数组或字典两种方式
environment:
RACK_ENV: development
SHOW: ‘ture’
-------------------------
environment:
- RACK_ENV=development
- SHOW=ture

5.docker-compose命令

1)docker-compose up:构建并启动容器
#启动单个服务:
docker-compose up 服务名称 #服务名称来自于docker-compose.yml中services指定的容器服务名
#启动多个服务:
docker-compose up
#后台启动服务
docker-compose up -d

2)docker-compose down:停止和删除容器、网络、卷、镜像

3)docker-compose start [服务名称]:启动指定服务或启动所有服务

4)docker-compose stop [服务名称]:停止指定服务或停止所有服务

5)docker-compose ps:列出所有运行容器

6)docker-compose exec:进入指定容器

参数:
-d 分离模式,后台运行命令。
–privileged 获取特权。
-user USER 指定运行的用户。
-T 禁用分配TTY,默认docker-compose exec分配TTY。
–index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务。

例如:docker-compose exec --index=1 web /bin/bash或者/bin/sh ,web服务中包含多个容器

7)docker-compose rm:删除所有(停止状态的)服务容器。

参数:
-f:强制直接删除,包括非停止状态的容器
-v:删除容器所挂载的数据卷

8)docker-compose config -q:验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。

6.综合示例:docker-compose部署nginx,挂载外置配置文件及项目

1.docker、docker-compose安装
2.自定义配置文件nginx.conf(参考之前我的文章)
Docker之安装nginx
3.在docker主机上新建/docker-compose/nginx
mkdir -p /docker-compose/nginx && cd /docker-compose/nginx
4.在/docker-compose/nginx目录下创建并编辑docker-compose.yml
vim docker-compose.yml

version: '3'
services:web:#定义主机名container_name: mynginx#使用的镜像image: nginx#容器的映射端口ports:- 80:80#定义挂载点volumes:- /data/nginx/html:/usr/share/nginx/html- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /data/nginx/log:/var/log/nginx#指定容器网络networks:- mynet#docker 重启后,容器自启动restart: always
networks:mynet:driver: bridge

5.后台启动服务
docker-compose up -d


附录一:docker-compose卸载

$ rm /usr/local/bin/docker-compose
注:docker-compose卸载只需要删除二进制文件就可以了

附录二:docker-compose.yml配置文件介绍(补充)

1)ports:对外暴露的端口定义,和expose对应。例如:“宿主机端口:容器暴露端口”

ports:“7101:7101”

2)volumes:挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式。

volumes:
#只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)
- /var/lib/mysql

#使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql

#已经存在的命名的数据卷
- datavolume:/var/lib/mysql

3)entrypoint:在Dockerfile中有一个指令叫做ENTRYPOINT指令,用于指定接入点。在docker-compose.yml中可以定义接入点,覆盖Dockerfile中的定义。

entrypoint:[“java”,“-jar”,“eureka-server-cluster.jar”,“–spring.profiles.active=peer1”]

附录三:docker-compose命令(补充)

1)docker-compose build:构建(重新构建)项目中的服务容器

2)docker-compose create:为服务创建容器

参数:
-force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
-no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
-no-build:不创建镜像,即使缺失
-build:创建容器前,生成镜像

3)docker-compose version:打印版本信息。

4)docker-compose logs [服务名称]:查看容器输出日志

#查看nginx的日志
docker-compose logs nginx
#查看nginx的实时日志
docker-compose logs -f nginx

附录四:配置虚拟机防火墙允许访问测试

$ firewall-cmd --zone=public --add-port=7101/tcp --permanent
$ firewall-cmd --reload

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。
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来进行编排管理


http://www.ppmy.cn/news/11481.html

相关文章

连接查询入门

1、什么是连接查询? 从一张表中查询数据,称为单表查询。 多张表联合起来查询数据,称为连接查询。在实际开发中一般一个业务会对应多张表,所以连接查询使用较多。 2、连接查询的分类: 根据语法的年代分类:SQL92(1992年出…

行云创新受邀出席2023中国(深圳)阿联酋(迪拜)经贸合作交流会

1月10日,2023中国(深圳)-阿联酋(迪拜)经贸合作交流会成功举办。本次交流会充分展示了深圳和迪拜两地城市营商环境和政策优势,并围绕科技创新、数字经济、港口物流等领域发展经验展开分享,来自两…

从零开始带你实现一套自己的CI/CD(四)Jenkins Pipeline流水线

目录一、简介二、Groovy2.1 HelloWorld2.2 Pipeline script from SCM三、Jenkinsfile3.1 拉取代码3.2 代码质量检测3.3 构建代码3.4 制作镜像并发布镜像仓库3.5 部署到目标服务器3.6 完整的Jenkinsfile3.7 参数配置3.8 通过参数构建四、添加邮件通知4.1 配置Jenkins邮件配置4.2…

CAD转换PDF怎么转换?新手必备的方法

相信很多从事建筑类的相关工作的小伙伴们对CAD文件都并不陌生,在设计图纸和数据更改大都是使用这类文件的专业工具。这类文件的专业性较强设计出来的图纸也比较规范,但就有一个问题比较麻烦,那便是在不同设备打开需要对应的查阅软件&#xff…

『 MySQL篇 』:库操作、数据类型

目录 目录 一、初识数据库 数据库 数据库管理系统 SQL语言 二、详解MySQL MySQL 存储引擎 三、简单的库操作 设置数据库的编码字符集 创建数据库 显示数据库 使用数据库 删除数据库 四、MySQL数据类型 数值类型 字符串类型 日期类型 一、初识数据库 学习 MyS…

为什么 TCP 建立连接需要三次握手

TCP 协议是我们几乎每天都会接触到的网络协议,绝大多数网络连接的建立都是基于 TCP 协议的,学过计算机网络或者对 TCP 协议稍有了解的人都知道 —— 使用 TCP 协议建立连接需要经过三次握手(three-way handshake)。 如果让我们简…

DMIPS, FLOPS, OPS概念

DMIPS DMIPS(Dhrystone Million Instructions executed Per Second):Dhrystone是测量处理器运算能力的最常见基准程序之一,常用于处理器的整型运算性能的测量。Dhrystone是一种整数运算测试程序。换句话说,就是使用Dhrystone这种程序在不同的…

【Python】如何使用python将一个py文件变成一个软件?

系列文章目录 这个系列文章将写一些python中好玩的小技巧。 第一章 使用Python 做一个软件 目录 系列文章目录 前言 一、第一步:写好文件 二、第二步:生成程序 1.安装库 2.使用安装的库进行转化 总结 前言 本文重点说如何将py文件转化为exe文件…