镜像介绍
- 是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件
- docker 镜像层都是只读的,容器层是可写的
镜像底层 -- 镜像分层 UnionFS
- UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
- UnionFS 是 docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像可以制作各种具体的应用镜像
- docker 镜像实际上由一层一层文件系统组成,这种层级的文件系统 UnionFS
好处
- 共享资源、方便复制迁移、方便复用
镜像加载
- 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
镜像操作
提交新的镜像一般基于已有镜像进行搭建
- 例如在原生 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 |
本地镜像发布到阿里云、从阿里云拉取到本地
本地镜像发布到私有库、从私有库拉取镜像
- 159.223.160.164 是本机的ip地址
- -v /hshuo/myregistry/:/tmp/registry --privileged=true的含义是自行用容器卷映射方便与宿主机联调
- 创建私有库
含义 | 命令 |
---|---|
下载镜像 docker registry | docker pull registry |
运行私有库 registry,相当于本地有个私有 docker hub | docker run -d -p 5000:5000 -v /hshuo/myregistry/:/tmp/registry --privileged=true registry |
- 创建新镜像,基于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 |
- 将镜像提交到私有库上
含义 | 命令 |
---|---|
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 | |
重启 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 |
- 从私有库拉取镜像
含义 | 命令 |
---|---|
从私有库上拉取镜像 | docker pull 159.223.160.164:5000/ifconfig_ubuntu:0.1 |