本篇介绍了docker可视化工具、docker的镜像讲解以及commit自己的镜像。当前两篇(1,1.5)以及该篇看完并且实际操作完之后,docker算是真正的入门了!
可视化
- portainer(先用)
- Rancher(CI/CD再用)
什么是portainer?
Docker图形化界面管理工具!提供一个后台面板供我们操作
docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
访问服务器的公网ip:8080 就可以访问到了。第一次进入设置账号密码。选择本地 进入后
Docker镜像讲解
Docker镜像加载原理
UnionFS(联合文件系统)
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种叠加文件系统,它将来自于底层的文件系统,它支持将多个目录挂载到一个虚拟文件系统中,同时可以对不同目录读写操作——一个虚拟文件系统(unite several directories into a single virtual filesystem)。Union 文件系统支持 Docker 镜像的叠加。镜像可以通过分层的形式,基于已有镜像(这有点像类),可以任意组合和修改的镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载是把文件系统的目录树,这样就能够文件系统之间自由传递和叠加文件和目录
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, /proc, /bin, /etc 的标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
对磁盘大小进进行说明CentOS镜像有1个G,为什么Docker最多200M?
对于一个标准的OS,rootfs可以认为,只需要包含最基本的命令,工具和程序等就可以了,因为底层直接用的是Host的kernel,自己只需要提供rootfs就可以了。由此可以对于不同的Linux发行版,bootfs基本一致,rootfs会有差别,因此不同的发行版可以共用bootfs。
虚拟机是分钟级别,容器是秒级
分层理解
下载镜像的时候,观察下载的日志,是一层层在下载的
思考:为什么Docker镜像采取分层的结构呢?
最大的好处是资源共享! 比如有多个镜像从相同的Base镜像构建而来,那么宿主机只需要在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有的容器服务了,并且镜像的每一层都可以被共享。
查看镜像分层的方式可以通过 docker image inspect命令!
理解:
所谓的 Docker 镜像就是包含了一个完整的层级,当进行修改或者进行Docker的启动时,就会在当前的镜像层之上,创建新的镜像层。
举一个简单的例子,假如基于 Ubuntu Linux 16.04 创建一个新的镜像,这就是新的第一层;如果在这镜像中添加 Python包,就会在基础镜像之上创建第二个镜像层;如果你想添加一个安全补丁,就会创建第三个镜像层。
该镜像当创建三层之后,如下图所示(这只是一个用于示例的简单例子)。
(图像内部有三个层级,分别标记为“第1层”“第2层”“第3层”,并有一把锁在最上方的“锁”标记旁边)
在启动新的镜像的同时,镜像的每一个层都是与前面所有的层相结合的,理解这一点非常重要。下图中有了一个简单的例子,每个镜像层包含了3个文件,而镜像包含了来自两个镜像层的6个文件。
上图中的镜像层之间排列中的数字示例,主要的目的是展示文件。
下图中展示了一个镜像层之间的三层模型,在外部看来整个镜像包含6个文件,这是因为第二层中的文件7是文件5的一个更新版本。
这种情况下,上层镜像中的文件将覆盖下层镜像中的文件。这样的复写文件的功能由所有的镜像层中的一个镜像层显著加强的结果。
Docker 遵循存储引擎(或称为文件系统或快照)的方式来实现镜像层的叠加,并保证每层镜像只对其最初的一的文件有效。
Linux 上可用的存储引擎有 AUFS, Overlay2, Device Mapper, Btrfs 以及 ZFS。顾名思义,每种存储引擎都支持 Linux 中对应的文件系统或者设备技术,并且每种存储引擎都有其独特的性能特点。
Docker在Windows上仅支持windowsfilter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和Cow。
下图展示了与系统显示相同的三层镜像,所有镜像层堆叠并合并,对外提供统一的视图。
特点
Docker的镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层
commit镜像
docker commit 提交容器成为一个新的副本
docker -commit -m='提交的描述信息' -a='作者' 容器id 目标镜像名:[TAG]
实战测试
# 启动一个默认的tomcat
# 默认的tomcat没有webapps应用,镜像的原因,官方镜像默认webapps下面没有文件的
# 我自己拷贝进去了基本的文件
root@0d0713c81a0d:/usr/local/tomcat# cp -r webapps.dist/* webapps
# 这个tomcat启动就是有正常页面
# 把这个容器提交成一个我自己常使用的容器 就不用拷贝操作 使用commit操作
[root@iZwz909zuxxmim3sok3i3qZ ~]# docker commit -a="queqian" -m="add webapps app" 0d0713c81a0d tomcat08:1.0
sha256:d906b0684e8f93d997546b9d3fc33d250f7302d9a6c426400535a36215263cc1
[root@iZwz909zuxxmim3sok3i3qZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat08 1.0 d906b0684e8f 9 seconds ago 684MB
如果想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像