目录
Docker的三大核心概念之镜像
一.镜像
二.容器
三.仓库
1.什么是Docker的镜像?
Docker的镜像是一个模板,或者说其是一个只读文件。在该模板中包含应用和应用运行时所需要的依赖环境。Docker的镜像采用的是分层的文件系统,每一次对镜像的修改将以“读写层”的形式增加到原来的只读文件的模板上。图2-1展示了Docker镜像的分层结构,下面进行介绍。内核(Bootfs):用来加载Linux的内核以启动Linux环境。Docker的用户不会与这一层打交道根镜像:可以将其理解成操作系统,图2-1中的根镜像是CentOs在根镜像之上就是叠加的每一层应用,图2-1中的MySQL、Tomcat等。另外,在物理存储上,镜像的本质其实是磁盘上一系列文件的集合,如图2-2所示。
Docker默认的镜像存储路径是:“/var/lib/docker”,也可以自定义其他路径
1.1使用Docker默认的镜像存储路径
通过执行以下语句可以得知Docker镜像的存储路径,可以看出在默认情况下,Docker将拉取的镜像存储在“/var/lib/docker"目录下
[root@node1 ~]# docker info | grep "Docker Root Dir"
1.2自定义Docker的镜像存储路径
在实际的生产环境中,Docker默认的镜像存储路径往往不能满足磁盘空间大小的要求。可以根据
以下步骤来修改这个存储路径。
(1).创建新的镜像存储路径“/data/docker”,该路径用于保存DOcker的镜像文件。
[root@node1 ~]# mkdir -p /data/docker
(2).创建Docker守护进程的配置文件。
[root@node1 ~]# cd /etc/docker/
[root@node1 docker]# ls
key.json
[root@node1 docker]# vim daemon.json
(3).在daemon.json文件中输入以下内容
{
"graph": "/data/docker"
}
(4).重新加载Docker的服务,并重启Docker
[root@node1 ~]# systemctl daemon-reload(重启Docker服务)
[root@node1 ~]# systemctl restart docker.service(重启Docker)
(5).重新查看Docker的镜像存储路径,会发现路径变成了"/data/docker"
1.3使用命令行工具管理Docker的镜像
表2-1展示了与镜像相关的一些操作命令
下面演示这些命令的使用方法
(1).在镜像仓库中搜索Fink的镜像
[root@node1 ~]# docker serach flink
(2).将Flink镜像拉取到本地
拉取的时候可以看到会有几率拉不下来,这个时候就可以使用镜像加速器了(这里我使用的是阿里云加速器),在/etc/docker/daemon.json文件上加入这几行代码(注:阿里云的镜像加速器要自己去阿里云官网注册账号):
{
"registry-mirrors": ["https://h9.mirror.aliyuncs.com"]
}
EOF
使用"docker info"命令确认加速器是否配置成功,如下图所示,从中可以看出Registry Mirrors被设置成阿里云的镜像地址
这样就可以成功安装flink
输入以下命令就可以删除flink
[root@node1 ~]# docker rmi -f 38e36b131ae7
1.4构建自己的镜像
在前面的操作中,使用的镜像都是镜像仓库中已有的镜像,或者说是别人已经开发好的镜像。那么,是否可以构建自己的镜像,并把镜像上传到镜像仓库中呢?答案当然是可以的
1.使用‘docker commit’命令构建镜像
‘docker commit’命令是基于一个容器来创建镜像,以下是该命令的帮助信息
1.1 执行"myps"命令确定该容器的ID,可以确定该容器的ID是ff466f18aa5c
1.2 使用'docker commit'命令基于该容器生成镜像,并将镜像保存到本地
1.3 若是想把自己构建的镜像上传到Docker Hub中,则需要注册的用户名和密码