Docker镜像的基本了解和使用

获取镜像

许多优质的镜像都可以在docker hub 上获取使用
https://hub.docker.com/search/?q=&type=image

点开网站可以看见众多优质镜像可供使用,

从 Docker Registry 获取镜像的命令是 docker pull 。其命令格式为:

 docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

格式说明如下:
Docker Registry地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker Hub。

仓库名:如之前所说,这里的仓库名是两段式名称,既 <用户名>/<软件名> 。 对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜 像。

比如: docker pull ubuntu:18.04
上面的命令中没有给出 Docker Registry 地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 ubuntu:18.04 ,因此将会获取官方镜像 library/ubuntu 仓库中标签为 14.04 的镜像。

再有就是一些 常用的docker 命令:

1.docker images :列出已经下载下来的镜像
列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。镜像ID是镜像唯一标识,同一个镜像可以对应多个标签

2.docker images [仓库名和标签] :根据仓库名和标签列出镜像

3.docker images -f since=mongo:3.2 :在 mongo:3.2 之后建立的镜像,-f 简写–filter,使用过滤列出镜像,since=mongo:3.2指在mongo:3.2之后,相反 before 之前。

4.docker commit:docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]],们定制好了变化,我们希望能将其保存下来形成镜像。 要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修 改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可 以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠 加上容器的存储层,并构成新的镜像。

5.docker rmi [选项] <镜像1> [<镜像2> ...]:如果要删除本地的镜像,可以使用 docker rmi 命令,docker rm 命令是删除容器,不要混淆,其中, <镜像> 可以是 镜像短 ID 、 镜像长 ID 、 镜像名 或者 镜像摘要 。

使用 Dockerfile 定制镜像

镜像的定制实际上就是 定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作 的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复 的问题、镜像构建透明性的问题、体积的问题就都会解决

Dockerfile指令

COPY 复制文件

格式:
COPY <源路径>... <目标路径> 
COPY ["<源路径1>",... "<目标路径>"]
COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像 内的 <目标路径> 位置

ADD 更高级的复制文件

ADD 指令和 COPY 的格式和性质基本一致。但是<源路径>可以是一个 URL,这样docker会去下载链接的文件放到<目标路径>,官方推荐尽量使用Copy,最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。

CMD 容器启动命令

CMD 指令的格式和 RUN 相似,也是两种格式:
 shell 格式: CMD <命令> 
 exec 格式: CMD ["可执行文件", "参数1", "参数2"...] 
 参数列表格式: CMD ["参数1", "参数2"...] 。在指定了 ENTRYPOINT 指 令后,用 CMD 指定具体的参数。
 CMD 指令就是用于 指定默认的容器主进程的启动命令的。

ENTRYPOINT 入口点

 shell 格式: CMD <命令> 
 exec 格式: CMD ["可执行文件", "参数1", "参数2"...] 
 当指定了 ENTRYPOINT 后, CMD 的含义就发生了改变,不再是直接的运行其命 令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令,换句话说实际执行 时,将变为:
  <ENTRYPOINT> "<CMD>"

ENV 设置环境变量

  格式有两种: 
  ENV <key> <value> 
  ENV <key1>=<value1> <key2>=<value2>...
  这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 RUN ,还 是运行时的应用,都可以直接使用这里定义的环境变量。 
  ENV VERSION=1.0 DEBUG=on \ 
  	  NAME="one"
  	  这个例子中演示了如何换行,以及对含有空格的值用双引号括起来的办法
  	  在某些指令可以进行 环境变量使用:$VERSION ,加$即可
  	  下列指令可以支持环境变量展开: ADD 、 COPY 、 ENV 、 EXPOSE 、 LABEL 、 USER 、 WORKDIR 、 VOLUME 、 STOPSIGNAL 、 ONBUILD 。

ARG 构建参数

  格式: ARG <参数名>[=<默认值>]
  构建参数和 ENV 的效果一样,都是设置环境变量。所不同的是, ARG 所设置的 构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。

VOLUME 定义匿名卷

  格式为:
  VOLUME ["<路径1>", "<路径2>"...] 
  VOLUME <路径>
  为了防止运行时用户忘记将动态文件所保存目 录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷,这 样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入 大量数据。

EXPOSE 声明端口

  
  格式为 
  EXPOSE <端口1> [<端口2>...]

WORKDIR 指定工作目录

  格式为 
  WORKDIR <工作目录路径> 。
  使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前 目录就被改为指定的目录,该目录需要已经存在, WORKDIR 并不会帮你建立目录。
  如果需要改变以后各层的工作目录的位置,那么应该使用 WORKDIR 指令。

USER 指定当前用户

  格式: 
  USER <用户名>
  USER 指令和 WORKDIR 相似,都是改变环境状态并影响以后的层。 WORKDIR 是改变工作目录, USER 则是改变之后层的执行 RUN , CMD 以及 ENTRYPOINT 这类命令的身份。 当然,和 WORKDIR 一样, USER 只是帮助你切换到指定用户而已,这个用户必 须是事先建立好的,否则无法切换。

HEALTHCHECK 健康检查

  格式:
  HEALTHCHECK [选项] CMD <命令> :设置检查容器健康状况的命令 
  HEALTHCHECK NONE :如果基础镜像有健康检查指令,使用这行可以屏蔽掉 其健康检查指令

ONBUILD 为他人做嫁衣裳

  格式: 
  ONBUILD <其它指令> 。 
  ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等, 而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去 构建下一级镜像的时候才会被执行。 Dockerfile 中的其它指令都是为了定制当前镜像而准备的,唯有 ONBUILD 是 为了帮助别人定制自己而准备的。

镜像的实现原理

Docker 镜像是怎么实现增量的修改和维护的?

每个镜像都由很多层次构成, Docker 使用 Union FS 将这些不同的层结合到一个镜像中去。 通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到 同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一 起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一 些写操作。 Docker 在 AUFS 上构建的容器也是利用了类似的原理。

Dockerfie 官方文档:https://docs.docker.com/engine/reference/builder/
Dockerfile 最佳实践文档:https://docs.docker.com/engine/userguide/eng- image/dockerfile_best-practices/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值