目录
Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方教程,因为本系列教程对前一章节有一定依赖,建议先学习前面章节内容。
本系列教程导航:
Docker深入浅出系列 | 容器初体验
Docker深入浅出系列 | Image实战演练
Docker深入浅出系列 | 单节点多容器网络通信
Docker深入浅出系列 | 容器数据持久化
Docker深入浅出系列 | 单机Nginx+Springboot实战
教程目的:
1.下载mysql
2.下载nginx
3.克隆credit-facility-service
作为后面部署演示使用,使用docker
分支
4.虚拟机、centos和docker环境安装请查看第一章,本章默认已经安装好centos和docker
Docker深入浅出系列 | 容器初体验
Docker Compose是一个用于定义和运行多容器应用程序的工具。 通过compose,我们可以使用yaml文件来配置应用程序的服务,然后使用一个命令来创建和启动所有已配置的服务。 在微服务环境中进行本地开发测试时,我们经常使用此工具。 它也是轻量级的,只需要简单的配置。 您可以预先配置所需的环境和服务,然后专注于当前开发的服务,而不必管理开发时如何运行每个服务的方式。
***
首先,我们回顾前一章,我们要部署一个微服务项目,需要手动配置一堆命令,十分繁琐,假如有几十上百个容器,并且容器之间还存在依赖,光是忙着搭建容器都耗掉一天了,还谈什么Devops,那有没有什么方便快捷的组建,可以让我们通过一个配置就搞定容器编排和运行呢?
Docker compose就是为了简化多容器配置和管理工作而生的,可以简化大量重复的手动工作,具有以下主要特点:
docker-compse up
可以按照依赖关系启动所有服务docker-compose down
停止所有服务--scale
进行扩容Docker Compose的考虑理由:
docker-compose up
,然后使用docker-compose down
轻松将其拆解。 这使我们的开发人员可以将开发环境保持在一个中立位置,并帮助我们轻松地部署应用程序。单主机部署:
传统上,Compose专注于开发和测试,但现在可用于在单个主机系统上进行部署和管理容器的整个部署过程。
开发环境:
Compose提供了在孤立的环境中运行应用程序的能力,该环境可以在安装了Docker的任何计算机上运行。 这使测试你的应用程序变得非常容易,并提供了一种尽可能接近生产环境的工作方式。
Compose文件管理应用程序的所有依赖项(数据库,队列,缓存等),并且可以使用单个命令创建每个容器。
自动化测试环境:
持续集成和整个开发过程的重要组成部分是自动化测试套件,该套件要求可以在其中执行测试的环境。 Compose提供了一种方便的方法来创建和销毁与您的生产环境接近的隔离测试环境。
可以参考官网:Docker Compose安装
1.下载当前稳定版本,选择对应系统版本,我这里用的是Centos
通过官方下载
通过国内源下载
bash sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2.赋予可执行权限
通过Compose,我们开发人员可以通过应用在docker-compose.yml文件中声明的许多规则轻松地一次处理多个Docker容器。
它由多个层级组成,这些层级使用制表符或空格分隔,而不是大多数编程语言中已知的括号。 几乎每个Compose-File应该具有以下四个主要方面:
Version
Services
Volumes
network
docker-compose.yml 示例:
以上文件包含整个Wordpress应用程序,包括MySQL数据库。 这些服务中的每一个都被视为一个单独的容器,可以在需要时进行添加或删除
我是怎么知道这些命令怎么使用?
详细的配置参数,可以查阅: 官方配置参数
查看docker-compose的基本操作命令,可以通过docker-compose --help
进行查看,很多命令其实是跟docker相似
相信大家都已经看过上一章,如果大家还没有看过,请先回到上一章节教程。
在上一章,我们通过手动方式,一步步搭建了Nginx、Mysql以及额度服务,相信大家都体会到整个流程非常繁琐,有一部出错了,都要重新敲一遍指令,在本章我们沿用上一章的环境配置,但是整个过程会通过docker compose来帮我们自动部署而不是手动部署。
168.18.0.0/24
credit-facility-volume
,用于持久化Mysql容器数据1.如果上一章已经创建好了容器,先清理上一章已经创建的容器,避免冲突
2.清理上一章创建好的网络credit-facility-net
3.核对下当前Centos系统上credit-facility
目录下的文件是否跟我一致,如果不一样,请先查看上一章
我们上一章创建好的文件应该是以上三个
1.上传credit-facility-service
项目里的docker-compose.yml
文件到Centos系统credit-facility
目录下,如果还没克隆额度服务到本地,请查看前期准备
docker-compose.yml
文件存放在credit-facility-service
项目dockerfile
目录下
这时候会多了一个docker-compose.yml
文件
PS: 如果在前面章节没有创建额度服务镜像,这里需要先创建credit-facility-image
镜像:
2.通过docker config
校验compose文件,如果文件格式有问题,通过该命令可以帮你校验并输出错误信息
这里可以看到,我们的配置文件检验通过,接下来我们分段拆解来说明下每一段脚本的意思
配置网络
跟前面一样,这里创建了一个自定义网络credit-facility-net
,指定了docker的网络模式是bridge
,划分了一个子网ip段168.18.0.0/24
,跟前一章手动配置对应的命令如下:
配置Mysql容器
credit-facility-db
mysql
,如果指定的image不存在,它会自动从远程仓库下载credit-facility-volume
,并且分配读写权限db_credit_facility
,数据库root用户密码为evan123
credit-facility-net
,分配静态IP 168.18.0.4
上面的compose文件配置对应前一章的手动配置命令如下:
配置额度服务集群
核心配置:
credit-facility01
、credit-facility02
和credit-facility03
docker-compose
启动时会按照依赖关系来启动credit-facility-net
,并对三个实例分别分配了静态ip168.18.0.10
、168.18.0.11
和168.18.0.12
大部分命令跟前面一样,所以这里不作重复讲解。这里对应前一章的手动配置命令如下:
这里沿用上一章在credit-facility
目录下创建的dockerfile:
配置Nginx服务
核心配置:
credit-facility-nginx
/etc/nginx/nginx.conf
文件映射到宿主机/usr/local/credit-facility/nginx/nginx.conf
,这里的nginx配置沿用上一章的配置不变,宿主机的配置会自动覆盖容器的nginx.conf文件168.18.0.5
大部分命令跟前面一样,所以这里不作重复讲解。这里对应前一章的手动配置命令如下:
这里沿用上一章的Nginx配置/usr/local/credit-facility/nginx/nginx.conf
:
这里是通过容器名称访问,因此不需要管每个容器的ip是多少
4.通过docker-compose up
启动所有服务
通过docker-compose
命令,会按照我们在docker-compose.yml配置的信息去创建和启动服务,并且把日志打印到控制台输出,这里因为日志太多,只截取了部分日志,只要日志没有报错信息,所有服务到这里已经搭建完成
1.验证Nginx服务是否已经成功,这里需要通过宿主机ip+映射端口访问
先查看下当前centos机器的ip
从上面可以看到,宿主机外网ip是192.168.101.23
在本机浏览器输入192.168.101.23
进行验证
Nginx服务已经启动成功
2.验证额度服务是否成功访问
3.验证额度服务接口是否可以处理成功
在验证额度服务前,需要先把表创建好,把credit-facility-service
下的db script在DB里执行
进入到Mysql容器,把表创建sql放进去执行
输入下面请求数据测试接口
4.进去数据库查看是否已经保存数据成功
在互联网公司比较场景,经常会遇到服务器资源不足,特别是遇到节假日公司要搞活动,需要临时扩容增大服务的计算能力,假如我们公司已经用上docker,docker-compose
就可以帮我们很简单做到服务器扩容,当然,docker-compose
很少直接在生产上独立使用,更多是在开发测试环境,后面讲解k8s的时候会介绍生产上如何做到弹性扩容。
接下来,我们只需要通过简单的命令就可以实现弹性扩容
1.对于前面我们创建的docker-compose.yml做一点改动,加入一个新的服务定义,如下
这里指定了容器端口是8080,但是没有配置宿主机端口映射,网络也加入到credit-facility-net
Nginx也需要调整下,把静态ip去掉,并且加上依赖,避免ip冲突,docker会自动分配一个静态ip
在这里我复制了一份credit-facility-service
配置,为了方便演示,我去掉了网络配置和端口映射,因为如果想使用弹性扩容,端口和ip不能固定,否则会启动失败,改造后完整的配置如下:
2.执行以下命令,对web服务进行弹性扩容,创建三个容器实例
从上图可以看到,web服务对应的容器实例已经创建成功,它的命名方式是基于dockerfile里面的Label名称+_web_<实例序号>
。
3.通过docker-compose ps
查看下当前已启动的容器
这里可以看到,我们配置的所有容器都启动成功,并且新增了三个web容器实例
4.通过docker-compose logs web
可以查看web服务每个实例的日志
5.修改下nginx.conf的配置,改为新的web容器名称,注释掉我们原来的credit-facility容器
6.重启nginx服务
7.通过Postman测试WEB服务
请求Url输入你宿主机ip,请求方式是POST
,在请求body输入以下请求数据:
Docker Compose官方文档:官方文档
Demo项目地址:Demo下载
1.docker-compose up
启动报错
解决方案:
这是因为缺少Volume声明,在docker-compose.yml
按如下配置(上文的配置文件已经配置好)
2.credit-facility-service
在服务器上启动报错
先确定你是否已经切换到docker
分支,并且本地构建可以成功,然后再打包部署
__EOF__
Docker深入浅出系列 | Docker Compose多容器实战
原文:https://www.cnblogs.com/lonelyxmas/p/12514981.html