使用Dockerfile制作jdk镜像

前言:

在Docker的世界里,Dockerfile是一个至关重要的文本文件,它定义了如何构建Docker镜像。通过编写Dockerfile,开发者可以确保他们的应用程序及其依赖项被正确地打包、优化和部署。本文将深入探讨Dockerfile的组成、常用指令以及编写高效Dockerfile的最佳实践。

docker基础知识通俗讲解:docker各种命令演示

docker-compose实现编排docker容器:docker-compose编排docker

一、Dockerfile的组成

Dockerfile由一系列指令和参数组成,每条指令都会创建一个新的镜像层。这些指令告诉Docker如何构建镜像,包括安装必要的软件包、复制文件、设置环境变量等。

二:常用Dockerfile指令

复制代码
1.FROM:指定基础镜像。这是构建新镜像的起点,可以是任何已经存在的镜像。

2.MAINTAINER :维护者信息

3.WORKDIR:工作目录

4.RUN:在镜像构建过程中执行命令。这些命令通常用于安装软件包、编译代码等。

5.ADD:将文件、目录或远程URL内容添加到镜像中。与COPY相比,ADD可以自动解压压缩文件。

6.CMD:提供容器启动时的默认命令。Dockerfile中只能有一个CMD指令,如果指定了多个,只有最后一个会生效。

7.ENV:设置环境变量。

8.EXPOSE:声明容器运行时监听的端口。

10.ENTRYPOINT:配置容器启动时运行的命令,让容器以应用程序的方式运行。

11.VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

12.USER:指定运行容器时的用户名或UID。

三、编写Dockerfile

Dockerfile是Docker镜像的构建脚本,它包含了构建镜像所需的所有指令。以下构建一个jdk11镜像,目录下包含Dockerfile文件以及jdk压缩包

复制代码
# 指定基础镜像(如果本地没有,会去镜像仓库拉取)
FROM hub.atomgit.com/library/centos:7
 
# 维护者信息
MAINTAINER qzh
 
# 设置工作目录
WORKDIR /usr/local/jdk
 
# 拷贝JDK压缩包到镜像中
COPY jdk-11.0.24_linux-x64_bin.tar.gz  /usr/local/jdk/
 
  # 配置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
RUN echo 'Asia/Shanghai' >/etc/timezone

# 解压JDK压缩包
RUN tar -zxvf  jdk-11.0.24_linux-x64_bin.tar.gz  && rm -rf  jdk-11.0.24_linux-x64_bin.tar.gz
 
# 配置环境变量
ENV JAVA_HOME=/usr/local/jdk/jdk-11.0.24   
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

注意

  • ENV中JAVA_HOME行中,需要将jdk-11.x.x替换为解压后的JDK目录的实际名称

四、构建Docker镜像

在包含Dockerfile的目录中打开终端或命令提示符,使用docker build命令构建新的Docker镜像:

复制代码
docker build -t  centos-jdk11  . 

其中,centos-jdk11是镜像的名称;.表示Dockerfile在当前目录。

五、验证Docker镜像

  • 构建完成后,可以使用docker images命令查看本地镜像列表,确认新镜像已经创建

docker images

  • 启动一个新的容器来验证JDK 11是否已正确安装:
复制代码
#构建容器并进入容器
docker run -it centos-jdk11  /bin/bash
  • 在容器内部,使用java -version命令来检查JDK版本:

java -version

如果一切正常,你应该会看到JDK 11的版本信息。通过以上步骤,你就可以成功制作一个包含JDK 11的Docker镜像了。

六:构建jar

可以看之前一篇:docker一键部署springboot项目

复制代码
#基础镜像
FROM anapsix/alpine-java:8_server-jre_unlimited

# 配置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#配置环境变量
ENV SERVER_PORT=8001
ENV MYPATH /usr/local

# 设置工作目录【$MYPATH】使用环境配置
WORKDIR $MYPATH

#将jar添加到镜像中
ADD /target/docker-demo-encrypted.jar ./app.jar

#配置容器启动时运行的命令,运行java -jar 
ENTRYPOINT ["java", \
            "-Djava.security.egd=file:/dev/./urandom", \
            "-Dserver.port=${SERVER_PORT}", \
            "-jar", "app.jar"]
相关推荐
lpfasd1234 分钟前
状态模式(State Pattern)
java·设计模式·状态模式
代码老y8 分钟前
前端开发中的可访问性设计:让互联网更包容
java·服务器·前端·数据库
jakeswang10 分钟前
Java 项目中实现统一的 追踪ID,traceId实现分布式系统追踪
java·后端·架构
猛犸MAMMOTH11 分钟前
Python打卡第53天
开发语言·python·深度学习
寒山李白15 分钟前
Java 传输较大数据的相关问题解析和面试问答
java·开发语言·面试·传输
白总Server27 分钟前
Golang dig框架与GraphQL的完美结合
java·大数据·前端·javascript·后端·go·graphql
lightgis43 分钟前
个人支出智能分析系统
java
春生野草1 小时前
MyBatis中关于缓存的理解
java·缓存·mybatis
道剑剑非道1 小时前
QT开发技术【ffmpeg EVideo录屏软件 一】
开发语言·qt·ffmpeg
oioihoii1 小时前
C++11 Generalized(non-trivial) Unions:从入门到精通
java·开发语言·c++