docker笔记2-镜像与容器

栏目: 编程工具 · 发布时间: 5年前

内容简介:操作系统分为内核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-镜像与容器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精彩绝伦的jQuery

精彩绝伦的jQuery

[美] Jake Rutter / 魏 忠 / 人民邮电出版社 / 2012-6 / 59.00元

内容简介: 通过创建更具交互性的富Web界面增强用户体验 本书阐述如何利用少量的JavaScript基础知识将jQuery框架整合进网站,以创建富Web界面,并建立兼容所有主流浏览器的交互性网站。作者是一位具有丰富经验的Web设计师和开发者,通过一系列指导性步骤清晰讲述了添加交互性以创建卓越Web应用的方法和技巧。 使用jQuery可以节省大量的开发时间,开发者在没有丰富编程经验......一起来看看 《精彩绝伦的jQuery》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码