接上一篇,后续操作
发布配置
安装插件
安装SSH,Docker,Docker Pipeline, docker-build-step, Kubernetes插件。
设置Docker打包机(若使用本地安装的docker进行打包,此操作忽略):
远程打包机(220.143)开启端口:
vim /etc/systemd/system/docker.service
...
ExecStart=/opt/kube/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
...
systemctl daemon-reload systemctl restart docker netstat -nlput | grep docker
Jenkins设置“系统管理——节点管理——配置云”添加远程Docker:
创建基础Docker镜像
在打包机(220.143)上操作:
拉取官方系统镜像
docker pull centos docker images
准备要添加进镜像的文件:
mkdir docker-baseimg cd docker-baseimg vim java.sh
export JAVA_HOME=/usr/local/jdk1.8.0_271 export PATH=$JAVA_HOME/bin:$PATH
vim start-jar.sh
#!/bin/bash # Author:Chris __On 2021/01/18 # =====================Description===================== # [Features]: This is for Start a jar Package in Docker Container. # ===================================================== # <----------------------------Configure Start---------------------------> Base=$(cd `dirname ${BASH_SOURCE}` ; pwd) App_Name="app.jar" App_Execute="${Base}/${App_Name}" Log_Path="${Base}/logs" App_Log="${Log_Path}/app-stdout.log" Xms=${JVM_XMS:-"256m"} Xmx=${JVM_XMX:-"512m"} Start_Opts="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -XX:+UseCMSInitiatingOccupancyOnly -XX:-UseLargePages -XX:+UseFastAccessorMethods -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${Log_Path}/java_heapdump.hprof" [ ! -z "${PROFILE_ACTIVE}" ] && S_Profile="--spring.profiles.active=${PROFILE_ACTIVE}" Ext_Args="$@" # <----------------------------Configure End----------------------------> if [ ! -f "${App_Execute}" ];then echo "ERROR: Can not find execute file: ${App_Execute}." exit 1 fi if [ -z "${JAVA_HOME}" ];then source /etc/profile.d/java.sh fi [ ! -d "${Log_Path}" ] && mkdir -p ${Log_Path} # 使用exec command, 会用 command 进程替换当前shell进程, 并且保持 PID 不变。 # 为保证Docker容器不会终止, 脚本需一直处于运行状态, # 故不要在最后添加 & 让java在后台另起进程运行, 而是直接替代当前脚本运行。 # Tips: docker logs显示容器内/dev/stdout, /dev/stderr的内容, 阿里云k8s也是收集此日志; # 故运行时就不进行日志重定向($App_Log)及 2>&1 了 exec java -server -Xms${Xms} -Xmx${Xmx} -jar ${App_Execute} ${Start_Opts} ${S_Profile} ${Ext_Args}
chmod +x start-jar.sh vim Dockerfile
FROM centos as build RUN sed -i "/^alias mv/a\alias ll='ls -lh --time-style=\"+%Y/%m/%d %H:%M\" --color'" ~/.bashrc RUN mkdir -p /app/logs ADD jdk-8u271-linux-x64.tar.gz /usr/local/ ADD java.sh /etc/profile.d/ ADD start-jar.sh /app/ RUN cd /usr/local/jdk1.8.0_271 && rm -rf src.zip \ lib/visualvm jre/lib/plugin.jar jre/bin/javaws \ jre/lib/desktop jre/plugin jre/lib/deploy* \ jre/lib/amd64/libglass.so \ jre/lib/amd64/libgstreamer-lite.so \ jre/lib/amd64/libjavafx*.so \ jre/lib/amd64/libjfx*.so FROM scratch COPY --from=build / . LABEL maintainer="Chris" WORKDIR /app
Dockerfile中的相关命令解释:
- FROM 指的是依赖的基础镜像,如scratch表示的是空白的,从零开始的。依赖的镜像可以是本地的,也可以是远程库的
- ADD 指的是添加本地文件到镜像中,如果遇到linux可解压格式文件,会自动解压,这就是为什么整个文件中没有对tar.gz进行显式解压
- RUN 运行命令,如安装软件的相关命令
- CMD 设置启动Container时默认执行的命令,这个可以在启动容器时覆盖
- 第二阶段 FROM 空库scratch后,将现存所有文件复制过来,从零构建新镜像,减少不必要的层,缩小镜像体积
制作镜像:
docker build -t baseimg-jdk8:c8 . docker images
试运行基础镜像:
docker run -it --rm baseimg-jdk8:c8 /bin/bash
上传基础镜像到Harbor:
vim /etc/docker/daemon.json
... "insecure-registries": ["127.0.0.1/8","nw-harbor.xxx.cc"], ...
systemctl restart docker docker info
Tips:若要从自建Harbor上拉取镜像,此配置需要在群集内所有worker上都操作。若Harbor配置了HTTPS访问则可不用。
docker login http://nw-harbor.xxx.cc/ -u admin -p Nw-Harbor123
docker tag baseimg-jdk8:c8 nw-harbor.xxx.cc/library/baseimg-jdk8:c8 docker images
docker push nw-harbor.xxx.cc/library/baseimg-jdk8:c8
登陆Harbor,即可看到已上传:
在顶级目录新建一个项目:
Tips: 本地打包下载基础镜像方法:
docker save -o baseimg-jdk8.tar baseimg-jdk8:c8
导入还原使用:
docker load -i baseimg-jdk8.tar