Docker的学习与使用

参考资料

1. 基本概念

1.1 镜像(Image)

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

  • 分层存储

    镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

1.2 容器(Container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

1.3 仓库(Repository)

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。

1.4 docker的下载安装

https://www.docker.com/

2. Docker的使用

  • 获取镜像:docker pull ubuntu:18.04
  • 镜像加速器:国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。

如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

  • 镜像运行:docker run -it --rm ubuntu:18.04 bash

    -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。

    –rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 –rm 可以避免浪费空间。

    ubuntu:18.04:这是指用ubuntu:18.04镜像为基础来启动容器。

    bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash。

    通过exit退出了这个容器

  • docker system df:通过 docker system df 命令来便捷的查看镜像、容器、数据卷所占用的空间

2.1 虚悬镜像

上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为

docker image ls -f dangling=true:这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
docker image prune: 删除所有虚悬镜像

2.2