当前位置: 首页 > Linux

一个尝试将官方服务迁移到docker上并进行管理的实践

时间:2023-04-06 21:05:51 Linux

1.前言我无语了,因为我自己博客上的记录太少了~...公司目前没有使用docker,希望能Make此处更改为将服务部署到docker容器中。这里有几个方面需要考虑:1.如何部署docker容器?2、如何统一管理镜像和容器?3、使用docker时线上故障如何排查和处理?4、使用docker需要注意哪些方面?因为之前的公司没用过docker,所以这次是摸着石头过河~二、如何部署docker容器docker容器的部署方式有很多种:1、使用jenkins+git自动化部署(当然,我们公司的运维都是No.。只能靠自己打包和服务器部署)2.使用maven的docker插件打包成镜像(大致是这样的。。。)3.创建镜像包含java环境并挂载某个文件夹到容器上面,以后更新服务的时候,把jar包丢到这个文件夹里,重启容器即可。这里我使用第三种方法。这里我写了一个比较简单的Dockerfile来构建镜像:FROMjava:8VOLUME/tmpWORKDIR/appRUNbash-c"touch/app/app.jar"EXPOSE9110ENTRYPOINT["java","-jar","/app/bigdata-1.0.jar","&"]写好后,使用构建镜像命令:dockerbuild-txxx。(XXX是要构建的镜像的名字,注意最后一个。加上)如果需要暴露多个端口,比如open添加JMX端口到EXPOSE,启动容器:dockerrun--namedocker-bigdata-d-v/mnt/bigdata/docker-bigdata:/app-p9110:9110bad1deaec0b1将jar包和外部配置的Config目录一起放在docker-bigdata目录下,挂载到/app目录下容器。当容器启动时,它会自行执行Dockerfile中的命令。当你到达这里时,服务已经成功启动。3.如何使用可视化UI界面管理在docker中管理容器或镜像。这里有几个选项:1.k8s2.swarm3.portainer当然还有其他的工具可以选择。这里我们更喜欢k8s,因为它可以做一些更精细的操作。但是因为学习成本太高,服务太少,我们这里略过选择。Swarm最适合做docker。服务少的时候选择swarm是个不错的选择,但是因为对它了解不多,所以没有做选择。我选择了portainer,因为我朋友的公司使用、部署和管理都非常方便,所以参考了他的推荐选择了portainer。portainer的使用很简单:1.docker上有一个portainer镜像,直接pull下来即可2.使用命令:dockerrun-d-p9000:9000--restart=always-v/var/run/docker.sock:/var/run/docker.sock--nameportainerdocker.io/portainer/portainer这里--restart=always设置关闭后会一直自动重启,至于挂载/var/run/docker。sock:/var/run/docker.sock是必须的,否则进入UI界面会提示挂载。3、启动成功后,使用http://ip:port直接登录,首次登录会设置账号和密码。这里要注册一个域名,ip+port的访问方式要屏蔽。这是portainer的管理界面,可以方便的管理镜像和容器。可以看到容器的运行状态(是否运行和CPU状态)、实时日志、容器信息,甚至可以通过命令行进入容器。更具体的管理操作有待以后熟悉。查看容器运行的日志,发现容器和宿主机的时间不一致。刚用docker的朋友要注意了。在Dockerfile中添加如下配置:ENVTZ=Asia/ShanghaiRUNln-snf/usr/share/zoneinfo/$TZ/etc/localtime&&echo$TZ>/etc/timezone4、使用时出现上线失败怎么办docker故障排除或者需要注意哪些方面?其实我也不是很清楚。..因为也是第一次尝试将服务迁移到docker上。如果出现问题,比如容器挂了,关注容器日志,及时重启。更新服务需要到挂载的宿主机目录更新jar包并重启容器。这里遇到的问题:1.容器时间和宿主机问题不一致,上面写了怎么解决。2、不能像以前那样指定将控制台日志输出到某个文件,比如java-jarxxx.jar>log2>&1&是不行的。在Dockerfile中使用ENTRYPOINT重定向输出日志文件是不可接受的。原因:容器不认为这个文件是自己的。严格来说,这个文件应该属于宿主。我觉得可以把启动命令放在脚本里,比如:java-jarxxx.jar>log2>&1&,把脚本挂载到容器里,运行Dockerfile里的脚本文件,这样jar包出来的时候启动后,会把控制台输出到日志文件,然后通过挂载显示给主机,方便排查问题。目前处于使用初期,如果有后续问题,我会持续关注并写出来。如果你在使用docker的过程中遇到那些坑,欢迎留言讨论~