Dockerfile体系结构之保留字指令
保留字指令
- FROM:基础镜像,当前新镜像是基于哪个镜像的。
- MAINTAINER:镜像维护者的姓名和邮箱地址。
- RUN:容器构建时需要运行的命令。
- EXPOSE:当前容器对外暴露出的端口。
- VOLUME:容器数据卷,用于数据保存和持久化工作。
- WORKDIR:指定工作目录。指定在创建容器后,终端默认登录进容器后的工作目录。
- ENV:用来在构建镜像过程中设置环境变量。
- ARG:构建参数,与ENV作用一致。不过作用域不一样。ARG设置的环境变量仅对Dockerfile内有效,只有docker build的过程中有效,构建好的镜像内不存在此环境变量。
- ADD:ADD指令和COPY的使用类似(同样需求下,官方推荐使用COPY)将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和tar压缩包。
区别:ADD的优点:在执行<源文件>为tar压缩文件的话,压缩格式为gzip,bzip2及xz的情况下,会自动复制并解压到<目标路径>。 ADD的缺点:在不解压的前提下,无法复制tar压缩文件,会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
- COPY:复制命令,从上下文目录中复制文件或者目录到容器里的指定路径。
- CMD:类似于run指令,用于指定一个容器启动时运行的命令,但二者运行的时间点不同:
CMD:在docker run 时运行。
RUN:在docker build 。
CMD会被docker run之后的参数替换。
如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
- ENTRYPOINT:类似于CMD指令,
但其不会被docker run命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数追加给ENTRYPOINT指令指定的程序。
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。- ONBUILD:用于延迟构建命令的执行。当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。
- USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
- HEALTHCHECK:用于指定某个程序或着指令来监控docker容器服务的运行状态。
- LABEL:LABEL指令用来给镜像添加一些元数据(metadata),以键值对的形式。
- .dockerignore:忽略掉你不想追踪的文件。.dockerignore 文件的作用
案例
Base镜像(scratch)
Docker hub中 99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。
自定义镜像mycentos
自定义mycentos目的是我们自己的镜像具备如下:
- 登录后的默认路径
- vim编辑器
- 查看网络配置ifconfig支持
1、编写
FROM centos
MAINTAINER yyds<123@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success------------>>ok"
CMD /bin/bash
2、构建docker build -f Dockerfile文件名 -t 新镜像名字:TAG .
3、运行docker images 新镜像名字:TAG
docker run -it 新镜像名字:TAG
4、列出镜像的变更历史docker history 镜像ID
构建镜像
PS D:\opt\work> docker build -f .\Dockerfile -t mycentos:2.0 .
[+] Building 24.9s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 265B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:latest 0.0s
=> CACHED [1/4] FROM docker.io/library/centos 0.0s
=> [2/4] WORKDIR /usr/local 0.0s
=> [3/4] RUN yum -y install vim 20.9s
=> [4/4] RUN yum -y install net-tools 3.2s
=> exporting to image 0.7s
=> => exporting layers 0.7s
=> => writing image sha256:58560ac56116cdcc750f20b40a2edef2b77ac5598c4e752b651a67a25a076b9b 0.0s
=> => naming to docker.io/library/mycentos:2.0 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
-------------------查看构建的镜像----------------------------
PS D:\opt\work> docker images mycentos
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 2.0 58560ac56116 2 minutes ago 311MB
---------------------------------查看镜像功能是否制作成功-------------------------------------------------------
PS D:\opt\work> docker run -it -d mycentos:2.0
155b6b5d5e34a3d5d37d11d9b942fb5ce2b9b9efe03c3419a92c49509c964af5
PS D:\opt\work> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
155b6b5d5e34 mycentos:2.0 "/bin/sh -c /bin/bash" 4 seconds ago Up 3 seconds 80/tcp compassionate_joliot
PS D:\opt\work> docker exec -it 155b6b5d5e34 bash
[root@155b6b5d5e34 local]# pwd
/usr/local
[root@155b6b5d5e34 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 16 bytes 1312 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@155b6b5d5e34 local]# ls
bin etc games include lib lib64 libexec sbin share src
[root@155b6b5d5e34 local]# touch 1.txt
[root@155b6b5d5e34 local]# echo 123 > 1.txt
[root@155b6b5d5e34 local]# vim 1.txt
-------------------------列出镜像的变更历史------------------------------------------------------
PS D:\opt\work> docker images mycentos
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 2.0 58560ac56116 3 days ago 311MB
PS D:\opt\work> docker history 58560ac56116
IMAGE CREATED CREATED BY SIZE COMMENT
58560ac56116 3 days ago CMD ["/bin/sh" "-c" "/bin/bash"] 0B buildkit.dockerfile.v0
<missing> 3 days ago CMD ["/bin/sh" "-c" "echo \"success---------… 0B buildkit.dockerfile.v0
<missing> 3 days ago CMD ["/bin/sh" "-c" "echo $MYPATH"] 0B buildkit.dockerfile.v0
<missing> 3 days ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
<missing> 3 days ago RUN /bin/sh -c yum -y install net-tools # bu… 14.8MB buildkit.dockerfile.v0
<missing> 3 days ago RUN /bin/sh -c yum -y install vim # buildkit 64.8MB buildkit.dockerfile.v0
<missing> 3 days ago WORKDIR /usr/local 0B buildkit.dockerfile.v0
<missing> 3 days ago ENV MYPATH=/usr/local 0B buildkit.dockerfile.v0
<missing> 3 days ago MAINTAINER yyds<tongh852@163.com> 0B buildkit.dockerfile.v0
<missing> 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB