Dockerfile制作镜像

dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本文件执行,就能制作出镜像了

一句话什么是dockerfile

Dockerfile : automate the steps of creating a Docker image

dockerfile脚本指令

  1. FROM base-image 指定基础镜像,作为构建新镜像的底层
  2. MAINTAINER zhangjiaqi77777@outlook.com 指定镜像的构建者
  3. RUN 命令 后面的命令就像类似shell脚本的命令一样。每一个RUN就是一层镜像。
  4. CMD 指令 用于指定启动容器默认的主进程命令。因为容器其实就是进程,它不像虚拟机那样启动后不运行任何东西也能静默运行。容器需要有一个主进程一直持续,然后就会退出。可以想象,容器就是一个包着一个主进程在那里跑,主进程就是容器的灵魂,灵魂没了,容器也会消失。注意命令:如果是shell 格式 sh -c "执行行命令" 那么这是通过shell作为主程序运行,当shell执行完子进程,shell就执行完成,主进程也就退出,那么容器也就退出了。所以我们尽量使用直接二进制文件执行的方式,不用shell -c 执行。而是CMD ["", "", ""] 将命令空格拆分到列表中。这样只要主进程一致运行,那么容器也就不会退出。
  5. ENTRYPOINT 后面跟上 ["", "", ""] 命令 An ENTRYPOINT allows you to configure a container that will run as an executable 这样容器在启动时,如docker run ,容器像是一个可执行程序一样,执行ENTRYPOINT 指定的可执行程序,并将CMD 主进程的命令列表,作为参数传递给ENTRYPOINT。 有什么作用,可以作为启动容器主进程前的预处理程序。如检查设置相关。。。(dockerfile只能有一个)
  6. COPY 指令 从外界(URL)复制文件到容器的文件系统中
  7. ADD 指令 类似COPY,除了URL外还支持一个归档文件,并在copy到目的路径后解包。
  8. ENV 设置容器中的环境变量
  9. ARG 定义build时的上下文变量,这里的变量定义可以设置默认值,如果在docker build --build-arg 传入了对应名字的变量时,这个变量值将使用传入的值。类似于python脚本的通过argv接受参数功能。ARG定义的变量取值方式和EVN一样,前面加$,关于ARG与ENV名称冲突,已ENV优先。
  10. LABEL 设置一些元信息,LABEL设定的在镜像间时可继承的。
  11. WORKDIR /home/test 指定工作路径,像RUN,CMD, ENTRYPOINT, COPY, ADD 的工作目录。可以多个WORKDIR 指定,来切换路径,并且可以相对路径。
  12. VOLUME指令 由于容器运行时产生的数据需要持久化,那么就需要给容器创建挂载点,挂载点就是VOLUME指令指定的,这样就容器就可以将宿主机或者其它容器的卷挂在到这个点上。
  13. ONBUILD 是在作为基础镜像时,在下游使用本镜像时,出发这个操作在下游build上下文环境中。
  14. USER 为运行之命令进程的用户或用户组。
  15. EXPOSE 和VOLUME类似,如果容器要提供网络服务,那么传输层的端口可以通过EXPOSE先指定。但是不一定马上就要使用。

小结

  1. 区分CMD ENTRYPOINT的功能
  2. 理解VOLUME EXPOSE 这两个对外接口
  3. ARG 与 ENV 冲突的话,优先级
  4. USER 指定进程用户用户组相关
  5. RUN 是基础镜像中执行的命令

最新文章

  1. load和initialize方法
  2. jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组
  3. string与char之间的互相转换
  4. mave之:java的web项目必须要的三个jar的pom形式
  5. java学习___File类的创建
  6. UI篇--布局问题
  7. docker+tomcat+java配置(ubuntu)
  8. phalcon做日报告提交平台总结
  9. Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
  10. JS框架~Angularjs
  11. java的JCombobox实现中国省市区三级联动
  12. 详解iOS7升级细节:引领视觉革命
  13. New Life With 2018
  14. CentOS7像外部163邮箱发送邮件
  15. pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
  16. mysql查看每个数据库所占磁盘大小
  17. 活代码LINQ——04
  18. Sublime 中文乱码问题
  19. 前端测试框架Jest系列教程 -- Expect(验证)
  20. 几道cf水题

热门文章

  1. [PHP] PHP汉字转拼音的方法
  2. awesome-RecSys
  3. R语言排序 -- sort() order() rank()
  4. Cut 命令截取不同空格的string
  5. 1-7docke的网络模式
  6. java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏
  7. Docker 版rocketmq部署
  8. Python3第三方组件最新版本追踪实现
  9. [转帖]【rinetd】CentOS7.x上轻量级TCP转发工具rinetd的安装配置
  10. Mysql 8.0版本开始,不允许创建 MyISAM 分区表