Docker+Rancher构建部署流水线

工作多年,在项目部署方面,

1:以前用ftp或者rz上传更新的,每次更新算上打包、目录切换、更新遗漏、备份、出错还原、启动等工作都得搞上一来小时甚至更长,要是多两台服务器那心都凉了;

2:后来有用svn或者git的,服务器上拉取的是编译后的包或目录;

3:再到现在用jenkins实施自动化构建部署的,配置好jenkins的流水线之后,以后每次代码提交后只需要点击一个按钮即可;

方式3个人感觉已经很不错了,很方便,还有jenkins+docker的方式等等,这里不做对比,记录目前使用的部署方式:Dockerfile

流程介绍

1、准备alpine镜像,制作带jdk、mvn环境 以及项目lib包,mvn本地仓库依赖、系统插件等,制作出基础镜像

2、使用阿里云容器镜像服务,上传基础镜像,设置构建规则

3、项目代码中加入Dockerfile,逻辑是复制源码到基础镜像生成的容器,执行mvn编译打包,移动项目启动包到指定路径,此处可使用多阶段构建减少镜像体积,最后设置容器启动的脚本

准备工作

//安装docker
yum -y install docker-io

//启动
service docker start

//设置开机启动
chkconfig docker on

{
"registry-mirrors": [""]
}

登录阿里云 容器镜像服务->镜像加速器-->加速器地址

文件地址 /etc/docker/daemon.json

重启服务即可

首先说一下docker部署项目的好处:

1、隔离性安全性(无需担心外界对容器系统的影响,当然也有比较特殊的情况,后面会说到)
  那么隔离性的优势在实际项目中体现在哪里呢?

  :在分布式环境中,一个服务器中可能存在多个相同的服务(端口相同),或者多个不同环境的服务(比如jdk7,jdk8,php,python等)存在于同一个服务器中,隔离性使他们之间不会出现冲突!

  :因为隔离,所以单个容器的崩溃不会影响其他服务的运行,每个容器可分配合适的系统资源(包括CPU、内存和磁盘空间)

2、移植性

  windows、linux都能跑,其他的环境还没用到就不列出来了

3、版本控制和持续集成

  结合其他插件,可以轻松做好整一个项目部署流程,包括编译、打包、更新发布、回滚等等

4、成本低

  正式因为上述的好处以及docker在资源分配上的优势,使用docker成本低,效果好

那么使用docker要提前考虑那些或者是注意那些方面的事情呢:

1、镜像的大小问题:像springboot这种项目的运行需要基于jdk环境的linux或者windows系统,那么这个基础镜像的大小就是一个大问题了

linux系统我们使用alpine,带jdk环境的我使用dockerhub上面处理好的 https://hub.docker.com/r/anapsix/alpine-java ,也可以自己根据官网镜像加工处理

2、编译打包的问题:我直接在制作镜像的时候给系统安装maven,使用mvn完成编译打包

3、最后最关键的是管理工具的问题:优秀的管理工具能减少我们90%的工作量,我使用Rancher,默认自带cattle,当然还有其他编排工具 可使用k8s

这里介绍两个管理工具Portainer和Rancher,单机版小项目或者测试可以试一下前者,生产环境我用的是Rancher

Docker界面化管理Portainer(我这里是在Win10系统上的操作)

docker pull portainer/portainer

//启动
docker run -d -p 9000:9000 --restart=always --name prtainer-test portainer/portainer

注意:在win10上安装的docker处于虚拟机的环境,所以需要选择remote的方式进行连接,首先打开2375端口

输入命令测试

Test-NetConnection -ComputerName localhost -Port 2375

测试通过

浏览器访问http://127.0.0.1:9000

创建用户后,选择remote环境,填写Endpoint URL docker.for.win.localhost:2375,

 如下所示就是正常的

 对容器或镜像的操注意别把portainer相关的删了

 由于我在使用自建带密码的Registries时无法通过验证,只能放弃Portainer,Shipyard网上评价比较高,但是停止维护了,在作者的github的首页有推荐Rancher、dockerui和Portainer

那下面我就切换到Rancher

docker pull rancher/server 

docker run -d --restart=always -p 8089:8080 rancher/server

 容器已启动,大概要等几十秒才能访问http://localhost:8089

第一步配置用户

然后改一下主机注册地址,不要用localhost或者127.0.0.1 改成内网ip,保存

接着添加主机

第4步 我填的是内网IP,目前生产环境用宿主机内网IP一切正常, (或许用公网IP能有其他用处,比如跨外网的容器连接,我还没试)

