欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker镜像

程序员文章站 2022-03-30 09:30:19
...

什么是docker镜像

docker镜像即UnionFS(联合文件系统)–(可以理解为多层花卷),联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加

特性:一次加载多个文件系统,但从表面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

docker镜像加载原理

docker的镜像实际上是由一层层的文件系统组成,这种层级的文件系统是UnionFS。
UnionFS由两个部分组成bootfs(boot file system)和rootfs(root file system)。

bootfs主要包含bootloader和kernel,bootloader主要第引导kernel。docker镜像的底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会下载bootfs。

rootfs中包含是典型Linux系统中的/dev,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu、Centos等等。

平时我们安装进虚拟机的CentOS都是好几个G,但是为什么docker这里只有200M?

对于一个精简的OS,rootfs可以很笑,只需要包含最基本的命令、工具和程序库就可以了,因为底层直接用Host和kernel,自己只需要提供rootfs就行了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

docker镜像为什么采用这种分层结构?

最大的一个好处就是共享资源
比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以共享。

特点

docker容器都是只读的。当容器启动时,一个新的科协层被加载到镜像的顶部。这一层通常被称为”容器层“,容器层之下的都叫”镜像层“。

根据镜像模板生成新的镜像

这里以tomcat为例

拉取tomcat镜像并运行

docker run -it -p 9999:8080 tomcat

Docker镜像
http://ip:9999 访问
Docker镜像
这里出现404不是因为出问题了,而是因为原本应该在webapps文件中的文件都在webapps.dist文件中,接下来将webapps.dist修改为webapps。

  • Ctrl+p+q退出容器界面
  • 查看对应的容器iddocker ps
    Docker镜像
  • 进入容器docker exec -it 容器id /bin/bash
    Docker镜像
  • 将webapps修改为webapps2,将webapps.dist改为webapps
    Docker镜像
  • 测试http://ip:9999 访问
    Docker镜像

对已修改的容器commit生成自己的镜像

docker commit -a="author" -m="description" 容器id 包名/容器名

Docker镜像

  • 查看本地镜像
    Docker镜像
  • 运行自定义的镜像并测试
    Docker镜像
    Docker镜像
    到这里以镜像为模板自定义新的镜像已经完成,以后我们可以根据自己的需要自定义不同的镜像。也可以将自己自定义的镜像发布阿里云。
相关标签: Linux docker