一、使用Dockerfile制作镜像

  前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像,这样类似于快照制作镜像的方式尽管操作还算比较简单,但是当生产环境规模增大,配置变得越来越复杂后,就会显得很臃肿很笨拙。所以下面使用Docker搭建LNMP介绍另一种最为普遍最为常用的容器镜像制作方式——Dockerfile.

二、什么是Dockerfile

  Dockerfile是指构建镜像的纯文本文件,其中包含制作代码的各种命令,这些命令决定了Docker镜像的组成。

  Dockerfile中的第一个非注释行必须是以 FROM 开头,且Dockerfile的首字母必须大写,在基于Dockerfile制作镜像时,一般会创建一个专用目录。

三、常用制作的Dockerfile命令

FROM :最重要的且必须为Dockerfile文件第一个非注释行。用来为将要构建的镜像指定基础镜像,也就是指定基准镜像。格式:

FROM <repositry>[:<tag>]
FROM <repositry>@<hash>

LABEL :为用户指定元数据。例如镜像作者等。用来代替旧的指令 MAINTAINER 。

COPY :将宿主机中的文件复制到创建的新镜像文件中。格式:

COPY <src>...<dest>
COPY ["<src>",..."<dest>"] #用空白字符时用此格式

  在使用 COPY 命令时要注意:

  1.源文件必须是build上下文中的路径,不能是其父目录中的文件。

  2.如果源文件是一个目录,则会复制目录下的文件与子目录,但目录本身不会被复制。

  3.如果目标目录不存在,则会自动创建。

ADD :作用与 COPY 命令基本相似,但ADD支持URL,并且ADD会自动将本地系统上的压缩格式的tar文件解压展开为一个目录至目标地址(URL路径的压缩文件不会被展开)。

WORKDIR :指定当前工作目录。

VOLUME :用来在创建的镜像中创建一个挂载点目录,以挂载宿主机上的卷或其他容器上的卷。语法格式:

VOLUME <mountpoint>

EXPOSE :用于为容器打开指定要监听的端口以实现与外部通信。可一次指定多个端口。例如: EXPOSE

ENV :用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令所调用。格式:

ENV <key> <value>
ENV <key>=<value>... #可设置多个

CMD :定义在镜像启动为容器时容器默认启动的命令。可以理解为在 docker container run 后运行的命令。如果在Dockerfile中使用多个CMD的话只会执行最后一个。例如:

CMD ls
CMD ["/sbin/nginx","-s","reload"]
CMD ["参数","参数"] #这种只有参数没有命令的写法需要与ENTRYPOINT命令结合使用,作为ENTRYPOINT的默认参数。

RUN :定义在构建镜像时要执行的命令。可理解为在 docker build 时运行的命令。也就是说RUN在镜像制作完成的时候就执行了,而CMD在将镜像启动为容器后才会被执行。

ENTRYPOINT :用于为容器指定默认运行的程序,从而使得容器像是一个单独的可执行程序。与CMD不同的是,由ENTRYPOINT启动的程序不会被docker container run 命令指定的参数所覆盖,而且这些命令参数会被当做参数传递给ENTRYPOINT指定的程序。使用语法与CMD类似。PS:在ENTRYPOINT与CMD的第三种格式搭配使用时,CMD中的参数将传递给ENTRYPOINT。例:

ENTRYPOINT ["/bin/sh","-c"]

USER :用于指定运行镜像时或RUN、CMD、等指令是的用户名或UID。用户名或UID必须是已经存在的。

HEALTHCHECK :健康状态检测相关。

最新文章

  1. 5.JAVA之GUI编程窗体事件
  2. Eclipse代码和xml文件的智能提示
  3. 2015 史考特(Scottrade)开户指南 + 招商银行香港一卡通汇款【图文教程】
  4. WeX5学习笔记
  5. 配置OpenCV产生flann\logger.h(66): error C4996: &#39;fopen&#39;: This function or variable may be unsafe问题[zz]
  6. vue-cli需要的包
  7. const的全面理解
  8. ANTLR3完全参考指南读书笔记[08]
  9. python_pycharm介绍1
  10. C#操作Word (1)Word对象模型
  11. hdu 1085
  12. 解决Appium无元素可选的如何定位
  13. 在Windows上安装Elasticsearch v5.4.2
  14. 壮美大山包-2017中国大山包国际超百公里ITRA积分赛赛记
  15. 基于touch.js 左滑删除功能
  16. sqlalchemy通过ssh连接远程mysql服务器
  17. Kubernetes---Pod的扩容和缩容
  18. 编译安装LAMP
  19. C# 转换关键字 operator
  20. Django 学习第二天——URL路由及模板渲染方式

热门文章

  1. Anaconda虚拟环境
  2. [LeetCode] Hand of Straights 一手顺子牌
  3. 31 ArcGIS中后缀一览表(持续更新中……)
  4. 使用 TRESTClient 与 TRESTRequest 作为 HTTP Client
  5. DCOS实践分享(1):基于图形化模型设计的应用容器化实践
  6. LeetCode编程训练 - 拓扑排序(Topological Sort)
  7. HashMap 相关面试题及其解答
  8. 整理4种Vue组件通信方式
  9. VMware虚拟机安装Linux系统
  10. 细说javascripe事件传播流程