第二章_Docker镜像操作

Docker运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker就会尝试从默认镜像仓库https; / /hub , docker , com下载.这是由Docker官方维护的一个公共仓库,可以满足用户的绝大部分需求,用户也可以通过配置来使用自定义的镜像仓库。

下面将具体介绍围绕镜像这一核心概念的具体操作.

1、搜索镜像

在使用下载镜像前,可以使用docker search命令搜索远端官方仓库中的共享镜像,

命令格式:docker search关键字

例如、搜索关键字为dhcp的镜像

复制代码
[root@blab ~]# docker search dhcp
INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/networkboot/dhcpd                    Suitable for running a DHCP server for you...   96                   [OK]
docker.io   docker.io/joebiellik/dhcpd                     DHCP server running on Alpine Linux             21                   [OK]
docker.io   docker.io/homeall/dhcphelper                   DHCP relay for DHCP Server in the docker c...   6                    
docker.io   docker.io/instantlinux/dhcpd-dns-pxe           Serve DNS, DHCP and TFTP from a small Alpi...   6                    [OK]
docker.io   docker.io/gns3/dhcp                            A DHCP container for GNS3 using dnsmasq         4                    [OK]
...省略...

返回很多包含dhcp关键字的镜像.其中返回信息包括镜像名称{(NAME)、描述(DESCRIPTION) ,星级(STARS)、是否官方创建〈OFFICIAL)、是否主动创建(AUTOMATED)。默认的输出结果会按照星级评价进行排序.表示该镜像受欢迎程度,在下载镜像时,可以参考这一项.在搜索时还可以使用-s或者------stars=x显示指定星级以上的镜像,x为任意数.星级越高表示越受欢迎,是否为官方镜像-项是指是否是由官方项目组创建和维护的镜像,---般官方项目组维护的镜像使用单个单词作为镜像名称.我们称为基础镜像或者根镜像,像reinblau/dhcp这种命名方式的镜像,表示是由Docker Hb的用户 reinblau创建并维护的镜像.带有用户名为前缀;是否主动创建资源则是指是否允许用户验证镜像的来源和内容.

使用dockersearch命令只能查找镜像,镜像的标签无法查找.因此如果需要查找docker标签.需要从网页上访问镜像仓库https ;/ /hub , docker , com进行查找。

2、获取镜像

搜索到符合需求的镜像.可以使用docker pull命令从网络下载镜像到本地使用.

命令格式:docker pull 仓库名称 [:标签]

对于Docker镜像来说.如果下载镜像时不指定标签.则默认会下载仓库中最新版本的镜像,即选择标签为 latest,也可通过指定的标签来下载特定版本的某一镜像。这里标签就是用来区分镜像版本的。

复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

例如,下载镜像docker.io/networkboot/dhcpd

复制代码
[root@blab ~]# docker pull docker.io/networkboot/dhcpd
Using default tag: latest
Trying to pull repository docker.io/networkboot/dhcpd ... 
latest: Pulling from docker.io/networkboot/dhcpd
d19f32bd9e41: Pulling fs layer 
1f23f0afd8a5: Pulling fs layer 
4928050fa1d6: Pulling fs layer 
...省略...

从整个下载的过程可以看出,镜像文件是由若干层(Layer)组成.我们称为ALFS(联合文件系统),是实现增量保存与更新的基础.下载过程中会输出镜像的各层信息,镜像下载到本地之后就可以随时使用该镜像了。

用户也可以选择从其他注册服务器仓库下载.这时需要在仓库名称前指定完整的仓库注册服务器地址。

3、查看镜像信息

用户可以使用docker images命令查看下载到本地的所有镜像.

查看指定镜像的命令语法:

复制代码
docker images 仓库名称:[标签]

如果不指定仓库名称和标签.直接查看本地所有镜像.输入如下:

