Docker镜像文件与仓库(二)

Docker镜像文件与仓库(二)

Dockerfile指令


Dockerfile格式:

1.#Comment注释
2.INSTRUCTION大写的指令名 argument参数

  • FROM
1.FROM <image>
2.FROM <image>:<tag>
3.#通过FROM指定的镜像名都必须是已经存在的镜像,这个镜像叫做基础镜像,而且必须是第一条非注释指令
  • MAINTAINER
1.MAINTAINER <name>
2.#指定镜像的作者信息,包含镜像的所有者和联系信息
  • RUN
1.#指定当前镜像中运行的命令
2.RUN <command> (shell模式)
3. /bin/sh -c command
4. 比如 RUN echo hello
5.RUN ["executable","param1","param2"] (exec模式)
6. 比如 RUN ["/bin/bash","-c","echo hello"]
  • EXPOSE
1.EXPOSE <port> [<port>...]
2.#指定运行该镜像文件的容器使用的端口,但是我们在运行容器的时候仍然要指定端口,因为dockerfile写的端口只是为了告诉docker这个容器在运行的时候可能会使用哪些端口
3.docker run -p 80 -d test nginx -g "daemon off;"
  • CMD
1.CMD ["executable","param1","param2"] (exec模式)
2.CMD command param1 param2 (shell模式)
3.CMD ["param1","param2"] (作为ENTRYPOINT指令的默认参数)
4.#CMD指令是用来指定容器启动时的默认情况
  • ENTRYPOINT
1.ENTRYPOINT ["executable","param1","param2"] (exec模式)
2.ENTRYPOINT command param1 param2 (shell模式)
3.#CMD能被覆盖,而ENTRYPOINT不会
  • ADD
1.ADD <src>...<dest>
2.ADD ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
  • COPY
1.COPY <src>...<dest>
2.COPY ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)

ADD vs. COPY

  • ADD包含类似tar的解压功能
  • 如果单纯复制文件,Docker推荐使用COPY

    • VOLUME
1.VOLUME ["/data"]
2.#卷,对于文件共享来说
  • WORKDIR
1.WORKDIR /path/to/workdir
2.#为后面的指令指定工作目录
  • ENV
1.ENV <key> <value>
2.ENV <key>=<value> ...
3.#用来设置环境变量
  • USER
1.USER daemon 
2.#指定镜像文件为什么样的用户运行
3. USER user
4. USER user:group
5. USER user:gid
6. USER uid
7. USER uid:gid
8. USER uid:group
9.#默认使用root用户
  • ONBUILD
1.ONBUILD [INSTRUCTION]
2.#能够为镜像添加触发器
3.#当一个镜像被其他镜像作为基础镜像时执行
4.#会在构建过程中插入指令

Dockerfile构建过程

  • 从基础镜像运行一个容器
  • 执行一条指令,对容器做出修改
  • 执行类似docker commit的操作,提交一个新的镜像层
  • 再基于刚提交的镜像层运行一个新容器
  • 执行Dockerfile中的下一条指令,直至所有指令执行完毕

使用中间层镜像进行调试的好处

查找错误

构建缓存:能使下一次启动时速度加快

如果想不使用缓存docker build --no-cache

对Dockerfile进行修改,然后启动的时候就从修改的地方开始刷新缓存

查看镜像构建的过程docker history [image]

最新文章

  1. ViewStateMode vs EnableViewState
  2. rlwrap-0.37.tar.gz实现sqlplus上下翻页
  3. [kuangbin带你飞]专题十五 数位DP
  4. Android UI效果实现——滑动模糊渐变效果实现
  5. Android使用pull解析xml
  6. Readonly and other things about C++
  7. java 面向对象编程。。。。
  8. 网卡的 Ring Buffer 详解
  9. range 小数据池介绍
  10. C#多线程编程实战(二)
  11. 了解java虚拟机—在TALB上分配对象(10)
  12. POJ 1375 Intervals 光源投影【平面几何】
  13. python 简单了解namedtuple
  14. Java模拟POST请求发送二进制数据
  15. SQL Server 通过TSQL(存储过程)用MSXML去调用Webservice
  16. 使用before_request来做权限和用户检查
  17. mac配置--ant
  18. 第2章—装配Bean—通过java代码装配bean
  19. Excel开发之旅(三)——添加侧边工具栏
  20. 简单实现VUE的双向数据绑定

热门文章

  1. jQuery关于mouseover和mouseenter的区别
  2. C#文件读写操作
  3. Android中view的事件
  4. sql中的split方法
  5. 去掉UItableview headerview黏性
  6. Java的常见误区与细节
  7. mysql优化(1) 观察服务器周期性变化
  8. jquery1.11 操作checkbox:全选、取消全选、获取选择元素、获取取消选择元素(总结)
  9. Flink Program Guide (5) -- 预定义的Timestamp Extractor / Watermark Emitter (DataStream API编程指导 -- For Java)
  10. Flink Program Guide (4) -- 时间戳和Watermark生成(DataStream API编程指导 -- For Java)