第5步按提示操作即可,

从阿里云拉取镜像,首先在镜像库配置账号信息,然后新建容器,注意“选择镜像”填的是阿里云镜像服务中“公网地址:镜像版本号”,如果是同地域的可以用专用网络或者经典网络地址

大项目用Rancher,功能非常强大,服务编排、升级、回滚、扩容、调度,如同神器

 附上文档地址:https://rancher.com/docs/rancher/v1.6/zh/

我遇到需要注意的问题

1、如果Dockerfile中RUN mvn编译项目出现以下错误:

unmappable character (0xE4) for encoding US-ASCII 

解决办法:

在Dockerfile中加上

ENV LANG en_US.utf8

 2、Dockerfile 做的镜像带CMD启动脚本的情况   一启动就关闭

CMD执行脚本 本质上是用了 /bin/sh -c,因为这是容器的主进程,所以当脚本执行完之后容器就会退出。那么可以在脚本的最后加上tail -f /dev/null

3、Alpine安装配置jdk无法成功

网友表示Alpine缺少glibc,我没有去深入研究,而是直接用dockerhub上面已经处理好的镜像,后来在处理其它容器环境的时候也遇到这个问题

#alpine 安装gcc
apk add --no-cache gcc g++
#其他常用库
apk add jpeg-dev zlib-dev

4、镜像体积优化

使用多阶段构建方法

5、注意看Rancher的文档

比如网络模式注意要选择“托管” 才能使用到大部分的功能,标签的合理使用,负载均衡的扩展数量限制问题,默认网段10.42.0.0/16 等等

6、容器之间通信失败

看 healthcheck那几个系统服务是否有正常运行,一般正常的话就不会有问题。

另外有几点要注意:

    阿里云文档表示同一个安全组内网互通;

    同一安全组内网、不同主机之间的访问,rancher负载均衡的端口不需要在防火墙上打开,而宿主机上的应用(比如redis)却需要在防火墙上打开;

7、这是一个神坑,当防火墙改动后,容器与容器之间、宿主机与容器之间无法通信(正式环境千万别在白天使用期间尝试),不知道是Rancher的问题还是docker的问题(后面还发现有台服务器中了挖矿病毒,,)

解决办法:重启docker服务,反正有一些奇怪的错误出现时可以试试重启docker服务,另外检查下是不是主机的问题!

8、多次测试感觉,在rancher的负载均衡下,配置高的主机优先级会很高,重启低配置主机的时候系统几乎感觉不到卡顿,反过来就不一样了

9、rancher代理冲突问题:如果你用包含rancher代理的镜像安装到另一台主机上,那么原本的主机 '执行命令行' 会一直在 '连接中' 的状态,需要重新走代理注册的命令

 最后再记录一下测试通信问题的命令

//alpine安装telnet
//加速
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
//安装
apk add busybox-extras

telnet xxx 
//什么都没显示一般都是通的

apk add curl

//查看外网IP
curl ipinfo.io/ip

 转载请注明博客出处:http://www.cnblogs.com/cjh-notes/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据引用中的内容,搭建Docker Rancher环境的步骤如下: 1. 准备工作,包括安装apt-get和ssh,修改下载源地址。 2. 安装Docker,并使用Docker安装MySQL和Rancher。 3. 进行Docker的操作,包括镜像操作和卸载Docker。 4. 连接到不同的镜像仓库,包括Docker官方的镜像仓库和阿里云镜像仓库。 根据引用中的内容,在搭建Rancher环境之前,需要规划好两台服务器的IP地址,并在其中一台服务器上安装RancherDocker,在另一台服务器上安装DockerDocker-compose。 根据引用中的内容,搭建Rancher环境的具体步骤如下: 1. 在已安装Docker的基础上启动Rancher服务器。Rancher服务器是一个Docker镜像,因此不需要额外安装软件,只需执行Docker命令下载并成功运行Rancher服务器镜像。 2. 启动容器并指定端口,如果没有rancher/server镜像,会自动下载。可以通过执行命令docker run -d --restart=always -p 8080:8080 rancher/server来查看镜像和容器的运行情况。 综上所述,搭建Docker Rancher环境的步骤包括准备工作、安装Docker、安装MySQL和Rancher、进行Docker操作、连接到不同的镜像仓库以及启动Rancher服务器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker+rancher环境搭建及rancher的使用](https://blog.csdn.net/qq_42268472/article/details/126798628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker+Rancher+Harbor搭建全过程](https://blog.csdn.net/sql_ican/article/details/81945023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广州程序佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值