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]

Docker镜像与仓库(二)Dockerfile的更多相关文章

  1. 第四章 使用Docker镜像和仓库(二)

    第四章 使用Docker镜像和仓库(二) 回顾: 开始学习之前,我先pull下来ubuntu和fedora镜像 [#9#cloudsoar@cloudsoar-virtual-machine ~]$s ...

  2. Docker基本命令与使用 —— Docker镜像与仓库(二)

    一.查看和删除镜像 1.Docker Image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount) (存储位置 /var/lib/docker) docker info 2.列 ...

  3. 第四章 使用Docker镜像和仓库

    第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...

  4. Docker镜像与仓库(一)

    Docker镜像与仓库(一) Docker镜像与仓库(一) 如何查找镜像? Docker Hub https://registry.hub.docker.com docker search [OPTI ...

  5. 04_Docker入门(下)之docker镜像和仓库的使用

    docker镜像和仓库 镜像介绍 docker镜像是由文件系统叠加而成的.最低端是一个引导文件系统,即bootfs.当一个容器启动后,它会将被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存以 ...

  6. Docker之- 使用Docker 镜像和仓库

    目录 使用Docker 镜像和仓库 什么是 Docker 镜像 列出 Docker 镜像 tag 标签 Docker Hub 拉取镜像 查找镜像 构建镜像 创建Docker Hub 账号 使用 Doc ...

  7. docker镜像的仓库

    一.docker镜像的仓库 --- repos-registry的创建: 仓库分为公共仓库和私有仓库 DockerHub的官方仓库 https://hub.docker.com DockerPool社 ...

  8. Docker镜像的仓库及底层依赖的核心技术(3)

    一.docker镜像的仓库 仓库分为公共仓库和私有仓库 DockerHub的官方仓库:https://hub.docker.com DockerPool社区仓库:https://dl.dockerpo ...

  9. docker镜像与仓库

    1.docker image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount)   2.镜像存储地址 /var/lib/docker 3.镜像操作 列出镜像 镜像标签和仓库 查 ...

随机推荐

  1. js在线题目

    在线题目: https://www.nowcoder.com/ta/js-assessment

  2. android开发时间和日期的代码实现工具类(一)

    android开发时间和日期工具类的代码实现: package com.gzcivil.utils; import android.annotation.SuppressLint; import an ...

  3. hive 函数学习

    NAME PRICE ---- ----- AAA 1.59 AAA 2.00 AAA 0.75 BBB 3.48 BBB 2.19 BBB 0.99 BBB 2.50 I would like to ...

  4. 解决Qt中QTableWidget类方法setItem 时导致程序崩溃问题

    在为一个音乐播放器增加功能时莫明奇妙的出现程序崩溃,定位到是由于QTableWidget 的setItem方法导致的,最终在此处找到了解决方式. 大致是说不能在setItem之前连接cellChang ...

  5. Python的基础--对象

    对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识符. ...

  6. jsp中添加弹窗口并且实现向后台双向传递数据

    思路:使用jquery-easyui框架实现弹出div,在jsp初始化时从后台获得数据初始化div中的form表单元素的value属性,从而获得后台数据.在点击确定按钮时使用ajax向后台发送数据. ...

  7. 阿里云的linux命令小结

    /** ---------------- [ 华丽分割线 ] ------------------------ ### 121.40.120.167 操作 ### 1.启动 nginx cd /usr ...

  8. PHP中将对数据库的操作,封装成一个工具类以及学会使用面向对象的方式进行编程

    <?php class SqlTool { //属性 private $conn; private $host="localhost"; private $user=&quo ...

  9. 算法分析-动态规划(cut_rod)

    什么是动态规划,我们要如何描述它? 动态规划算法通常基于一个递推公式及一个或多个初始状态. 当前子问题的解将由上一次子问题的解推出.使用动态规划来解题只需要多项式时间复杂度, 因此它比回溯法.暴力法等 ...

  10. 解决 MySQL manager or server PID file could not be found! 的方法

    [root@centos var]# service mysqld stop MySQL manager or server PID file could not be found!       [F ...