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 代理和不使用代理的服务器列表。?
操作背景: centos 7镜像具备vim + ifconfig +jdk8
Dokerfile? ?<<---------注意文件名是这个
1-新建文件夹 上传文件
[root@iZuf6hxabqikytnrumsi4gZ /]# mkdir myfile
?
2- 创建如下Dokerfile文件
[root@iZuf6hxabqikytnrumsi4gZ myfile]# vim Dokerfile
3- 编写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:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
在当前目录下构建
docker build -t centosJava8:1.0 .
构建之前先核对下,我这用的cenos7
1-拉去基础镜像
[root@iZuf6hxabqikytnrumsi4gZ myfile]# docker pull centos:7
2-核对镜像
[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.0
3- 查看
[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 204MB
4-运行容器
[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
?