本章主要介绍docker 镜像的查找、下载、列出、删除以及创建等。
镜像是什么?
在docker中,镜像是容器的模板。容器中的虚拟机都是以镜像为模板创建的。docker 为镜像的创建和更新提供了简单的机制,用户也可以直接从网络中下载已经创建好的镜像文件来直接使用。
1. 查找镜像
当用户创建容器的时候,可以自己创建所需要的镜像。但是,在绝大多数情况下,用户选择的是从docker镜像仓库中查找所需要的镜像。找到之后将其从镜像仓库下载到本地使用。
docker 提供了 docker search 命令来查找远程镜像仓库中的镜像。该命令的使用方法很简单:
docker search keyword
其中,keyword 表示要查找的镜像所包含的关键字。
例如,下面命令查找关于 mysql 的镜像
注意:
在中国访问外网的容器仓库可能会报错 :
[root@localhost system]
Error response from daemon: Get "https://index.docker.io/v1/search?q=mysql&n=25": x509: certificate has expired or is not yet valid: current time 2023-02-01T06:35:20+08:00 is before 2023-02-22T00:00:00Z
这个时候改成国内的仓库地址就行了。
中国的 docker 仓库: https://www.docker-cn.com/registry-mirror
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://wxsi86xv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
这样就可以搜索出了
上图中,第一列为镜像的名称,第二列为描述信息,第三列为评价指数,第四列表示该镜像是否为官方发布的镜像,第五列表示该镜像是否为自动构建。
如果说docker search命令搜索到的结果比较多,可使用-s 或者 --start选项来选择评价比较高的镜像
2.下载镜像
查找到合适的镜像之后,用户可以将其下载到本地电脑中,以便于创建容器。docker 提供了 docker pull 命令来下载镜像
docker pull name:tag
其中 name是镜像的名称,镜像名必须是完整的包含命名空间和仓库名。如果在同一个仓库中包含多个相同名称的镜像,那么还需要使用tag参数指定镜像的标签。如果没有指定标签,那么docker会自动将latest作为默认标签,表示下载最新的镜像。
例如,将Ubuntu镜像下载到本地电脑中。
docker pull ubuntu
docker镜像管理中,标签发挥了非常重要的作用,用来区分同一个镜像的不同版本。
3.列出本地镜像
如果用户想要查看本地镜像可以使用 docker images 命令。该命令可直接使用,不用加参数
[root@localhost ~]
上图中第一列为镜像的名称,第二列为镜像的标签,默认标签都是latest,第三列为镜像的ID,第四列为创建时间,第五列为占用的虚拟空间大小
4.删除镜像
对于当前系统已经不需要的镜像,为了节省存储空间,系统管理员可以将其删除。删除镜像使用 docker rmi 命令。其中,rmi 中 i表示镜像。该命令的基本语法如下:
docker rmi image ...
image 为镜像名称。用户可以同时删除多个镜像,多个镜像名称之间用空格隔开。例如,下面命令删除名为dordoka/tomcat 的本地镜像:
当某个镜像被当前系统的某些容器使用,在删除该镜像时会出现错误。在这种情况下用户可以先将使用这个镜像的容器删除,然后再删除镜像。此外,docker rmi命令还提供了 -f 参数,用来强制删除镜像;但是当强制删除镜像之后,往往导致某些容器无法运行。所以为了保证数据一致性,建议先删除容器后删除镜像。
5.查看镜像
对于下载到本地的镜像文件,用户可以使用docker inspect 命令来查询其详细信息。如图所示:
docker inspect ubuntu
6.构建镜像
前面我们已经学会了如何从远程仓库中下载已经构建好的、带有定制内容的Docker 镜像,那么如何构建自己的镜像呢?
构建docker 镜像有两种方法,其一使用的是 docker commit,其二使用 docker build 命令和 Dockerfile 文件。
一般来说我们不是从头创建一个全新的镜像,而是基于一个已有的基础镜像,如centos 或 Ubuntu等,构建出新的镜像。如果从零开始会非常繁琐!
使用docker commit 命令构建镜像的过程可以想象成是往版本控制系统中提交变更。我们先创建一个容器,并在容器中做出修改,最后将修改结果提交为一个新的镜像。
以下以Ubuntu 为例,说明如何修改现有的镜像,并且将其结果提交为一个新的镜像。首先,以交互方式创建一个Ubuntu容器,执行如下命令:
[root@localhost ~]
root@d435c7f00358:/
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:3 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [1011 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB]
Get:8 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [2536 kB]
Get:9 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1998 kB]
Get:10 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [28.5 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB]
Get:12 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB]
Get:13 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [2134 kB]
Get:14 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1309 kB]
Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [3014 kB]
Get:16 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [31.2 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [28.6 kB]
Get:18 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [55.2 kB]
Fetched 25.6 MB in 7s (3606 kB/s)
Reading package lists... Done
以上命令中,docker run 表示启动一个容器, -i 表示采用交互式方式,-t 表示为当前用户分配一个虚拟终端。Ubuntu为镜像名称, /bin/bash 为要执行的命令,在该命令执行成功后,用户可以发现命令提示符已经发生改变,其中root 为当前容器的用户,@符号后边为容器的ID。apt-get命令用来更新当前的Ubuntu系统。
接下来安装apache2 服务
root@d435c7f00358:/
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
...
安装完成后,接下来构建镜像
使用exit命令退出当前容器,返回到docker 管理界面。找到刚才使用的那个容器,执行如下命令
退出容器
root@d435c7f00358:/
exit
查看容器
[root@localhost ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d435c7f00358 ubuntu "/bin/bash" 17 minutes ago Exited (0) 6 seconds ago relaxed_carson
[root@localhost ~]
sha256:a7f80427b2e2e5c584e6ba92d482872431ee769e0f9b7f2d7d73aa23ad6e9403
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/webserver latest a7f80427b2e2 18 seconds ago 235MB
ubuntu latest ba6acccedd29 16 months ago 72.8MB
以上命令中 , d435c7f00358 为已经修改的容器ID,demo/webserver为新的镜像的名称。当docker commit 执行完成之后,可以使用docker images 查看是否创建成功。
7.镜像标签管理
镜像的标签可以区分不同的版本,在语法上面标签和镜像名称之间使用 冒号隔开。docker 提供了 docker tag 命令来设置镜像的标签,其语法如下
docker tag source_image[:tag] target_image[:tag]
其中 source_image[:tag] 为源镜像,target_image[:tag]为目标镜像,例如,下面命令将名称为httpd 的镜像 标识为local仓库中的httpd
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/webserver latest a7f80427b2e2 46 minutes ago 235MB
httpd latest dabbfbe0c57b 14 months ago 144MB
ubuntu latest ba6acccedd29 16 months ago 72.8MB
[root@localhost ~]
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/webserver latest a7f80427b2e2 46 minutes ago 235MB
httpd latest dabbfbe0c57b 14 months ago 144MB
local/httpd latest dabbfbe0c57b 14 months ago 144MB
ubuntu latest ba6acccedd29 16 months ago 72.8MB
上面输出的倒数第二行就是刚添加标签的镜像,实际上 httpd 和 local/httpd
共用一个存储空间,只是标签不同而已。
除了名称之外,也可以修改镜像的标签, 如下
[root@localhost ~]
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/webserver latest a7f80427b2e2 50 minutes ago 235MB
httpd latest dabbfbe0c57b 14 months ago 144MB
local/httpd latest dabbfbe0c57b 14 months ago 144MB
local/httpd v1.0 dabbfbe0c57b 14 months ago 144MB
ubuntu latest ba6acccedd29 16 months ago 72.8MB
刚设置的标签的镜像其tag为 v1.0
也可以使用镜像ID 来引用镜像 ,如下
[root@localhost ~]
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/webserver latest a7f80427b2e2 53 minutes ago 235MB
local/httpd latest dabbfbe0c57b 14 months ago 144MB
local/httpd v1.0 dabbfbe0c57b 14 months ago 144MB
local/httpd v1.1 dabbfbe0c57b 14 months ago 144MB
httpd latest dabbfbe0c57b 14 months ago 144MB
ubuntu latest ba6acccedd29 16 months ago 72.8MB
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)