资讯专栏INFORMATION COLUMN

尝试将正式服务迁移至docker中并管理的一次实践

EdwardUp / 1179人阅读

摘要:选择是因为朋友公司在使用,部署以及管理都很方便,所以参考了他的推荐选择了。因为也是第一次尝试将服务迁到。原因容器并不认为这个文件是它自己的,严格来说这个文件应该是属于宿主机的。

一、前言

我自己都对我自己博客记录的次数太少感到无语了~...

目前公司是没有使用docker的,因而自己希望对此作出改变,将服务都部署到docker容器中。

在这里是有几个方面是要考虑的:
1.怎么去部署docker容器?
2.对于镜像和容器该怎么去统一管理?
3.使用docker发生线上故障该如何排查处理?
4.使用docker的时候有哪些方面需要注意的?

因为以前的公司也没有使用过docker,所以这次算是摸石头过河~

二、怎么去部署docker容器

部署docker容器有多种方式:

1.使用jenkins + git自动化部署(当然了我们公司运维都没有。。只能靠自己打包放服务器部署了)
2.使用maven的docker 插件打包成镜像(大致是这样。。)
3.创建好一个包含java环境的镜像,将某个文件夹挂载到容器上,后续更新服务的时候直接丢jar包到这个文件夹中重启容器就可以了

在这里我采用第三种方式。

在这里我编写了一个较简单的Dockerfile 去构建镜像:

FROM java:8

VOLUME /tmp

WORKDIR /app

RUN bash -c "touch /app/app.jar"

EXPOSE 9110

ENTRYPOINT ["java", "-jar", "/app/bigdata-1.0.jar", "&"]

编写后使用构建镜像命令:docker build -t xxx . (XXX为要构建的镜像名 注意最后的一个 .要加上)

如果需要暴露多个端口,比如开放JMX端口,则加在EXPOSE中

然后启动容器:docker run --name docker-bigdata -d -v /mnt/bigdata/docker-bigdata:/app -p 9110:9110 bad1deaec0b1

将jar包和外置配置的Config目录一起放在docker-bigdata目录里,挂载到容器的/app目录上,容器启动的时候会自己执行Dockerfile中的命令。

到这里的时候服务已经启动成功了。

三、怎么去管理docker中的容器或镜像

使用可视化的UI界面管理。这里有几个选择:

1.k8s
2.swarm
3.portainer

当然了还有其他工具可以选择。

在这里我们首选k8s,因为它可以做到一些更精细化的操作。但是因为学习成本太高,以及服务太少,这里我们略过选择。
swarm是最贴合docker的,服务比较少的时候选择swarm是不错的选择,但是因为自己了解的比较少,所以不作选择。
选择portainer是因为朋友公司在使用,部署以及管理都很方便,所以参考了他的推荐选择了portainer。

portainer的使用非常简单:

1.docker上面有portainer的镜像,可以直接拉取下来

2.使用命令:docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer docker.io/portainer/portainer

这里--restart=always设置关闭后总是会自动重启,至于挂载/var/run/docker.sock:/var/run/docker.sock是必须的,不然进入UI界面的时候会提示你挂载。

3.启动成功后,使用http://ip:port 直接登录,第一次登录会设置账号和密码。
在这里应该注册个域名,将ip+port的访问方式屏蔽掉。

这是portainer的管理界面,可以很方便的管理镜像和容器,可以看到容器的运行状况(是否运行以及CPU等状况),实时日志,容器信息,甚至还可以以命令行方式进入容器,具体一些管理操作等待后面熟悉。

在查看容器运行的日志时,发现容器和宿主机的时间不一致,有刚使用docker的朋友应该注意一下。在Dockerfile中补上这段配置:

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
四、使用docker发生线上故障该如何排查处理或有哪些方面需要注意的?

其实我也不是很清楚。。。因为也是第一次尝试将服务迁到docker。
如果发生问题,如容器挂掉,则关注容器日志以及及时重启。
要更新服务,则到挂载的宿主机目录里面更新jar包然后重启容器就可以了。

在这里遇到问题:
1.容器时间与宿主机问题不一致,在上面已经写了怎么解决。

2.不能像之前一样指定输出控制台日志到某个文件中,如java -jar xxx.jar >log 2>&1 & 是不行的。在Dockerfile中用ENTRYPOINT重定向输出日志文件是不行的。原因:容器并不认为这个文件是它自己的,严格来说这个文件应该是属于宿主机的。

我觉得可以通过将启动命令放置在脚本中,如:java -jar xxx.jar >log 2>&1 & ,将脚本挂载进容器,在Dockerfile中运行脚本文件,这样子jar包启动的时候就会将控制台输出到log文件中,然后通过挂载显示出来到宿主机中,方便问题排查。

现在正处于初步使用阶段,如有后续问题我会继续关注写出来。如有在使用docker中遇到那些坑的朋友,欢迎留言讨论~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74842.html

相关文章

  • 尝试正式服务迁移docker中并管理一次实践

    摘要:选择是因为朋友公司在使用,部署以及管理都很方便,所以参考了他的推荐选择了。因为也是第一次尝试将服务迁到。原因容器并不认为这个文件是它自己的,严格来说这个文件应该是属于宿主机的。 一、前言 我自己都对我自己博客记录的次数太少感到无语了~... 目前公司是没有使用docker的,因而自己希望对此作出改变,将服务都部署到docker容器中。 在这里是有几个方面是要考虑的:1.怎么去部署doc...

    explorer_ddf 评论0 收藏0
  • 拉勾网基于 UK8S平台的容器化改造实践

    摘要:宋体本文从拉勾网的业务架构日志采集监控服务暴露调用等方面介绍了其基于的容器化改造实践。宋体此外,拉勾网还有一套自研的环境的业务发布系统,不过这套发布系统未适配容器环境。写在前面 拉勾网于 2019 年 3 月份开始尝试将生产环境的业务从 UHost 迁移到 UK8S,截至 2019 年 9 月份,QA 环境的大部分业务模块已经完成容器化改造,生产环境中,后台管理服务已全部迁移到 UK8...

    CoorChice 评论0 收藏0
  • 五阿哥钢铁电商平台Docker容器云平台建设实践——你想知道的都在这里!

    摘要:容器云架构方案。容器云架构方案基于容器技术,运维技术团队开发了五阿哥网站的容器云平台。多云对接私有云和公有云进行统一托管,包含网络区域配置,实例开通及的环境初始化配置等。技术选型及实践镜像标准众所周知,的镜像是分层的。 前言 五阿哥钢铁电商平台(www.wuage.com)是由钢铁行业第一的中国五矿与互联网第一的阿里巴巴联手打造,并充分运用双方股东优势资源,即:阿里巴巴在大数据、电商运...

    jeffrey_up 评论0 收藏0
  • Docker相关的项目

    摘要:相关基于项目和项目,并遵循应用的十二因素风格。相关在设计上,项目尽量保持驱动和模块化,以便模块支持不同的实现方案。相关不仅可以管理众多虚拟机,其计算服务还支持对的驱动,管理引擎的子项目还可用于通过模板管理容器。现已整合公司所支持的项目。 整理自《Docker技术入门与实践》 PaaS(Platform as a Service) PaaS 是希望提供一个统一的可供所有软件直接运行而无需...

    littlelightss 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<