内容简介:操作系统分为内核kernel和用户空间。对于Linux而言,内核(bootfs)启动后会挂载root文件系统为其提供用户空间支持。而docker镜像,就相当于是一个root文件系统(rootfs)。镜像的root文件系统被设计为分层存储的架构。镜像在构建时,会一层一层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只会发生在自己这一层。分层存储的特征使得镜像的复用,定制变得更加容易。可以使用构建好的镜像作为基础层,再进一步的添加新的层,以定制自己所需的内容,构建新的镜像。
docker镜像概述
操作系统分为内核kernel和用户空间。对于 Linux 而言,内核(bootfs)启动后会挂载root文件系统为其提供用户空间支持。而 docker 镜像,就相当于是一个root文件系统(rootfs)。
- bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源
- rootfs:位于bootfs之上,表现为docker容器的根文件系统
镜像原理
镜像的root文件系统被设计为分层存储的架构。镜像在构建时,会一层一层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只会发生在自己这一层。
分层存储的特征使得镜像的复用,定制变得更加容易。可以使用构建好的镜像作为基础层,再进一步的添加新的层,以定制自己所需的内容,构建新的镜像。
简单来说,镜像是:
- 文件和metedata的集合(rootfs)
- 镜像是分层存储的,并且每一层都可以添加改变删除文件,成为一个新的镜像
- 不同镜像可以共享相同的layer(层)
- 镜像本身是read-only的
镜像获取
镜像的获取方式:
- 从镜像仓库(registry)获取
- 通过commit命令将容器保存为镜像
- 通过Dockerfile定制容器(推荐使用)
- 通过rootfs压缩包导入
- docker save和docker load命令
镜像管理
从Registry拉取镜像
在 docker hub 上有大量高质量的镜像可以使用,从镜像仓库拉取镜像的命令格式是:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
镜像的名称格式
- Docker镜像仓库地址:<域名/IP>[:端口号],默认地址是docker hub
- 仓库名:<用户名>/<软件名>,对于docker hub,如果不给出用户名,默认是library,也就是官方镜像
- 标签:标签一般是镜像的版本信息,不指定标签默认是latest
例如:docker pull centos
$ docker pull centos Using default tag: latest latest: Pulling from library/centos a02a4930cb5d: Pull complete Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 Status: Downloaded newer image for centos:latest
这条命令没有给出镜像仓库地址,默认从Docker Hub上获取。而镜像名称是centos,因此会获取官方镜像 library/centos
中标签为 latest
的镜像
配置镜像加速器
因为docker hub地址是在国外,从国内拉取镜像仓库中的镜像会比较慢,此时可以配置镜像加速器。
目前Docker官方和国内的云服务商都有提供国内加速服务。
配置阿里云加速器为例:
环境说明
系统环境:centos7 docker版本:Docker version 18.03.0-ce
创建目录文件
$ mkdir -p /etc/docker $ vim /etc/docker/daemon.json
添加配置内容,配置内容在阿里云 容器镜像服务 中可以获取,每个阿里云账号都有自己的镜像加速器。
{ "registry-mirrors": ["https://这里的配置每个人都有.mirror.aliyuncs.com"] }
然后就是重新加载文件和重启docker,就可以了
$ systemctl daemon-reload $ systemctl restart docker
列出镜像
列出本地镜像的命令是:
$ docker image ls
或者
$ docker images
删除镜像
删除本地镜像的命令:
$ docker image rm [选项] <镜像1> [<镜像2> ...]
镜像可以是镜像短ID,长ID,镜像名或者镜像摘要。
下面看 $ docker images
列出的镜像信息。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 1e1148e4cc2c 2 months ago 202MB busybox latest 59788edf1f3e 4 months ago 1.15MB django-compose_web latest cfd70f0cb009 5 months ago 969MB postgres latest ac25c2bac3c4 5 months ago 228MB my-compose_web latest 4867e7c35cc9 5 months ago 86.5MB
其中REPOSITORY+TAG称为镜像名,IMAGE ID是镜像ID,取前几位就是镜像短ID。
比如用镜像名删除centos镜像:
$ docker image rm centos:latest Untagged: centos:latest Untagged: centos@sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 Deleted: sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb Deleted: sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956
使用镜像短ID删除镜像:
$ docker image rm 59788ed Untagged: busybox:latest Untagged: busybox@sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812 Deleted: sha256:59788edf1f3e78cd0ebe6ce1446e9d10788225db3dedcfd1a59f764bad2b2690 Deleted: sha256:8a788232037eaf17794408ff3df6b922a1aedf9ef8de36afdae3ed0b0381907b
可以看到busybox这个镜像已经被删除。
也类似管道一样,结合其他命令来删除镜像,比如 docker image ls -q
,先看看这个命令的执行结果。
$ docker image ls -q python 449d3495be0e 825141134528 825141134528 40792d8a2d6d
这个命令执行返回本地镜像中所有 python 镜像的镜像ID,有了ID就可以结合 docker image rm
来删除了。
docker image rm $(docker image ls -q)
这条命令对想要成批删除镜像很有帮助。
给镜像打标签
启动镜像为容器
以上所述就是小编给大家介绍的《docker笔记2-镜像与容器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。