参考文献:Jenkins与Docker的自动化CI/CD实战【附源码】_李振良_阿良_51CTO博客
遇到的问题:
1、我们使用的jdk放置了微信专用的jar。所以自己建了一个基础镜像,参考文献:Docker:JDK镜像制作_陌生谁家年少-CSDN博客_制作jdk镜像
2、同一台机器部署多个docker时 隐射的日志目录不能相同,所以我们按端口号建立了文件夹
3、自学 Dockerfile 命令 docker 命令(注意: RUN 制作镜像时运行 CMD 容器启动时运行,docker run 命令参数熟练运用 )
4、网络问题容器ip注册到nacos上后,dubbo无法调用到,使用宿主机的网络 docker run --network host
5、容器和宿主机时间不同
ENV TZ=Asia/Shanghai
6、日志乱码问题构建文件 加入
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
相关代码:
1、自定义jdk基础镜像文件Dockerfile
FROM centos:7
MAINTAINER linxk
ADD jdk8211.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV JRE_HOME /usr/local/jdk1.8.0_211/jre
ENV PATH $JAVA_HOME/bin:$PATH
2、构建服务镜像并上传私有镜像仓库、清理历史镜像
REPOSITORY=106.54.153.203:5000/cif${port}
# 构建镜像
cat > Dockerfile << EOF
FROM jdk-8u211:v1
MAINTAINER linxk
ENV VERSION=8.5.39
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV TZ=Asia/Shanghai
COPY cif-service/target/cif.jar /opt
CMD java -jar -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+ParallelRefProcEnabled -XX:ErrorFile=/var/logs/cif/hs_err_pid%p.log -Xloggc:/var/logs/cif/gc.log -XX:HeapDumpPath=/var/logs/cif -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintCommandLineFlags -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC /opt/cif.jar >/dev/null --server.port=${port} --spring.profiles.active=${active} --dubbo.application.qos.port=-1
EOF
docker build -t $REPOSITORY .
# 上传镜像
docker push $REPOSITORY
echo ---------------Clear-Images...------------------
clearImagesList=$(docker images -f "dangling=true" -q)
if [ ! -n "$clearImagesList" ]; then
echo "no images need clean up."
else
docker rmi $(docker images -f "dangling=true" -q)
echo "clear success."
fi
3、执行目标服务器关闭容器,拉取最新镜像,启动容器
REPOSITORY=106.54.153.203:5000/cif${port}
# 部署
docker rm -f cif${port}
docker rmi $REPOSITORY
# -p ${port}:${port}
docker run -d --name cif${port} --network host -v /var/logs/cif/${port}/:/var/logs/cif/ $REPOSITORY