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
标签:dhcpd,标签,io,dhcp,镜像,Docker,第二章,docker
From: https://blog.csdn.net/m0_38096339/article/details/139619852