镜像介绍

  • 是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件
  • docker 镜像层都是只读的,容器层是可写的


镜像底层 -- 镜像分层 UnionFS

  • UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
  • UnionFS 是 docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像可以制作各种具体的应用镜像
  • docker 镜像实际上由一层一层文件系统组成,这种层级的文件系统 UnionFS alt
好处
  • 共享资源、方便复制迁移、方便复用


镜像加载

  • bootfs(boot file system)主要包含 BootLoader 和 kernel,BootLoader 主要是引导加载 kernel,linux刚启动时会加载 bootfs文件系统,在 docker 镜像的最底层是引导文件系统 bootfs。这一层与我们典型的 linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,系统也会卸载 bootfs
  • rootfs(root file system)在 bootfs 之上。包含的是典型 linux 系统中的 /dev、/prov、/bin、/etc等标准目录和文件。rootfs 就是各种不同系统的发行版,比如 Ubuntu、centos等等
  • 对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用 host 的 kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的 linux 发行版,bootfs 基本是一致的,rootfs会有差别,因此不同的发行版可以公用 bootfs

alt



镜像操作

提交新的镜像一般基于已有镜像进行搭建

  • 例如在原生 Ubuntu 下载添加 vim 命令
含义 命令
运行 Ubuntu 容器 docker run -it imagesID bash
下载 vim 命令 apt-get update、apt-get -y install vim
退出容器 ctrl + p + q
查看容器ID docker ps
提交新的镜像 docker commit -m="vim cmd add on ubuntu" -a="hshuo" 容器ID ubuntu_images/vim_ubuntu:0.1

alt


本地镜像发布到阿里云、从阿里云拉取到本地

alt


本地镜像发布到私有库、从私有库拉取镜像

  • 159.223.160.164 是本机的ip地址
  • -v /hshuo/myregistry/:/tmp/registry --privileged=true的含义是自行用容器卷映射方便与宿主机联调

  1. 创建私有库
含义 命令
下载镜像 docker registry docker pull registry
运行私有库 registry,相当于本地有个私有 docker hub docker run -d -p 5000:5000 -v /hshuo/myregistry/:/tmp/registry --privileged=true registry

  1. 创建新镜像,基于Ubuntu添加ifconfig功能
含义 命令
运行基础的Ubuntu docker run -it ubuntu bash
安装ifconfig apt-get update、apt-get -y install net-tools
退出容器 ctrl + p + q
找到刚刚创建的容器ID docker ps
提交镜像到本地 docker commit -m="add ifconfig on ubuntu" -a="hshuo" e0821342a7d8 ifconfig_ubuntu:0.1
查看本地镜像 docker images

  1. 将镜像提交到私有库上
含义 命令
curl 验证私有库上有什么镜像 curl -XGET http://159.223.160.164:5000/v2/_catalog
修改镜像名称 docker tag ifconfig_ubuntu:0.1 159.223.160.164:5000/ifconfig_ubuntu:0.1
修改私有库配置文件使其支持http alt
重启 docker systemctl restart docker
将镜像推送到私有库上 docker push 159.223.160.164:5000/ifconfig_ubuntu:0.1
curl 验证私有库上有什么镜像 curl -XGET http://159.223.160.164:5000/v2/_catalog

  1. 从私有库拉取镜像
含义 命令
从私有库上拉取镜像 docker pull 159.223.160.164:5000/ifconfig_ubuntu:0.1

alt