Docker容器的镜像文件Dockerfile的介绍

[复制链接]

826

主题

826

帖子

446

积分

中级会员

Rank: 3Rank: 3

积分
446
分享到:
发表于 2022-6-16 16:58:02 | 显示全部楼层 |阅读模式
这篇文章为大家带来有关Docker容器的镜像文件Dockerfile的详细介绍。大部分知识点都是大家经常用到的,为此分享给大家做个参考。一起跟随小编过来看看吧。dockerfile 指令选项:

1、FROM
用法: FROM <image>

1)from指定构建镜像的基础源镜像,如果本地没有指定这个镜像,则会自动从docker公共仓库中pull下来

2)from必须是dockerfile中非注释行的第一个命令,也就是说写一个一个dockerfile必须从(除了注释以外)from语句开始

3)from可以在一个dockerfile中出现多次,如果有需求在一个dockerfile中创建多个镜像

4)如果from语句没有指定镜像的标签,则默认就使用latest的标签

2、MAINTAINER
用法: MAINTAINER <name>
指定创建镜像的用户

3、RUN

RUN:两种使用方式

1) RUN

2) RUN
&quot;executable&quot;,&quot;param1&quot;,&quot;param2&quot;
每条RUN指令是创建镜像是执行的命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个奖项的任何一个历史提交点来创建,类似远吗的版本控制。

exec方式会被解析为一个JSON数组,所以必须使用双引导而不是单引导。exec方式不会调用一个命令shell所以也就不会集成相应的变量
如:RUN [
&quot;echo&quot;,&quot;$HOME&quot; ] 这种方式是不会达到输出HOME变量的
正确的方式应该是: RUN [
&quot;sh&quot;,&quot;-c&quot;,&quot;echo&quot;,&quot;$HOME&quot;
]

RUN产生的缓存在一次构建的时候是不会失效的,会被重用,可以使用--no-cache选项,即docker build --no-cache ,如此便不会缓存

4、CMD

CMD 有三种使用方式:

1)CMD &quot;executable&quot;,&quot;param1&quot;,&quot;param2&quot;

2)CMD
&quot;param1&quot;,&quot;param2&quot;

3)CMD &quot;commamd&quot;,&quot;param1&quot;,&quot;param2&quot;

CMD就是容器启动时执行的命令,如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
注:CMD指令在dockerfile中只能使用一次,如果有多个,则只有最后一个会生效

CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令

CMD会在启动容器的时候执行,build时不执行,而RUN只是在构建的时候执行,后续镜像构建完成后启动容器就与RUN无关了

5、EXPOSE
用法:EXPOSE <port> [<port>...]
告诉docker服务端容器对外映射的本地端口,需要在docker run 的时候使用-p或者-P选项生效

6、ENV

ENV <key> <value>#这样设置只能设置一个变量

ENV <key>=<value> .....#这样允许写多个变量
例子:

ENV myname=&quot;john&quot; myDOg=rex\ the\ dog\

mycat=fluffy
相当于

ENV myName John

ENV myDog Rex The Dog

ENV myCat fluffy

7、ADD
用法:ADD <源地址> <目标地址>

ADD复制本地主机文件、目录或者远程文件URLS 添加到容器指定的路径中去。
支持通过Go的正则模糊匹配
例:

ADD hom*/mydir#以hom开头的所有文件拷贝到容器中的/mydir

ADD hom?.txt /mydir#以hom开头.txt结尾的所有文件拷贝到容器中的/mydir

8、COPY
用法:COPY <源地址> <目标地址>

copy复制新文件到容器中去,并且添加到容器指定的路径中,用法和ADD相同,唯一不同的是不能指定远程配置文件URLS

9、ENTRYPOINT
用法:

ENTRYPOINT &quot;executable&quot;,&quot;param1&quot;,&quot;param2&quot;

ENTRYPOINTcommand param1 param2(shell
form)
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖,而CMD是可以被覆盖的。如果覆盖则可以使用docker run --entrypoint选项
每个dockerfile中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效

Exec form ENTRYPOINT 例子:
通过 ENTRYPOINT使用exec form方式设置稳定的默认命令和选项,而使用CMD添加默认之外经常被改动的选项。

FROM ubuntu

ENTRYPOINT [&quot;top&quot;, &quot;-b&quot;]

CMD [&quot;-c&quot;]
通过 Dockerfile 使用ENTRYPOINT展示前台运行 Apache 服务

FROM debian:stable

RUN yum update &amp;&amp; yum install httpd -y

EXPOSE 80 443

VOLUME [&quot;/var/www/html&quot;, &quot;/var/log/apache2&quot;,
&quot;/etc/apache2&quot;]

ENTRYPOINT [&quot;/usr/sbin/apache2ctl&quot;, &quot;-D&quot;,
&quot;FOREGROUND&quot;]

shell form ENTRYPOINT 例子:
这种方式会在/bin/sh -c 中执行,会忽略任何CMD或者docker run命令选项,为了确保docker stop能够停止长时间运行ENTRYPOINT的容器,确保执行的时间使用exec选项

10、VOLUME
用法:VOLUME [&quot;/data&quot;]
创建一个可以从本地主机或其他容器的挂载点

11、USER
使用哪个用户跑container
例:

ENTRYPOINT [&quot;memcached&quot;]

USER daemon

12、WORKDIR
相当于CD命令

13、ONBUILD

ONBUILD 指令的命令在构建镜像时不执行,而是在他的子镜像中执行
云专线_海外IDC http://www.vecloud.com/

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表