本文首发于公众号:Hunter后端

原文链接:Docker笔记一之镜像

从这一篇开始将介绍一些 Docker 的使用笔记,都是自己在使用过程中用到的一些笔记的积累。

首先我们来简单理解一下 Docker 的作用,我们可以将其理解成一个个的小型的 Linux 系统。

以我们的 Django 系统为例,需要运行 Django、MySQL、Redis、Nginx 等,我们可以把它们都放到各自的 Docker 容器中,然后通过 yaml 文件分别启动起来。

这样操作有一个好处,就是便于移植,也就是说在我的电脑上可以运行的系统,打包好后,放到别人的电脑上,只要也装有 Docker,也可以同样的运行,这样就不用额外的去安装和配置复杂的依赖关系。

这一篇笔记将介绍 Docker 的镜像

以下是本篇笔记目录:

  1. 镜像的拉取
  2. 镜像的基本命令

1、镜像的拉取

在前面我们介绍了,Docker 是一个小型的 Linux 系统,它包含了一个 Linux 系统运行所需的最基础的软件和相关依赖。

而我们的镜像从哪里来呢,从 Docker 仓库。

拉取命令

我们如何拉取呢,假设我们想要拉取一个 Ubuntu 镜像,命令则会是:

docker pull ubuntu

很简单对不对,然后 Docker 就会将 Docker 仓库里最近的一个 Ubuntu 版本拉取到本地。

如果我们想指定版本呢,我们想拉取 Ubuntu 18.04,或者 16.04 怎么办,加一个 : 和一个版本号即可:

docker pull ubuntu:18.04

docker pull ubuntu:16.04

如果我们想拉取一个 Python 的镜像呢,同样的操作:

docker pull python:3.6

系统就会拉取一个 Linux 系统,这个系统里除了最简约版的 Linux,还会自带一个 Python 3.6 版本。

对于我们拉取下来的镜像如何查看呢,以下是命令:

docker images

然后就可以看到输出有五栏数据,REPOSITORY、TAG、IMAGE ID、CREATED、SIZE

  • REPOSITORY 是镜像的名称,比如前面拉取的 ubuntu,python
  • TAG 是镜像的标签,比如没有指定版本的 latest,或者指定版本的 18.04,3.6
  • IMAGE ID 是每一个镜像的唯一 id,在后面使用镜像的时候,可以通过 image id 来定位
  • CREATED 表示创建时间
  • SIZE 表示镜像大小

对于镜像的大小,如果我们删除了某个镜像,会发现系统并没有减少这么多的存储空间,这是因为每一个镜像都是由很多 构成的,这个层是可以在多个镜像之间复用的。

当我们删除某个镜像,仅仅是删除了该镜像没有被复用的层,被复用的层仍然会存在于系统中被其他镜像所使用

2、镜像的基本命令

接下来我们介绍一下关于镜像的基本命令

拉取指定镜像

通过冒号 : 来指定:

docker pull ubuntu:18.04

查看镜像

docker images

docker image ls

上面这两条命令是一样的效果

查看镜像相关信息

docker inspect ubuntu:latest

查看镜像的摘要信息

docker image ls --digests ubuntu

通过 IMAGE ID 删除镜像

docker rmi ed21b7a8aee9

docker image rm ed21b7a8aee9

其中 ed21b7a8aee9 为指定需要删除的镜像 id

上面两条命令是一样的效果

在后面如果多次使用镜像,然后系统就会存在镜像的名称和 Tag 都会为 none 的废弃镜像,如果我们想统一删除这些镜像,可以通过如下命令:

docker rmi `docker images -a|grep none | awk '{print $3}'`

在引用符号里的命令解释一下

docker images -a 获取所有镜像

grep none 过滤获取关键字有 none 的数据

awk '{print $3}' 获取输出的第三列数据,在这里就是 image 的镜像 id

docker rmi 就是删除镜像命令,将后面的操作获取的镜像 ID 删除