Docker镜像管理

2021-12-01  本文已影响0人  小李飞刀_lql

镜像是什么

001 一个分层存储的文件,不是一个单一的文件
002 一个软件的环境
003 一个镜像可以创建N个容器
004 一种标准化的交付
005 一个不包含Linux内核而又精简的Linux操作系统

镜像从哪里来

Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
地址:https://hub.docker.com

-----------------------------------------------------------------------------
配置镜像加速器:
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}

镜像存储位置

[root@es3 ~]# docker info
Docker Root Dir: /var/lib/docker
Storage Driver: overlay2
[root@es3 overlay2]# cd  /var/lib/docker/overlay2
----------------------------------------------------------------------------
001 分层存储
002 Dockerfile的每一行指令都是一层存储

镜像与容器联系

1638312184354.png
镜像:类似于虚拟机镜像,一个只读模板
容器:通过镜像创建的运行实例

管理镜像常用命令

指令 描述
ls 列出镜像 docker image ls
build 构建镜像来自Dockerfile
history 查看镜像历史 docker history redis
inspect 显示一个或多个镜像详细信息 docker inspect redis
pull 从镜像仓库拉取镜像
push 推送一个镜像到镜像仓库
rm 移除一个或多个镜像 docker image rm nginx
prune 移除没有被标记或者没有被任何容器引用的镜像 docker image prune -a
tag 创建一个引用源镜像标记目标镜像
save 保存一个或多个镜像到一个tar归档文件 docker save nginx:latest > nginx.tar
load 加载镜像来自tar归档或标准输入 docker load <nginx.tar
#删除所有的容器
[root@es3 overlay2]# docker rm -f $(docker ps -aq)

镜像存储核心技术:联合文件系统(UnionFS)

1638314309288.png
1638314348154.png
镜像怎么高效存储?
难道像虚拟机那样一个容器对应一个独立的镜像文件?这样对于密集型容器,磁盘占用率太大!
答:引入联合文件系统,将镜像多层文件联合挂载到容器文件系统

写时复制(COW)

1638314683897.png
了解联合文件系统后,我们知道,镜像是只读的,类似共享形式让多个容器使用,如果要在容器里修改文件,即镜像里的文件,那该怎么办呢?
答:引入写时复制(copy-on-write),需要修改文件操作时,会先从镜像里把要写的文件复制到自己的文件系统中进行修改。
------------------------------------------------------------
[root@es3 ~]# docker ps
CONTAINER ID   IMAGE    
7c072f3408a7   nginx    
[root@es3 ~]# docker inspect 7c072f3408a7
LowerDir:镜像层
UpperDir:容器层
MergedDir:合并层,展示给最终用户
------------------------------------------------------------
001 所有容器的镜像层的init是不变的,共同引用基础镜像
002 所有容器的容器层是不一样的

优化建议

001 使用SSD固态硬盘
002 使用卷作为频繁读写文件的工作目录,绕过存储驱动,减少抽象的开销
上一篇 下一篇

猜你喜欢

热点阅读