【Docker】Dockerfile

本文详细介绍了Dockerfile的基本内容,包括FROM、RUN、EXPOSE等关键指令的用法,以及Docker执行Dockerfile脚本的流程。重点讲解了FROM作为基础镜像,RUN在构建和运行中的区别,以及ENTRYPOINT和CMD的作用和差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile是用来用来构建Docker镜像的文本文件,是由一条一条构建镜像所需要的指令和参数构成的脚本文件。构建过程:(1)编写Dockerfile文件;(2)docker build构建镜像;(3)docker run运行镜像。

一、基础内容

1、每条保留字指令(关键字)都必须是大写字母且后面跟随至少一个参数。

2、指令按照从上到下的顺序执行。

3、#表示注释。

4、每条指令都会创建一个新的镜像并对镜像进行提交。

二、Docker执行Dockerfile脚本的大致流程

1、docker首先从基础镜像运行一个容器(From)。

2、执行一条指令并该指令会对容器作出修改。

3、执行类似docker commit的操作提交一个新的镜像层。

4、docker会再次基于刚刚提交的镜像运行一个新的容器。

5、执行dockerfile中的下一条指令,循环往复直到所有指令都执行完成。

三、Dockerfile常用保留字

1、FROM:dockerfile第一条必须是FROM。指明基础镜像即要构建的新镜像是基于哪个镜像构建的(也可理解为模板)。

2、RUN:在构建容器时需要执行的命令,RUN在docker build时运行。

eg:RUN yum -y install vim 

3、EXPOSE:当前容器对外暴露的端口。

4、WORKDIR:指定在容器创建后,终端登陆后进入的默认工作目录(一个落脚点)。

5、USER:指定该镜像需要什么样的用户权限才能执行,默认为root。

6、ENV:在构建镜像的过程中设置环境变量(相当于代码中设置全局变量,格式key/value)。此环境变量可以在后续的RUN指令或其他指令中使用。

eg:ENV MY_PATH/user/myhome

    WORKDIR $MY_PATH

7、VOLUME:容器数据卷,用于数据的保存和持久化。

8、ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包(ADD=COPY+解压)。

9、COPY:从构建上下文目录中<源路径>的文件或目录复制到新一层镜像内的<目标路径>的位置。类似于ADD将文件或目录从宿主机拷贝到镜像中。

格式:COPY src dest 或 COPY["src","dest"](dest如果不存在的话系统会自动创建)

10、CMD:指定容器启动时要干的事。

注意:可以有多个CMD指令,但只有最后一个生效且CMD会被docker run之后的参数替换。

和RUN的区别:CMD是在docker run时运行;RUN是在docker build时运行。

格式:CMD <命令>

11、ENTRYPOINT:用来指定一个容器启动时要运行的命令(和CMD相似,CMD一般在变参时使用),但是ENTRYPOINT不会被docker run之后的参数覆盖而且这些参数还会被当成参数传递给ENTRYPOINT指定的程序。

格式:ENTRYPOINT["<executeable>","<param1>","<param2>",...]

ENTRYPOINT和CMD一起使用:此时CMD含义就发生了变化,就变成给ENTRYPOINT传参的了(此时由CMD传递的参数是可变的,如果想改变的话直接在run时后边加参数就可以了)。

eg:假设已经构建了nginx:test镜像
此时Dockerfile中内容如下:
--------------------------------------
FROM nginx

ENTRYPOINT["nginx","-c"]        #定参
CMD["/etc/nginx/nginx.conf"]    #变参
--------------------------------------
按照Dockerfile编写执行传参执行
Docker命令docker run nginx:testdocker run nginx:test -c /etc/nginx/new.conf
根据Dockerfile衍生出的实际命令nginx -c /etc/nginx/nginx.conf

nginx -c /etc/nginx/new.conf(把CMD中内容覆盖了)

参考内容:

B站尚硅谷Docker教程

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值