Dockerfile是什么
Dockerfile是一个文本文档,其中包含了组合映像的命令,可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。
Dockerfile分为呢几部分
基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,Dockerfile中“#”为Dockerfile中的注释
Dockerfile主要指令有哪些
FROM:指定基础镜像,必须为第一个命令。
MAINTAINER:维护者信息。
RUN:构建镜像时执行的命令。
ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。
CMD:构建容器后调用,也就是在容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去“application”,只使用参数。
LABEL:用于为镜像添加元数据。
ENV:设置环境变量。
EXPOSE:指定与外界交互的端口。
VOLUME:用于指定持久化目录。
WORKDIR:工作目录,类似于cd命令。
USER:指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可通过该命令指定运行用户。
ARG:用于指定传递给构建运行时的变量。
ONBUILD:用于设置镜像触发器。实操一下吧
以centos:latest为基础镜像,安装JDK 1.8并构建新的镜像centos-jdk
mkdir centos-jdk
mv jdk/jdk-8u141-linux-x64.tar.gz ./centos-jdk/
cd centos-jdk/
# 将dockerfile指令写入到Dockerfile文件内
cat > Dockerfile << EOF
FROM centos
MAINTAINER test
RUN mkdir /usr/local/java
ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/
RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME \${JAVA_HOME}/jre
ENV CLASSPATH .:\${JAVA_HOME}/lib:\${JRE_HOME}/lib
ENV PATH \${JAVA_HOME}/bin:$PATH
EOF
docker build -t="centos-jdk" .
# 执行docker buid命令
docker build -t="centos-jdk" .
# 一下是输出结果
:'Sending build context to Docker daemon 185.5MB
Step 1/9 : FROM centos
---> 0f3e07c0138f
Step 2/9 : MAINTAINER test
---> Running in 1a6a5c210531
Removing intermediate container 1a6a5c210531
---> 286d78e0b9bf
Step 3/9 : RUN mkdir /usr/local/java
---> Running in 2dbbac61b2cf
Removing intermediate container 2dbbac61b2cf
---> 369567834d80
Step 4/9 : ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/
---> 8fb102032ae2
Step 5/9 : RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk
---> Running in d8301e932f7c
Removing intermediate container d8301e932f7c
---> 7c82ee6703c5
Step 6/9 : ENV JAVA_HOME /usr/local/java/jdk
---> Running in d8159a32efae
Removing intermediate container d8159a32efae
---> d270abf08fa2
Step 7/9 : ENV JRE_HOME ${JAVA_HOME}/jre
---> Running in 5206ba2ec963
Removing intermediate container 5206ba2ec963
---> a52dc52bae76
Step 8/9 : ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
---> Running in 41fbd969bd90
Removing intermediate container 41fbd969bd90
---> ff44f5f90877
Step 9/9 : ENV PATH ${JAVA_HOME}/bin:$PATH
---> Running in 7affe7505c82
Removing intermediate container 7affe7505c82
---> bdf402785277
Successfully built bdf402785277
Successfully tagged centos-jdk:latest'
.
# 测试部分
# 查看docker镜像
docker images
# 创建容器进行测试
docker run -it centos-jdk /bin/bash
# 以下命令在容器内运行
java -version
# 运行输出
: 'java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
'
评论