本篇还是以计算型验证码为Demo,详细记录下在Docker下部署Java项目的过程。
项目:testComputeCode.jar;
开发方式:SpringBoot(2.0.2.RELEASE);
宿主机:CentOS 7.9;
Docker:docker-ce 26.1.4;
容器内操作系统:centos 7;
容器JDK:18.0.2.1;
1、安装Docker
使用yum安装docker-ce(社区版),由于官方仓库源下载速度可能较慢,可以选择国内yum仓库源,比如选择阿里云提供的仓库源。
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
图1
cat /etc/yum.repos.d/docker-ce.repo,查看下载到本地的yum源文件,如图2
图2
yum install docker-ce ,安装docker-ce。
图3
docker -v,查看docker版本
图4
由于docker官方镜像仓库下载较慢,可以使用国内镜像仓库,比如阿里云镜像仓库,在/etc/docker目录中创建daemon.json文件,内容需要在阿里云控制台查找(控制台-->容器镜像服务-->镜像工具-->镜像加速器),每个用户的内容是唯一的。
systemctl start docker 启动docker服务
systemctl enable docker 设置docker开机启动
2、创建Dockerfile
#以centos7为基础镜像
FROM centos:7
#指定环境变量
ENV baseDirectory=/usr/local/java
ENV JAVA_HOME=${baseDirectory}/jdk/jdk-18.0.2.1
ENV PATH=${JAVA_HOME}/bin:$PATH
ENV TZ=Asia/Shanghai
#指定容器的默认工作目录
WORKDIR ${baseDirectory}
#设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#设置yum源为阿里云,并安装fontconfig库(因为验证码用到了java的画笔类等,这些类底层依赖fontconfig)
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \
&& yum clean all \
&& yum makecache \
&& yum install fontconfig -y
#设置语言环境
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && \
echo 'LANG="zh_CN.utf8"' > /etc/locale.conf
ENV LANG zh_CN.utf8
#将JDK复制到容器中并解压
ADD jdk-18.0.2.1_linux-x64_bin.tar.gz ${baseDirectory}/jdk
#将项目复制到容器中
COPY testComputeCode.jar ${baseDirectory}
#指定项目暴露的端口
EXPOSE 8080
#启动指令
ENTRYPOINT ["java","--add-opens","java.base/java.lang=ALL-UNNAMED","-jar","testComputeCode.jar"]
3、通过sftp上传如下资源
jdk-18.0.2.1_linux-x64_bin.tar.gz
testComputeCode.jar
Dockerfile
图5
4、构建Dockerfile生成镜像
在Dockerfile所在的目录下进行构建,命令如下:
docker build -t test_java:latest .
图6
其中 -t 参数表示镜像的名称和版本,. 表示当前目录。如果Dockerfile文件的名称不是默认的"Dockerfile",那么需要使用 -f 参数指定具体的名称,例如文件名为"dockerfile_test",则构建命令如下:
docker build -t test_java:latest -f dockerfile_test .
5、运行镜像形成容器
将创建好的镜像运行成为容器,项目就会随之而启动,运行命令如下:
docker run -d -p 8080:8080 test_java
通过docker ps命令可查看正在运行的容器,运行成功后即可正常访问,如图7。
图7
通过上述几步即可在Docker下部署一个Java项目,项目镜像可以上传到仓库,其他开发者通过仓库下载下来或是直接将项目导出为归档文件发给其他开发者,不仅非常方便而且可以保证所有开发者的运行环境是相同的。