做应用开发的同学应该都使用过Jenkins自动化部署工具,它的原理其实就是 Git拉取代码+Maven环境构建+sh启动脚本,当然笔者是简单列举一下其大概原理,我们还可以配置比较复杂的功能。
这篇文章分享如何使用Dockerfile构建自动化部署环境的Docker镜像
准备工作
Docker 本地或服务器需要安装好Docker
Maven离线包
Maven有关的setting文件
JDK1.8离线包
整体思路
集成一键部署应用环境的整体思路其实和Jenkins的方式大致一样,不过此次分享的应用程序代码是保存在本地,其实如果业务代码是保存在公网的git上,在Dockerfile中完全可以指定git pull的地址,实现与Jenkins相同的功能(笔者的业务代码是放在内网上,所以选择本地打包)。
Dockerfile
FROM centos:latest
#基础依赖
RUN yum -y install zip unzip
RUN yum -y install vim
# 应用环境变量
ENV APP_NAME=docker-maven-test
ENV APP_HOME=/home/admin/docker-maven-test
ENV JAR_FILE=docker-maven-test-1.0.0
# 将构建出的主包复制到指定镜像目录中
RUN groupadd admin && \
useradd admin -g admin && \
mkdir -p /home/admin/$APP_NAME/logs /home/admin/$APP_NAME/bin /home/admin/$APP_NAME/target /home/admin/$APP_NAME/target/lib
#jdk1.8环境
RUN mkdir /usr/local/java
ADD soft/jdk-8u202-linux-x64.tar.gz /usr/local/java/
RUN ln -s /usr/local/java/jdk1.8.0_202 /usr/local/java/jdk
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
#准备自动构建打包环境
COPY soft/apache-maven-3.3.9-bin.tar.gz /home/admin/$APP_NAME/bin/
RUN tar xzvf /home/admin/$APP_NAME/bin/apache-maven-3.3.9-bin.tar.gz
RUN rm -f /home/admin/$APP_NAME/bin/apache-maven-3.3.9-bin.tar.gz
COPY soft/settings.xml /root/.m2/
RUN cp -R apache-maven-3.3.9 /usr/local/bin
RUN export PATH=apache-maven-3.3.9/bin:$PATH
RUN export PATH=/usr/local/bin/apache-maven-3.3.9/bin:$PATH
RUN ln -s /usr/local/bin/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvn
#应用工作空间
WORKDIR /build/
COPY pom.xml /build/
#如果应用代码在公网,可以使用git clone 将项目克隆下来,再次copy
COPY docker-maven-test /build/docker-maven-test/
RUN mvn -q clean package -Dmaven.test.skip=true
#拷贝应用包
RUN cp /build/docker-maven-test/target/$JAR_FILE.jar /home/admin/$APP_NAME/target/$APP_NAME.jar
#设置系统编码
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV TZ=Asia/Shanghai
ENV LC_ALL zh_CN.UTF-8
# 复制脚本文件
COPY docker-maven-test/start.sh /home/admin/$APP_NAME/bin/
# 切换工作空间
WORKDIR /home/admin/$APP_NAME/
RUN chmod -R a+x /home/admin/$APP_NAME/bin/*.sh && \
chown -R admin:admin /home/admin/*
# 运行jar包
ENTRYPOINT ["java","-jar","docker-maven-test-1.0.0.jar"]
运行
将上述编写好的Dockerfile尽量放在应用代码的根目录(如果需要拷贝本地工程),因为这样Docker才可以在上下文中找到对应的程序代码,进行后续操作。运行如下命令即可一键打包
//命令中的"."表示当前目录下的Dockerfile
docker build -t docker-maven-test .