第二章_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
相关推荐
SRExianxian1 小时前
kubernetes存储架构之PV controller源码解读
容器·架构·kubernetes
qq_433618441 小时前
shell 编程(五)
linux·运维·服务器
VVVVWeiYee1 小时前
项目2路由交换
运维·服务器·网络·网络协议·信息与通信
lifeng43212 小时前
Jenkins集成部署(图文教程、超级详细)
运维·jenkins
cdg==吃蛋糕3 小时前
docker代理配置
docker·容器·eureka
白手小弟3 小时前
python wxauto库实现微信自动化发送信息、回复、添加好友等
运维·自动化
ii_best3 小时前
ios按键精灵自动化的脚本教程:自动点赞功能的实现
运维·ios·自动化
3DVisionary3 小时前
数字图像相关DIC技术用于机械臂自动化焊接全场变形测量
运维·数码相机·自动化·焊接变形实验·数字图像相关dic技术·自动化焊接全场变形测量·非接触高精度环境适应性全场测量
web135085886354 小时前
使用docker compose安装gitlab
docker·容器·gitlab
IT机器猫4 小时前
Docker完整技术汇总
运维·docker·容器