第三章 镜像

18 阅读5分钟

1. 镜像

什么是镜像(image)

比如一个恰当的例子,镜像就像是一个应用程序的安装文件,通过安装文件,我们可以一次又一次的安装该程序.那么我们通过镜像,就可以多次部署容器

镜像是静态的,是一个特殊的文件系统,提供了容器运行时的程序,库,配置文件,资源,运行时等,还包含了一些特殊参数,比如,环境变量,用户等等

1.1 搜索镜像

我们可以使用docker search 镜像名称命令,进行相关镜像搜索,下面我们搜索一个nginx镜像.

相关命令

docker search nginx

  1. 打开命令行,输入docker search nginx

image-20220109221857588.png

1.2 拉取镜像

当搜索到我们想要的镜像后,接下来就是需要拉取镜像.拉取镜像使用docker pull 镜像名称命令,下面我们将上面搜索的第一行镜像,下载到电脑上.

相关命令

docker pull nginx

  1. 在控制台中输入docker pull nginx

image-20220109221905888.png

该命令是下载最新版本的nginx,当然我们也可以使用该命令下载指定版本的nginx,主需要在nginx后面加上指定版本号即可,如docker pull nginx:1.21.5,即拉取nginx的1.21.5版本.如果想要查看历时版本,可以登录Docker Hub进行查看

1.3 查看镜像

想要查看本机已经下载的镜像

相关命令

docker images

image-20220109224408585.png

1.4 部署镜像

部署镜像使用docker run这个命令,下面我们就将部署nginx镜像

相关命令

docker run --name nginx-text -p 8080:80 nginx:latest

  1. 打开控制台,并输入以下命令并回车.如果指定镜像在本机不存在,则会自动拉取该镜像

image-20220114143101804.png

  1. 访问 http://localhost:8008

image-20220109222511694.png

正常显示nginx的页面,说明已经部署成功.我们来拆解一下这一条命令

  1. docker run: 是镜像部署命令 2) --name nginx-test: 指定这个镜像部署成容器以后的名字为nginx-test,该参数为空的话,Docker会生成一个默认的名称 3) -p 8080:80: 指定本机8080端口映射到容器的80端口 4) nginx:latest: 指的是镜像的名称与标签 5) -d: 指示容器在后台运行,如果不指定该参数,则为阻塞运行.即控制台退出后,该容器也会退出,下面我们演示一下去掉该参数的效果.在控制台输入命令docker run -p 8081:80 nginx:latest

image-20220114143200461.png

此时看到,该控制台的光标已经被阻塞,这时候我们访问**http://localhost:8081,可以正常出现nginx**的默认页

image-20220111172323792.png

然后,我们关闭该控制台.然后我们在访问**http://localhost:8081**,就会出现以下页面,提示:无法访问此页面了.

image-20220111172347705.png

这就是 -d 参数的作用了

当然还有一些其他比较常用的参数比如:

  1. --restart=always 指定该容器退出的话自启动 2) -e 注入环境变量 ,比如 -e ASPNETCORE_ENVIRONMENT=Production ,这样我们的应用程序内部的ASPNETCORE_ENVIRONMENT这个环境变量的值就是Production,当然也可以注入我们自定义的环境变量 3) -v 挂载存储卷 ,就是将本地目录挂载到容器内部目录,这样容器就可以写数据到该目录,该参数在第五章详解

以上为使用频率比较多的参数,docker run 还有其他参数,我们可以通过docker run --help命令查看

image-20220109225451780.png

1.5 删除镜像

删除镜像使用docker rmi 镜像ID或者名称命令,下面我们将刚刚下载的nginx镜像删除.

相关命令

docker rmi nginx:latest

  1. 在命令行中输入以下命令

image-20220114143309475.png

哎呀,出错了,这是怎么回事呢?因为刚刚我们已经使用该镜像部署了一个名为nginx-test容器,使用docker ps命令查看本机已经运行的容器

image-20220114143404091.png

第一行,就是刚刚我们部署的nginx容器.已经部署的镜像Docker是不允许删除的.所以我们需要先将所有使用该镜像部署的容器停止,然后删除这些容器,最后在删除镜像.操作步骤如下

  1. 停止容器:使用docker stop 容器ID或者容器名称命令

image-20220114143425775.png

  1. 删除容器:docker rm 容器ID或者容器名称

image-20220114143442215.png

  1. 删除镜像:docker rmi nginx

image-20220114143608922.png

1.6 镜像标签

在我们查看镜像的时候,都过看到有一列,名称TAG,那么这个TAG是什么意思呢?

image-20220114134740220.png

利用标签我们对镜像进行重命名与版本管理,使用也很简单,命令是docker tag 原镜像名称 新镜像名称:标签,下面我将上图中镜像nginxfile进行重命名

image-20220114141947368.png

可以看到,出现一个nginxfilenew的镜像,TAGv1.原有镜像还是存在的,原有镜像和新镜像的IMAGE ID是一样的.删除镜像则会有以下情况

无法使用docker rmi 镜像ID,会出现以下提示

image-20220114142453463.png

docker rmi 镜像名称:标签删除镜像 image-20220114142624449.png

1.7 导入导出

现实环境中,有很多项目的运行环境是需要在内网运行,无法进行联网,这时候我们可以将制作好的镜像导出,然后携带到内网环境进行导入与部署

导出

只需要使用命令docker save -o 镜像ID或者名称 路径/包名.tar,根据镜像的大小,导出时间可能会比较长

相关命令

docker save nginx -o C:\Users\Yan\Downloads\nginx_new.tar

image-20220111151740481.png

该目录存在导出镜像

image-20220111150740789.png

打开该文件,我们可以看到,该文件中包含了镜像的所有元数据信息.

image-20220111170933041.png

导入

使用命令docker load -i 包名.tar,导入成功后,会显示相关镜像的信息

相关命令

docker load -i C:\Users\Yan\Downloads\nginx_new.tar

image-20220111151950090.png

导入成功后,我们就使用基于docker tag命令,打成我们需要的指定标签即可