原创

Dockerfile讲解以及Dockerfile手动构建JDK镜像

温馨提示:
本文最后更新于 2018年02月15日,已超过 2,223 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

什么是Dockerfile

Dockerfile 用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本。

Dockerfile语法规则

  1. 每条指令的保留字都必须为大写字母且后面至少要有一个参数
  2. 执行顺序按从上往下执行。
  3. 用于注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

Dockerfile执行流程

  1. Docker 从基础镜像运行一个容器
  2. 执行每一条指定并对容器作出修改
  3. 执行类似 docker commit 的操作提交一个新的镜像层
  4. docker 再基于刚提交的镜像运行一个新容器
  5. 执行 Dockerfile 中的下一条指令直到所有指令都执行完成

Dockerfile 常用指令

Dockerfile构建jdk镜像

1. 在宿主机上创建目录,并切换到新建的木目录中

mkdir -p /mydocker/
cd /mydocker/

2. 将Linux版的jdk压缩包上传

[root@lzhpo jdk]# pwd
/mydocker/jdk
[root@lzhpo jdk]# ll
total 187264
-rw-r--r-- 1 root root       541 Apr 12 23:33 Dockerfile
-rw-r--r-- 1 root root 191753373 Apr 12 23:18 jdk-8u191-linux-x64.tar.gz

3. 创建文件Dockerfile

Dockerfile内容

#来自基础镜像
FROM centos:7
#指定镜像创建者信息
MAINTAINER lzhpo
#切换工作目录 /mydocker/jdk
WORKDIR /mydocker/jdk
#创建一个存放jdk的路径
RUN mkdir /mydocker/jdk/jdk8
#将jdk压缩包复制并解压到容器中/mydocker/jdk/jdk8
ADD jdk-8u191-linux-x64.tar.gz /mydocker/jdk/jdk8
#配置java环境变量
ENV JAVA_HOME /mydocker/jdk/jdk8/jdk1.8.0_191
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
CMD ["/bin/bash"]

构建镜像

#创建Dockerfile
[root@lzhpo jdk]# vi Dockerfile
#构建jdk1.8镜像
[root@lzhpo jdk]# docker build -t jdk:1.8 .
Sending build context to Docker daemon 191.8 MB
Step 1/10 : FROM centos:7
Trying to pull repository docker.io/library/centos ... 
7: Pulling from docker.io/library/centos
8ba884070f61: Pull complete 
Digest: sha256:8d487d68857f5bc9595793279b33d082b03713341ddec91054382641d14db861
Status: Downloaded newer image for docker.io/centos:7
 ---> 9f38484d220f
Step 2/10 : MAINTAINER lzhpo
 ---> Running in 9e3aa786eacb
 ---> 30868b2085e4
Removing intermediate container 9e3aa786eacb
Step 3/10 : WORKDIR /mydocker/jdk
 ---> c9884a185c91
Removing intermediate container b55deb21cb05
Step 4/10 : RUN mkdir /mydocker/jdk/jdk8
 ---> Running in e85f9f4fc008

 ---> 3ae932c2dd6b
Removing intermediate container e85f9f4fc008
Step 5/10 : ADD jdk-8u191-linux-x64.tar.gz /mydocker/jdk/jdk8
 ---> 8c44d2783e07
Removing intermediate container f06a6aa9aca6
Step 6/10 : ENV JAVA_HOME /mydocker/jdk/jdk8/jdk1.8.0_191
 ---> Running in 75bcb1986d33
 ---> ce50591bc47b
Removing intermediate container 75bcb1986d33
Step 7/10 : ENV JRE_HOME $JAVA_HOME/jre
 ---> Running in b5cc8c2d039c
 ---> f0cfc6b865e7
Removing intermediate container b5cc8c2d039c
Step 8/10 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
 ---> Running in 7fc368cfa9bf
 ---> ff2bfa74db25
Removing intermediate container 7fc368cfa9bf
Step 9/10 : ENV PATH $JAVA_HOME/bin:$PATH
 ---> Running in 9237d88798c8
 ---> 98424a945152
Removing intermediate container 9237d88798c8
Step 10/10 : CMD /bin/bash
 ---> Running in 20648a9fc502
 ---> 6adc9ae58f57
Removing intermediate container 20648a9fc502
Successfully built 6adc9ae58f57

#查看自己构建的jdk镜像
[root@lzhpo jdk]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
jdk                  1.8                 6adc9ae58f57        14 seconds ago      598 MB
docker.io/centos     7                   9f38484d220f        4 weeks ago         202 MB
docker.io/rabbitmq   3.7.12-management   24cb552c7c00        6 weeks ago         212 MB

#运行自己构建的jdk镜像
[root@lzhpo jdk]# docker run -it --name=myjdk8 jdk:1.8 /bin/bash

#验证
[root@d02349aeed56 jdk]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

总结操作步骤

  1. 编写 Dockerfile 文件
  2. 通过 docker build 命令生成新的镜像
  3. 通过 docker run 命令运行
本文目录