CMD和ENTRYPOINT
1. 相同点:
- 只能写一条,如果写了多条,那么只有最后一条生效
- 容器启动时才运行,运行时机相同
- 不同点:
- ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
- 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数
(1)FROM
基础镜像,必须是可以下载下来的,定制的镜像都是基于 FROM 的镜像,这里的 centos 就是定制需要的
基础镜像。后续的操作都是基于 centos 镜像。
(2)MAINTAINER
指定镜像的作者信息
(3)RUN:指定在当前镜像构建过程中要运行的命令
包含两种模式
1、Shell
RUN
RUN echo hello
2、exec 模式
RUN “executable”,“param1”,“param2”
RUN [“/bin/bash”,”-c”,”echo hello”]
等价于/bin/bash -c echo hello
(4)EXPOSE 指令
仅仅只是声明端口。
作用:
1、帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
2、在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
3、可以是一个或者多个端口,也可以指定多个 EXPOSE
格式:EXPOSE <端口 1> [<端口 2>…]
(5)CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
1、CMD 在 docker run 时运行。
2、RUN 是在 docker build 构建镜像时运行的
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被
docker run 命令行参数中指定要运行的程序所覆盖。
CMD[“executable”,“param1”,“param2”](exec 模式)
CMD command (shell 模式)
CMD “param1”,”param2”
例:cd /root/dockerfile/test
cat dockerfile
#first dockerfile
FROM centos
MAINTAINER xianchao
RUN yum clean all
RUN yum install nginx -y
EXPOSE 80
CMD [“/usr/sbin/nginx”,”-g”,”daemon off;”]
构建镜像:
docker build -t=”dockerfile/test-cmd:v1” .