什么是Dockerfile
Dockerfile 用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本。
构建新的镜像步骤:
- 编写 Dockerfile 文件
- 通过 docker build 命令生成新的镜像
- 通过 docker run 命令运行
查看 DockerFile 文件示例, 以CentOS为例:
参考:https://hub.docker.com/_/centos
FROM scratch # 基础镜像,scratch相当于java中的Object
ADD centos-7-x86_64-docker.tar.xz / # centos
LABEL org.label-schema.schema-version="1.0" \ # 标签说明
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20190305"
CMD ["/bin/bash"] # 默认执行的命令,创建运行容器时最后会加上 /bin/bash,
# 所以创建容器时,可不加 /bin/bash ,即如下:
# docker run -it --name=mycentos0 centos:7
# 如果加了,则在后面采用我们自己加的命令执行/bin/bash
Dockerfile 语法规则
- 每条指令的保留字都必须为大写字母且后面至少要有一个参数
- 执行顺序按从上往下执行。
- 用于注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Dockerfile 执行流程
- Docker 从基础镜像运行一个容器
- 执行每一条指定并对容器作出修改
- 执行类似 docker commit 的操作提交一个新的镜像层
- docker 再基于刚提交的镜像运行一个新容器
- 执行 Dockerfile 中的下一条指令直到所有指令都执行完成
Dockerfile 常用指令
使用Dockerfile创建JDK容器实列
(1)在宿主机上创建目录,并切换到新建的目录中
mkdir -p /usr/local/mydocker
(2)将下载 jdk-8u111-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/mydocker 目录
如果没有本地目录则点击这个显示
#来自基础镜像
FROM centos:7
#指定镜像创建者信息
MAINTAINER mengxuegu
#切换工作目录 /usr/local
WORKDIR /usr/local
#创建一个存放jdk的路径
RUN mkdir /usr/local/java
#将jdk压缩包复制并解压到容器中/usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
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"]
构建镜像语法
docker build [-f 指定Dockerfile所在路径与文件名] -t 生成的镜像名:标签名 .
注意后边的 空格 和点 . 不要省略, . 表示当前目录 -f 指定Dockerfile文件所在路径与文件名。如果未指定 -f 值,则找当前目录下名为 Dockerfile 的构建文件
docker build -t jdk:1.8 .
JDK1.8镜像生成成功
利用创建的镜像创建JDK1.8容器
docker run -it --name=jhjjdk jdk:1.8
形成如下进入后台可以看出他自动进入工作目录
查看是否配置成功
进入Java下面版本的里面输入java -version 可以查看Java的版本信息