Docker的学习与使用
Docker的学习与使用
1. 基本概念
1.1 镜像(Image)
Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
分层存储
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
1.2 容器(Container)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
1.3 仓库(Repository)
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
1.4 docker的下载安装
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
: 删除所有虚悬镜像