Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本
一、常用保留字汇总
Dockerfile 的保留字(关键字)是用于定义和构建 Docker 镜像的指令。以下是一些常用的 Dockerfile 保留字:
- FROM:指定基础镜像。
- RUN:执行命令并提交结果。 (docker build 时候运行)
- CMD:容器启动时执行的命令。(docker run时候运行)
- LABEL:为镜像添加元数据标签。
- EXPOSE:暴露容器的端口。
- ENV:设置环境变量。
- ADD:将文件或目录添加到镜像中。(自动处理URL 和解压tar压缩包)
- COPY:复制文件或目录到镜像中。
- ENTRYPOINT:指定容器启动时要运行的命令。(ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指今)
- VOLUME:定义容器中的卷。
- USER:指定运行容器的用户。
- WORKDIR:设置容器中的工作目录。
- ARG:定义传递给构建过程的参数。
- ONBUILD:定义当构建作为另一个 Dockerfile 的基础镜像时执行的指令。
- HEALTHCHECK:定义容器健康检查的命令和参数。
- SHELL:指定容器中执行的默认 shell。
- MAINTAINER:指定维护者信息。
- FIPS:启用或禁用 FIPS 模式(适用于美国政府)。
- CONTAINERD_GRAPH:设置容器d守护进程使用的目录路径。
- HELP:为 Docker 守护进程打印帮助信息。
- REJECT_UNSAFE_ Volumes:拒绝从 Dockerfile 中使用不安全的卷。
- LABEL_OPTIONS:为镜像添加标签选项。
- EXTRA_HOSTS:添加主机名到 /etc/hosts 文件(主机名称和 IP 地址列表)。
- NOPROXY:添加主机名到 /etc/hosts 文件(主机名称列表),以避免使用 DNS 进行反向解析。
- HTTP_PROXY/HTTPS_PROXY/NO_PROXY:设置 HTTP/HTTPS 代理和不使用代理的服务器列表。
一、dockerfile 案列
操作背景: centos 7镜像具备vim + ifconfig +jdk8
1.1 编写Dokerfile
Dokerfile <<---------注意文件名是这个
1-新建文件夹 上传文件
[root@iZuf6hxabqikytnrumsi4gZ /]# mkdir myfile2- 创建如下Dokerfile文件
[root@iZuf6hxabqikytnrumsi4gZ myfile]# vim Dokerfile3- 编写build文档
#基础镜像 以及作者定义
FROM centos:7
MAINTAINER syf<1336.qq.com>
#指定登录后的路径
ENV MYPATH /usr/local
WORKDIR $MYPATH#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u381-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u381-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_381
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:$PATHEXPOSE 80CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash1.2构建镜像
在当前目录下构建
docker build -t centosJava8:1.0 .
构建之前先核对下,我这用的cenos7
1-拉去基础镜像
[root@iZuf6hxabqikytnrumsi4gZ myfile]# docker pull centos:72-核对镜像
[root@iZuf6hxabqikytnrumsi4gZ myfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
redis        6.2.6     7614ae9453d1   24 months ago   113MB
mysql        5.7       c20987f18b13   24 months ago   448MB
centos       7         eeb6ee3f44bd   2 years ago     204MB构建结果如下,1、2、3、4
1-构建命令
[root@iZuf6hxabqikytnrumsi4gZ myfile]# docker build -t centosjava8:1.0 .2-构建过程[+] Building 89.1s (12/12) FINISHED                                                                                                                                                                docker:default=> [internal] load build definition from Dockerfile                                                                                                                                                         0.0s=> => transferring dockerfile: 830B                                                                                                                                                                         0.0s=> [internal] load .dockerignore                                                                                                                                                                            0.0s=> => transferring context: 2B                                                                                                                                                                              0.0s=> [internal] load metadata for docker.io/library/centos:7                                                                                                                                                  0.0s=> [1/7] FROM docker.io/library/centos:7                                                                                                                                                                    0.0s=> [internal] load build context                                                                                                                                                                            1.6s=> => transferring context: 139.30MB                                                                                                                                                                        1.3s=> [2/7] WORKDIR /usr/local                                                                                                                                                                                 0.2s=> [3/7] RUN yum -y install vim                                                                                                                                                                            61.3s=> [4/7] RUN yum -y install net-tools                                                                                                                                                                       2.5s=> [5/7] RUN yum -y install glibc.i686                                                                                                                                                                     11.5s => [6/7] RUN mkdir /usr/local/java                                                                                                                                                                          0.3s => [7/7] ADD jdk-8u381-linux-x64.tar.gz /usr/local/java/                                                                                                                                                    3.1s => exporting to image                                                                                                                                                                                       9.9s => => exporting layers                                                                                                                                                                                      9.9s => => writing image sha256:b66e5037b732600d2de0b74f6058ea21b396a5f61646f4290812d67734047668                                                                                                                 0.0s => => naming to docker.io/library/centosjava8:1.03- 查看 
[root@iZuf6hxabqikytnrumsi4gZ myfile]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
centosjava8   1.0       b66e5037b732   4 minutes ago   1.27GB
redis         6.2.6     7614ae9453d1   24 months ago   113MB
mysql         5.7       c20987f18b13   24 months ago   448MB
centos        7         eeb6ee3f44bd   2 years ago     204MB4-运行容器
[root@iZuf6hxabqikytnrumsi4gZ myfile]# docker run -it b66e5037b732 /bin/bash
[root@ecd00b1d0b26 local]# pwd
/usr/local
[root@ecd00b1d0b26 local]# 二、虚悬镜像
虚悬镜像已经失去存在价值,可以删除
查看虚悬镜像
docker image ls -f dangling=true
删除虚悬镜像
docker image prune