复制代码
[root@blab ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/networkboot/dhcpd   latest              b57b32205814        3 years ago         79.3 MB

从回显的信息中可以读出以下信息:

  • REPOSITORY:镜像属于的仓库。
  • TAG:镜像的标签信息,标记同一个仓库中的不同镜像.
  • MAGE ID:镜像的唯一-D号,唯一标识了该镜像。
  • CREATED:镜像创建时间.
  • VIRTUAL SIZE:镜像大小。

用户还可以根据镜像的唯一标识ID号,获取镜像的详细信息。命令格式:

复制代码
docker inspect 镜像ID号

例如,获取镜像的详细信息;

复制代码
[root@blab ~]# docker inspect b57b32205814
[
    {
        "Id": "sha256:b57b32205814001aad3aad19908ebfdb92a6fc1ea59001487b3850bb0296ac9d",
        "RepoTags": [
            "docker.io/networkboot/dhcpd:latest"
        ],
        "RepoDigests": [
            "docker.io/networkboot/dhcpd@sha256:cc08468fbecfbe18002450620ede54d2d33892524076ac53c34361210740bcf6"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-11-05T15:42:23.475932534Z",
        "Container": "1c7e74263c3b21a78806cdf5e73fb59c318053fbe68ee6e0c1a1f84c72b379c0",
        "ContainerConfig": {
...省略...

镜像的详细信息中包括创建时间.系统版本、主机名.域名、用户.卷、标签、操作系统.设备ID等各种信息。

为了在后续工作中使用这个镜像.可以用dockertag命令来为本地的镜像添加新的标签。

命令格式:

复制代码
docker tag 名称:[标签]新名称:[新标签]

例如,本地镜像添加新的名称为dcp,新的标签为dhcp:

复制代码
[root@blab ~]# docker tag docker.io/networkboot/dhcpd dhcp:dhcp
[root@blab ~]# docker images | grep dhcp
docker.io/networkboot/dhcpd   latest              b57b32205814        3 years ago         79.3 MB
dhcp                          dhcp                b57b32205814        3 years ago         79.3 MB

4、删除镜像

使用docker rmi命令可以删除多余的镜像。

删除镜像的操作有两种方法:使用镜像的标签删除镜像:使用镜像的ID删除镜像.

命令格式:

复制代码
docker rmi 仓库名称:标签
或者
docker rmi 镜像ID号

例如.要删除掉dhcp ; dhcp镜像.可以使用如下命令:

复制代码
[root@blab ~]# docker rmi dhcp:dhcp 
Untagged: dhcp:dhcp

当一个镜像有多个标签的时候.docker rmi 命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件,相当于只是删除了镜像的一个标签而已。但当该镜像只剩下--一-个标签的时候就要小心了.再使用删除命令就会彻底删除该镜像。

例如.删除docker.io/networkboot/dhcpd 镜像.可以看出它会删除整个镜像文件的所有层:

复制代码
[root@blab ~]# docker rmi docker.io/networkboot/dhcpd
Untagged: docker.io/networkboot/dhcpd:latest
Deleted: sha256:b57b32205814001aad3aad19908ebfdb92a6fc1ea59001487b3850bb0296ac9d
Deleted: sha256:818ef1a91f76712dfb06e12ff002624b6a169632d08aacbe1a9ed1945335824c
Deleted: sha256:88cdce7f0264be7ad874dfabca2009e6835cda83610ef4acabbd8309a8da58c0
Deleted: sha256:423662870fb3d051ccbc52495a1ff83e3b0c136d88614618dd18ea5b5a4fda15
Deleted: sha256:dd44b56f7a8f4d7c34f8fe346f507e46defea98f198bccd13ef227a80a512f18
Deleted: sha256:80580270666742c625aecc56607a806ba343a66a8f5a7fd708e6c4e4c07a3e9b

当使用docker mi 命令后面跟上镜像的ID号时.必须确保该镜像没有被容器使用才能进行.删除时系统会先删除掉所有指向该镜像的标签.然后删除该镜像文件本身。如果该镜像已经被容器使用.正确的做法是先删除依赖该镜像的所有容器,再去删除镜像.

5、存出和载入镜像

当需要把一台机器上的镜像迁移到另一台机器上的时候.需要将镜像保存成为本地文件.这一过程叫做存出镜像.可以使用docker save命令进行存出操作。之后就可以复制该文件到其他机器。

命令格式:

复制代码
docker save -o 存出镜像为本地文件

例如.存出本地的dacker , io/networkboot /dhcpd 镜像为文件dhcp :

复制代码
[root@blab ~]# docker save -o dhcp docker.io/networkboot/dhcpd
[root@blab ~]# ll dhcp 
-rw------- 1 root root 82387968 6月  12 11:19 dhcp

将存出的镜像从A机器复制到B机器,需要在B机器上使用该镜像.就可以将该导出文件导入到B机器的镜像库中.这一过程叫作载入镜像。

命令格式

复制代码
dhcp load --input 存出的文件或者docker load < 存出文件

例如,从文件dhcp中载入镜像到本地镜像库中:

复制代码
[root@blab ~]# docker load --input dhcp 
805802706667: Loading layer [==================================================>] 65.61 MB/65.61 MB
3fd9df553184: Loading layer [==================================================>] 15.87 kB/15.87 kB
7a694df0ad6c: Loading layer [==================================================>] 3.072 kB/3.072 kB
0d62e7526187: Loading layer [==================================================>] 16.73 MB/16.73 MB
d5deb13c0dfa: Loading layer [==================================================>] 4.096 kB/4.096 kB
Loaded image: docker.io/networkboot/dhcpd:latest

或者

[root@blab ~]# docker load < dhcp
805802706667: Loading layer [==================================================>] 65.61 MB/65.61 MB
3fd9df553184: Loading layer [==================================================>] 15.87 kB/15.87 kB
7a694df0ad6c: Loading layer [==================================================>] 3.072 kB/3.072 kB
0d62e7526187: Loading layer [==================================================>] 16.73 MB/16.73 MB
d5deb13c0dfa: Loading layer [==================================================>] 4.096 kB/4.096 kB
Loaded image: docker.io/networkboot/dhcpd:latest

6、上传镜像

本地存出的镜像越来越多.就需要指定一个专门存放这些镜像的地方----仓库,目前比较方便的就是公共仓库.默认上传到DockerHb官方仓库,需要注册使用公共仓库的账号,可以使用dockerlogin命令来输入用户名、密码和邮箱来完成注册和登录。在上传镜像之前还需要对本地镜像添加新的标签,然后再使用dockerpush命令进行上传.

复制代码
docker push 仓库名称:标签

命令格式

例如,在公共仓库上已经注册成功了一个账号.本例账号为bdqnli,镜像的标签为docke/dhcp , centos7 .3。

(1)首先在使用账号登录官方仓库。

复制代码
[root@blab ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: bdqnli
Password: 
Login Succeeded

(2)成功登录后就可以上传镜像。

复制代码
[root@blab ~]# docker push docker/dhcp:centos7.3
相关推荐
HalvmånEver10 分钟前
Linux:基础IO(终)
linux·运维·c++·学习·缓冲区·libc
大江东第一深情1 小时前
Origin 2024 进行语言切换后仍然显示为英文
运维·前端
CSDN官方博客1 小时前
CSDN社区镜像创作活动
大数据·运维·人工智能
石小千1 小时前
Ubuntu24.04 安装Docker
运维·docker·容器
zhuzewennamoamtf1 小时前
Linux设备树理解和应用
linux·运维·服务器
雨大王5121 小时前
汽车厂内物流如何通过自动化实现降本增效?
运维·自动化
Qzkj6661 小时前
医疗和教育行业自动化、精准匹配、易掌握的数据分类分级最佳实践与案例
大数据·运维·自动化
我科绝伦(Huanhuan Zhou)1 小时前
Linux 环境下 SQL Server 自动收缩日志作业创建脚本(Shell 版)
linux·运维·数据库·sql server
徐徐图之!1 小时前
五、【阶段一运维基础 之 干货!!!】安装 Vmware 和 CentOS
linux·运维·centos
石小千1 小时前
OpenProject服务的备份与恢复
运维