docker 镜像原理

需要掌握:docker命令run

  • FROM ubuntu:14.04 :设置基础镜像,此时会使用基础镜像 ubuntu:14.04 的所有镜像层,为简单起见,图中将其作为一个整体展示。

  • ADD run.sh /:将Dockerfile所在目录的文件run.sh加至镜像的根目录,此时新一层的镜像只有一项内容,即根目录下的run.sh.

  • VOLUME /data:设定镜像的VOLUME,此VOLUME在容器内部的路径为/data。需要注意的是,此时并未在新一层的镜像中添加任何文件,但更新了镜像的json文件,以便通过此镜像启动容器时获取这方面的信息。

  • CMD [“./run.sh”]:设置镜像的默认执行入口,此命令同样不会在新建镜像中添加任何文件,仅仅在上一层镜像json文件的基础上更新新建镜像的json文件。

图中的顶上两层,是Docker为Docker容器新建的内容,而这两层属于容器范畴。 这两层分别为Docker容器的初始层(Init Layer)与可读写层(Read-Write Layer)。

  • 初始层: 大多是初始化容器环境时,与容器相关的环境信息,如容器主机名,主机host信息以及域名服务文件等。
  • 读写层: Docker容器内的进程只对可读写层拥有写权限,其他层对进程而言都是只读的(Read-Only)。 另外,关于VOLUME以及容器的hosts、hostname、resolv.conf文件等都会挂载到这里。

为什么采用分层结构

最大一个好处就是——共享资源

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

验证镜像中是linux环境

执行下面命令:

docker run -it -p 8080:8080 tomcat /bin/bash

进入 容器的shell环境

进入根目录:cd /
浏览该目录:ls -l,结果如下:

total 64
drwxr-xr-x   1 root root 4096 Jun  9 16:36 bin
drwxr-xr-x   2 root root 4096 May  2 16:39 boot
drwxr-xr-x   5 root root  360 Jun 20 03:47 dev
drwxr-xr-x   1 root root 4096 Jun 20 03:47 etc
drwxr-xr-x   2 root root 4096 May  2 16:39 home
drwxr-xr-x   1 root root 4096 Jun 10 08:17 lib
drwxr-xr-x   2 root root 4096 Jun  7 00:00 lib64
drwxr-xr-x   2 root root 4096 Jun  7 00:00 media
drwxr-xr-x   2 root root 4096 Jun  7 00:00 mnt
drwxr-xr-x   2 root root 4096 Jun  7 00:00 opt
dr-xr-xr-x 153 root root    0 Jun 20 03:47 proc
drwx------   1 root root 4096 Jun  9 16:36 root
drwxr-xr-x   3 root root 4096 Jun  7 00:00 run
drwxr-xr-x   1 root root 4096 Jun  9 01:46 sbin
drwxr-xr-x   2 root root 4096 Jun  7 00:00 srv
dr-xr-xr-x  13 root root    0 Jun 20 03:47 sys
drwxrwxrwt   1 root root 4096 Jun 10 08:17 tmp
drwxr-xr-x   1 root root 4096 Jun  7 00:00 usr
drwxr-xr-x   1 root root 4096 Jun  7 00:00 var

目录结构就是linux

感谢:
https://www.jianshu.com/p/5ec3d4dbf580

https://zhuanlan.zhihu.com/p/93085215


原文出处:/show_1EF5jolE8ZyS.html