为了账号安全,请及时绑定邮箱和手机立即绑定

Docker学习笔记(4)——编写Dockerfile

标签:
Docker

例子

FROM alpine
WORKDIR /usr
VOLUME /app
ENV MY_ENV my_valueCMD ["/"]
ENTRYPOINT ["ls"]

构建Dockerfile

docker build -t my-image .

运行该image:

docker run my-image

常用Dockerfile命令

命令用途例子
FROM设置基础的imageFROM alpine
MAINTAINER维护者信息MAINTAINER xiaoming
RUN在构建image的时候运行的命令RUN apt-get update
ADD向image中添加文件,可添加URL资源ADD /etc/config /etc/config
COPY和ADD一样,但只能拷贝宿主机上的文件COPY config-file config-file
ENV设置环境便令ENV MY_ENV_URL http://www.baidu.com
CMD在启动contianer的时候运行的命令CMD date
ENTRYPOINT在启动container的时候运行命令,覆盖CMDENTRYPOINT echo
EXPOSE声明向外暴露的网络端口EXPOSE 80
VOLUME创建一个volume,并mount到container中的指定目录VOLUME /app
WORKDIR声明工作路径WORKDIR /app
HEALTHCHECK健康检查HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1

CMD和ENTRYPOINT的区别

在默认情况下,CMD和ENTRYPOINT的行为是一样的,都是指定在运行container的时候需要运行的主进程。

CMD和ENTRYPOINT都有shell模式和exec模式,在shell模式下,container的主进程通过sh为入口,在sh中再执行CMD/ENTRYPOINT所指定的命令,在exec模式下,container直接就执行CMD/ENTRYPOINT所指定的命令。

在shell模式下,设置命令如下:

CMD ls /
ENTRYPOINT ls /

在exec模式下,设置命令如下:

CMD ["ls", "/"]
ENTRYPOINT  ["ls", "/"]

在shell模式下,ENTRYPOINT会覆盖CMD。在exec模式下,CMD所设置的参数会成为ENTRYPOINT的参数,如下:

CMD ["/"]
ENTRYPOINT  ["ls"]

在运行上述Dockerfile所对应的container时:

docker run image

此时的效果相当于执行了ls /,即CMD作为参数跟到了ENTRYPOINT后面。

此时我们也可以在命令行中覆盖CMD:

docker run image /usr

此时则相当于ls /usr

在运行image时,要覆盖CMD可以直接将覆盖的参数跟到image后面,如果要覆盖ENTRYPOINT则需要通过--entrypoint设置。通常来说,如果我们的container要运行一个应用程序,比如java,那么可以通过ENTRYPOINT设置java命令,然后用CMD设置java程序的默认命令行参数,之后在实际运行的时候再重新指定参数。

EXPOSE

  • 如果不使用EXPOSE,那么container中的端口只能通过-p向外发布(但是使用非默认bridge网络的container除外)

  • 如果使用了EXPOSE,那么可以通过docker run时使用-P将所有EXPOSE的端口映射到宿主机的随机端口

  • 如果使用了EXPOSE,那么也可以通过-p向外发布

Dockerfile最佳实践

请参考Docker官方文档



作者:无知者云
链接:https://www.jianshu.com/p/b37914d6a865

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消