JDK容器作為一種基礎容器,網上有很多的鏡像,可供大家直接下載使用。但是自己制作鏡像也有很多的意義,比如學習,制作特定架構的鏡像,添加個性化配置等。本教程就是通過Dokcerfile文件制作自己的JDK鏡像
准備環節
-
需要准備JDK安裝包,可以從此站點進行下載 華為下載源
-
創建 jdk-8 文件夾,將下載的 JDK 安裝包放置在這個文件夾下,並創建 Dockerfile 文件
$ ls Dockerfile jdk-8u201-linux-arm64-vfp-hflt.tar.gz $ pwd /Users/linchangkun/workspace/docker/jdk-8
這是我准備的環境,因為我使用是 arm 架構的 mac,所以我下載的 jdk 是 arm64 版本的,一般大家的服務器或者電腦,一般是下載
jdk-8u201-linux-x64.tar.gz
編寫 Dockerfile
-
請注意下述的注釋部分
# 基礎鏡像使用 debian, stable-slim 是指穩定版精簡包 FROM debian:stable-slim # 描寫維護者信息 MAINTAINER linck zerolinck@foxmail.com # 設置工作目錄 WORKDIR / # 將jdk安裝包復制到 /usr/local/jdk 目錄下,ADD 命令會自動解壓 ADD jdk-8u201-linux-arm64-vfp-hflt.tar.gz /usr/local/jdk/ # ENV 配置環境變量,下面就是大家熟悉的 JAVA_HOME、CLASS_PATH、PATH # !!!!! # !!!!! 這里注意,這里寫了 jdk1.8.0_201,是因為我的jdk安裝包解壓是叫這個名字,大家自己准備的jdk安裝包解壓名字不一樣的,需要換掉 ENV JAVA_HOME=/usr/local/jdk/jdk1.8.0_201 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH
制作鏡像
-
使用 docker build 創建鏡像,-t 后面跟着的是 鏡像名:版本,最后的點是指當前目錄,比如Dockerfile中的add命令,復制jdk安裝包到鏡像中,就是復制當前目錄的jdk安裝包
$ docker build -t lin-jdk-8:1.0 . [+] Building 17.5s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 313B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/debian:stable-slim 15.4s => [internal] load build context 2.0s => => transferring context: 73.33MB 2.0s => [1/3] FROM docker.io/library/debian:stable-slim@sha256:608a500bd0d397338ec0e8579649985fb2 0.0s => CACHED [2/3] ADD jdk-8u201-linux-arm64-vfp-hflt.tar.gz /usr/local/jdk/ 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:3832427f0da8e7bbedff8f491952d1ace01560fc7cbd579ab27249b822172eda 0.0s => => naming to docker.io/library/lin-jdk-8:1.0 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
開始 build,如果你的本地沒有 debian:stable-slim 這個基礎鏡像,那么會先聯網下載,如果你的網絡不太好,可能會需要下載挺久。
查看運行鏡像
-
到這鏡像就已經制作完成了,可以查看並用於創建容器
# 可以看到我們自己制作的鏡像 $ docker images lin-jdk-8 1.0 3832427f0da8 8 days ago 242MB # 使用鏡像創建容器 $ docker run -it --name lin-jdk-01 lin-jdk-8:1.0 bash root@2e22ae0ee798:/# # 查看復制進來的 jdk,看到是被自動解壓的了 root@2e22ae0ee798:/usr/local/jdk# ls jdk1.8.0_201 # 輸出環境變量,就是 Dockerfile 中 ENV 描述的部分 root@2e22ae0ee798:/usr/local/jdk# echo $JAVA_HOME /usr/local/jdk/jdk1.8.0_201 root@2e22ae0ee798:/usr/local/jdk# echo $CLASSPATH .:/usr/local/jdk/jdk1.8.0_201/lib/dt.jar:/usr/local/jdk/jdk1.8.0_201/lib/tools.jar root@2e22ae0ee798:/usr/local/jdk# echo $PATH /usr/local/jdk/jdk1.8.0_201/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin