> 文章列表 > Docker学习(二十一)构建 java 项目基础镜像

Docker学习(二十一)构建 java 项目基础镜像

Docker学习(二十一)构建 java 项目基础镜像

目录

    • 1.下载 JDK 包
    • 2.编写 Dockerfile
    • 3.构建镜像
    • 4.创建容器测试

1.下载 JDK 包

JDK各版本官网下载地址: https://www.oracle.com/java/technologies/downloads/archive/#JavaSE

这里我们以 JDK 8u351 为例,点击 Java SE (8U211 and later)

Docker学习(二十一)构建 java 项目基础镜像

点击下载 jdk-8u351-linux-x64.tar.gz

Docker学习(二十一)构建 java 项目基础镜像

勾选接受协议,点击下载。(这里会需要登录一下,没有账号可以注册一个,Oracle账号以后也会用到)

Docker学习(二十一)构建 java 项目基础镜像

下载后,文件如下:

Docker学习(二十一)构建 java 项目基础镜像

2.编写 Dockerfile

创建一个用于构建镜像的文件夹,并在文件夹中新建一个文本文件,重命名为 Dockerfile,内容如下:

# 基础镜像(大小:155MB)
FROM quay.io/centos/centos:stream9
# 配置JAVA的环境变量
ENV JAVA_DIR=/usr/local
ENV JAVA_HOME=$JAVA_DIR/jdk1.8.0_351
# 配置到PAHT中
ENV PATH=$PATH:$JAVA_HOME/bin
# 添加 redis 客户端
ADD redis-cli /usr/bin
# 添加 JDK
ADD jdk-8u351-linux-x64.tar.gz $JAVA_DIR
# 安装、更新基础控件
RUN yum -q -y update && yum -q -y upgrade \\&&  yum install -y tzdata vim less ncurses telnet wget zip unzip traceroute procps net-tools iproute tcpdump mysql postgresql \\&&  ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \\&&  chmod +x /usr/bin/redis-cli \\&&  yum clean all \\&&  echo "alias ls='ls --color'" >> ~/.bashrc \\&&  echo "alias ll='ls -l'" >> ~/.bashrc
# 需要下载文件的话可以用这个命令
#	&&  wget --quiet https://www.baidu.com/test.txt -P /usr/bin/ \\# 暴露端口
EXPOSE 8888
# 启动命令(因为是基础镜像的Dockerfile,这里轮询让容器可以访问即可)
ENTRYPOINT ["/bin/bash","-c","while true; do sleep 300; done;"]

补充:

  • 基础镜像没有直接使用 openjdk:8-jdk 的镜像是因为镜像中没有 yum 命令,不方便后期更新和扩展控件。

  • 如果不需要使用 mysqlredis-clipostgresql 等命令可以直接去掉。

    redis-cli 下载地址:https://share.weiyun.com/f37Mekqs

3.构建镜像

在文件夹下执行如下命令,构建镜像:

docker build -t image_name:image_tag .

执行结果:

Docker学习(二十一)构建 java 项目基础镜像

(yum安装控件可能需要等待 3 分钟左右)

查看创建好的镜像:

docker images | grep image_name

执行结果:

Docker学习(二十一)构建 java 项目基础镜像

4.创建容器测试

创建容器:

docker run -d --name=container_name image_name:image_tag

进入容器:

docker exec -it container_name bash

查看 JDK 版本:

java -version

执行结果:

Docker学习(二十一)构建 java 项目基础镜像

整理完毕,完结撒花~ 🌻

参考地址:

1.Docker部署java项目(Dockerfile方式),https://blog.csdn.net/zhabnghenglmm/article/details/124310381

2.[docker]-容器中支持ll命令,https://blog.csdn.net/xujiamin0022016/article/details/125341593