原创
Dockerfile讲解以及Dockerfile手动构建JDK镜像
温馨提示:
本文最后更新于 2018年02月15日,已超过 2,472 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
什么是Dockerfile
Dockerfile 用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本。
Dockerfile语法规则
- 每条指令的保留字都必须为大写字母且后面至少要有一个参数
- 执行顺序按从上往下执行。
- 用于注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Dockerfile执行流程
- Docker 从基础镜像运行一个容器
- 执行每一条指定并对容器作出修改
- 执行类似 docker commit 的操作提交一个新的镜像层
- docker 再基于刚提交的镜像运行一个新容器
- 执行 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)
总结操作步骤
- 编写 Dockerfile 文件
- 通过 docker build 命令生成新的镜像
- 通过 docker run 命令运行
- 本文标签: Docker Java
- 本文链接: http://www.lzhpo.com/article/33
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权