docker 保留关键字
验证ENV,WORKDIR,RUN,CMD指令
# 基础镜像,基于centos
FROM centos
# 设置维护者的姓名、邮箱地址
MAINTAINER leyton<leyton01@protonmail.com>
# 配置环境变量
ENV MY_PATH /usr/local
# 设置默认的工作目录
WORKDIR $MY_PATH
# 执行两条安装语句来安装vim、net-tools
RUN yum -y install vim
RUN yum -y install net-tools
# 容器启动时运行的命令
CMD echo $MY_PATH
CMD echo "success............ok"
CMD /bin/bash
# docker run -it centos:v1 #默认是最后cmd指令生效了
[root@c5701b36bcaa local]# pwd
/usr/local
# docker run -it centos:v1 ls -al /tmp #覆盖了镜像中的cmd指令
total 36
drwxrwxrwt 1 root root 4096 Nov 3 09:01 .
drwxr-xr-x 1 root root 4096 Nov 3 12:13 ..
drwxrwxrwt 2 root root 4096 Aug 9 21:40 .ICE-unix
drwxrwxrwt 2 root root 4096 Aug 9 21:40 .Test-unix
drwxrwxrwt 2 root root 4096 Aug 9 21:40 .X11-unix
drwxrwxrwt 2 root root 4096 Aug 9 21:40 .XIM-unix
drwxrwxrwt 2 root root 4096 Aug 9 21:40 .font-unix
-rwx------ 1 root root 671 Aug 9 21:40 ks-script-2n9owwnh
-rwx------ 1 root root 1379 Aug 9 21:40 ks-script-xm1o5azb
build一个镜像的步骤和过程如下:
验证多个CMD只有最后一个生效
# 前面内容一样
# 容器启动时运行的命令
CMD echo $MY_PATH
CMD /bin/bash
CMD echo "success............ok"
[root@db004-hf /opt/software/docker] em1 = 172.16.110.11
# docker run -it centos:v2
success............ok
[root@db004-hf /opt/software/docker] em1 = 172.16.110.11
# 运行后看到
# docker run -it centos:v2 #打印出来的是最后一个CMD,并不是第二个cmd进入容器后,然后再打印
success............ok
验证多个ENTRYPOINT的情况下
FROM centos
CMD echo "Hello world123"
ENTRYPOINT echo "Hello world11"
ENTRYPOINT echo "Hello world22"
# docker run -it t1:v2
Hello world22
发现虽然有cmd和entrypoint,但是只有最后一个entrypoint有效。cmd和第一个entrypoint是无效的。
ENTRYPOINT
ENTRYPOINT指令允许您配置将作为可执行文件运行的容器。它看起来类似于CMD,因为它还允许您使用参数指定命令。区别在于当Docker容器使用命令行参数运行时,ENTRYPOINT命令不会忽略参数。
ENTRYPOINT 有两种形式:
- ENTRYPOINT ["executable", "param1", "param2"] (exec 形式,推荐)
- ENTRYPOINT command param1 param2 (shell 形式)
选择ENTRYPOINT形式时要非常小心,因为不同形式执行结果会有很大差异。
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]
#当容器运行docker run -it 时将输出
Hello world
但是当容器运行docker run -it tom时,将输出
Hello tom
volume数据卷