本文最后更新于:14 天前

Docker镜像管理

Docker镜像是一个不包含Linux内核而又精简的Linux的操作系统。

Dock镜像下载

Docker Hub 是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像:https://hub.docker.com/explore

默认是国外的源,下载会很慢,可以使用国内的源提供下载速度:参考上一节镜像加速器

镜像的工作原理

当我们启动一个新的容器时,Docker会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到/var/lib/docker/aufs/mnt/容器ID为目录下,我们可以使用chroot进入此目录。

如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面的只读层复制到读写层,只读层的这个文件就会覆盖,但还存在,这就实现了文件系统隔离,当删除容器后,读写层的数据将会删除,只读镜像不变。

镜像的文件存储结构

docker相关文件存放在:/var/lib/docker目录下

/var/lib/docker/aufs/diff # 每层与其父层之间的文件差异
/var/lib/docker/aufs/layers/ # 每层一个文件,记录其父层一直到根层之间的ID,大部分文件的最后一行都已,表示继承来自同一层
/var/lib/docker/aufs/mnt # 联合挂载点,从只读层复制到最上层可读写层的文件系统数据

在建立镜像时,每次写操作,都被视作一种增量操作,即在原有的数据层上添加一个新层;所以一个镜像会有若干个层组成。每次commit提交就会对产生一个ID,就相当于在上一层有加了一层,可以通过这个ID对镜像回滚。

镜像管理命令

列举一些常用的Docker镜像管理命令,完整内容请参考官方文档

Docker search 命令

docker search : 从Docker Hub查找镜像

语法:

docker search [OPTIONS] TERM

OPTIONS说明:

–automated :只列出 automated build类型的镜像;

–no-trunc :显示完整的镜像描述;

*-s : * 列出star数不小于指定值的镜像。

实例

从Docker Hub 查找所有镜像包含MySQL, 并且star大于100

seven@seven:~$ sudo docker search mysql -s 100
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                        MySQL is a widely used, open-source relation…   7213                [OK]                
mariadb                      MariaDB is a community-developed fork of MyS…   2311                [OK]                
mysql/mysql-server           Optimized MySQL Server Docker images. Create…   531                                     [OK]
percona                      Percona Server is a fork of the MySQL relati…   382                 [OK]                
zabbix/zabbix-server-mysql   Zabbix Server with MySQL database support       136                                     [OK]

Docker pull 命令

docker pull : 从镜像仓库中拉取或者更新指定镜像

语法:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

-a :拉取所有 tagged 镜像

–disable-content-trust :忽略镜像的校验,默认开启

实例:

从Docker Hub下载mysql。

seven@seven:~$ sudo docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
f17d81b4b692: Pull complete 
c691115e6ae9: Pull complete 
41544cb19235: Pull complete 
254d04f5f66d: Pull complete 
4fe240edfdc9: Pull complete 
0cd4fcc94b67: Pull complete 
8df36ec4b34a: Pull complete 
720bf9851f6a: Pull complete 
e933e0a4fddf: Pull complete 
9ffdbf5f677f: Pull complete 
a403e1df0389: Pull complete 
4669c5f285a6: Pull complete 
Digest: sha256:811483efcd38de17d93193b4b4bc4ba290a931215c4c8512cbff624e5967a7dd
Status: Downloaded newer image for mysql:latest

Docker push 命令

docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

语法:

docker push [OPTIONS] NAME[:TAG]

OPTIONS说明:

–disable-content-trust :忽略镜像的校验,默认开启

Docker images 命令

Docker images: 查看本机的镜像

语法:

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

–digests :显示镜像的摘要信息;

-f :显示满足条件的镜像;

–format :指定返回值的模板文件;

–no-trunc :显示完整的镜像信息;

-q :只显示镜像ID。

实例:

查看本地镜像列表

seven@seven:~$ sudo docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              2dd01afbe8df        4 days ago          485MB
ubuntu              latest              ea4c82dcd15a        10 days ago         85.8MB
hello-world         latest              4ab4c602aa5e        7 weeks ago         1.84kB

Docker rmi 命令

*docker rmi: *删除本地一个或多少镜像。

语法:

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

-f :强制删除;

–no-prune :不移除该镜像的过程镜像,默认移除;

Docker export 命令

docker export :将文件系统作为一个tar归档文件导出到STDOUT。

语法

docker export [OPTIONS] CONTAINER

OPTIONS说明:

-o :将输入内容写到文件。

Docker import 命令

docker import : 从归档文件中创建镜像。

语法

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

OPTIONS说明:

-c :应用docker 指令创建镜像;

-m :提交时的说明文字;

Docker save 命令

docker save : 将指定镜像保存成 tar 归档文件。

语法

docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

-o :输出到的文件。

Docker load命令

docker load:从归档文件中导入镜像。

语法:

docker load [OPTIONS]

Options:
-i: 从tar存档文件读取的输入字符串,而不是STDIN
-q: Suppress the load output


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Docker安装-ubuntu 上一篇
Docker镜像加速器 下一篇