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

发布时间:2020-06-05 17:02:36 作者:Leah
来源:亿速云 阅读:297

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 "executable","param1","param2"
每条RUN指令是创建镜像是执行的命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个奖项的任何一个历史提交点来创建,类似远吗的版本控制。
exec方式会被解析为一个JSON数组,所以必须使用双引导而不是单引导。exec方式不会调用一个命令shell所以也就不会集成相应的变量
如:RUN [ "echo","$HOME" ]  这种方式是不会达到输出HOME变量的
正确的方式应该是: RUN [ "sh","-c","echo","$HOME" ]
RUN产生的缓存在一次构建的时候是不会失效的,会被重用,可以使用--no-cache选项,即docker build --no-cache ,如此便不会缓存

4、CMD
CMD 有三种使用方式:
1)CMD "executable","param1","param2"
2)CMD "param1","param2"
3)CMD "commamd","param1","param2"
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="john" 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  "executable","param1","param2"
ENTRYPOINT   command  param1  param2(shell form)
配置容器启动后执行的命令,并且不可被docker  run提供的参数覆盖,而CMD是可以被覆盖的。如果覆盖则可以使用docker  run  --entrypoint选项
每个dockerfile中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效

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

通过 Dockerfile 使用ENTRYPOINT展示前台运行 Apache 服务
FROM debian:stable
RUN yum update && yum install httpd -y
EXPOSE 80 443
VOLUME ["/var/www/html", "/var/log/apache2", "/etc/apache2"]
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

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

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

11、USER
使用哪个用户跑container
例:
ENTRYPOINT ["memcached"]
USER daemon

12、WORKDIR
相当于CD命令

13、ONBUILD
ONBUILD 指令的命令在构建镜像时不执行,而是在他的子镜像中执行

看完上述内容,你们对Docker容器的镜像文件Dockerfile有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读。

推荐阅读:
  1. Docker容器的介绍和容器的使用
  2. Dockerfile的介绍和使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker镜像 dockerfile dock

上一篇:Java中的JVM体系结构以及JVM的不同组件介绍

下一篇:线程、进程与程序这三者有什么区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》