-
第一步 确定镜像文件
先确定测试仓库中有没有要迁移服务的镜像文件,如果有跳到第三步,如果没有执行第二步。
-
第二步 推镜像
- 首先就要创建镜像,需要准备4个文件,dockerfile、start.py、shop-cms服务包(从老服务上复制过来的)、tomcat-6.0.37.tar.gz (从51上其他服务里拷贝过来的)。(mopomap方式部署的服务要多一个docker-start.py)
- 配置dockerfile文件(主要修改里边的服务名和tomcat版本)
#1、基于基础镜像 ,这里用的是jdk1.8作为基础镜像 FROM reg01.sky-mobi.com/base/jdk-test-cas:7.0.6 #2、本镜像拥有者,填自己的域账号 MAINTAINER xiaoer.wang ENV LC_ALL zh_CN.utf8 ENV JAVA_HOME /usr/local/jdk ENV JRE_HOME ${JAVA_HOME}/jre ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV PATH ${JAVA_HOME}/bin:$PATH #3、拷贝部署包到镜像的指定目录 ADD apache-tomcat-5.5.30.tar.gz /opt/ ADD oms-core.tar.gz /opt/apache-tomcat-5.5.30/webapps/ ##为了方便版本管理,在镜像中不带版本号。下边的操作主要目的是重命名,把版本号去掉。本来重命名可以用mv命令,但是会报错,所以先用cp来操作。 RUN cp -r /opt/apache-tomcat-5.5.30/webapps/shop-cms1.013 /opt/tomcat-6.0.37/webapps/shop-cms RUN rm -rf /opt/tomcat-6.0.37/webapps/shop-cms1.013 ENTRYPOINT cd /opt/apache-tomcat-5.5.30/bin \ && ./startup.sh && sleep 4 \ && tail -F /opt/apache-tomcat-5.5.30/logs/catalina.out
dockerfile文件是用来构建镜像的构建文件,是由一系列命令和参数构成的。
构建docker的分三步~编写dockerfile, docker build, docker run
dockerfile中的常用命令:
CMD和ENTRYPOINT 命令是用来指定容器启动后需要执行的命令。在 docker文件中,这两个命令都只能配置一条,如果配置多个CMD或ENTRYPOINT命令,则会执行最后一条。
RUN指令是在当前的镜像基础上执行指令,并提交为新的镜像。
COPY和ADD命令,都是用来拷贝镜像生成的上下文(所谓上下文是指docker build过程中PATH或URL指定的路径的文件集合,如果不指定路径默认当前路径,即当前路径的文件集合),这两个命令只能操作当前路径下的文件哦。
- 配置start.py文件(配置完需要增加执行权限 chmod +x start.py)
docker stop oms-core docker rm oms-core rm -rf oms-core.tar.gz tar -zcvf oms-core.tar.gz oms-core tar -zcvf apache-tomcat-5.5.30.tar.gz apache-tomcat-5.5.30 #打包命令 docker build -f dockerfile --no-cache -t reg01.sky-mobi.com/mopo/oms-core:1 . #启动命令 docker run -d --restart=always --name oms-core --net zb \ -p 8081:8080 --hostname=oms-core \ --add-host=oms-core:172.16.4.51 \ -v /var/log/oms-core:/opt/oms-core/logs/ \ reg01.sky-mobi.com/mopo/oms-core:1 docker logs -f oms-core
docker build 命令用于使用 Dockerfile 创建镜像。
docker run :创建一个新的容器并运行一个命令。-d: 后台运行容器,并返回容器ID;
docker create :创建一个新的容器但不启动它。
docker rmi :删除镜像
docker pull:拉取镜像。
docker push:推镜像。
- 构建(./start.py)
- 如果配置没问题,镜像就创建成功了。
- docker ps查看是否创建成功。
- 推到镜像仓库中 docker push 镜像名
- 服务push成功之后,把不用的服务停掉 docker stop
常见问题参考
- 启动提示端口被占用问题
方法一:修改start.py文件中的端口号(物理机端口:容器中的端口)方法二:netstat -anp|grep 8081 查看是那个服务启动了8080端口,或者docker ps查看所有镜像。确定占用的服务后,改掉改服务端口,或者关掉(docker stop sns-bbs-cms ),然后再启动本服务就可以了。
-
stat.py 和dockerfile文件中的版本号问题
这里如果不写版本号,./start时会取最新的,所以stat.py 和dockerfile文件中最好加上版本,版本号可以去svn查看。 -
重定向的问题
重定向的问题,其实是当前的jdk没有测试服的证书,换一个jdk镜像地址即可(镜像地址版本号可参考bbs-cms,或shop-cms的dockerfile)
-
第三步 配置yaml文件
- 准备yaml文件(模版可以去其他服务上拉下来)。
- 配置yaml文件。
- 配置ingress。进到ingress中,在mopo-ingress.yaml 增加一条配置。
- 配置好后,重新创建一下。kubectl apply -f mopo-ingress.yaml
- 将配置的yaml文件上传到200上,然后运行起来 kubectl apply -f *.yaml(启动的先后顺序:config和service不分先后顺序,要先启,shop-cms-v1.yaml这种的要最后一个启,因为shop-cms-v1.yaml里面会依赖前边两个文件)。
- 如果配置的没问题的话,服务就算上成功了
如何确定服务是否创建成功了?
- kubectl get pod -n mopo 查看容器启动状态。
- kubectl exec -it 节点名 -n mopo /bin/bash 进到容器中,查看服务是否有启动起来(ps -ef|grep 服务名)。
问题排查方法参考
- kubectl get pod -n mopo 查看容器启动状态,如果状态不对,可以kubectl describe pod 节点名 -n mopo 查看一下有没有报错。
- kubectl exec -it 节点名 -n mopo /bin/bash 进到容器中,如果没启起来说明有问题,手动去启一下,看看启动日志的报错提示。