docker镜像管理
2019-12-18 10:09:32 0 举报
AI智能生成
docker镜像管理
作者其他创作
大纲/内容
下载
下载最新版
docker pull <镜像名>
注意这里的latest每次下载都会指向最新版
下载指定tag
docker pull alpine:3.10.1
打标签
docker tag 965ea09ff2eb docker.io/fanheng/alpine:v3.10.3
删除
删除标签(本地)
docker rmi fanheng/alpine:v3.10.3
彻底删除镜像(本地)
docker rmi <镜像id>
如果有其它标签引用了这个镜像,就删除不了。可以使用 -f 强制删除:docker rmi -f <镜像id>,
此方法会先把所有相关tag全部删除掉,然后再删除镜像
此方法会先把所有相关tag全部删除掉,然后再删除镜像
远程仓库的删除,需要登录到仓库的后台去手工删除
搜索远程镜像
docker search <镜像名的关键字>
查看本机镜像
docker images 或 docker image ls
推送
docker push docker.io/fanheng/alpine:v3.10.3
镜像特性
分层结构
base 镜像有两层含义
1. 不依赖其他镜像,从 scratch 构建
2. 其他镜像可以之为基础进行扩展
好处:资源共享
有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
container(可写层 也叫 容器层)
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
特性: Copy-on-Write
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。
可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
容器层的增删改查步骤
1.添加文件
在容器中创建文件时,新文件被添加到容器层中。
2. 读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
3. 修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4. 删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
在容器中创建文件时,新文件被添加到容器层中。
2. 读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
3. 修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4. 删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
镜像层
image
新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
比如:emacs,apache
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。
如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。
在容器层中,用户看到的是一个叠加之后的文件系统。
如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。
在容器层中,用户看到的是一个叠加之后的文件系统。
base image(rootfs)
最基础的image
内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉。
用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录。
对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。
用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录。
对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。
底层共用 Docker Host 的 kernel
base 镜像只是在用户空间与发行版一致,kernel 版本与发型版是不同的
容器只能使用 Host 的 kernel,并且不能修改。所有容器都共用 host 的 kernel,在容器中没办法对 kernel 升级。如果容器对 kernel 版本有要求(比如应用只能在某个 kernel 版本下运行),则不建议用容器,这种场景虚拟机可能更合适。
最底层:bootfs
整个docker镜像的底层依赖的库和kernel去交互的玩意儿
收藏
收藏
0 条评论
下一页