可视化工具
- portainer
-
portainer
定义:
- docker 图形化管理工具, 提供一个后台面板供我们操作
- 安装命令:
```shell
—restart: 一个方式
-v: 挂载用
—privileged: 授权用
docker run -d -p 8088:9000 —restart=always -v /var/run/docker.sock:/var/run/docker.sock —privileged=true portainer/portainer
访问测试:
服务器IP:8088 (如下图所示)
- 访问portainer:<a name="N4XrQ"></a># 镜像- 定义:- 一种轻量级, 可执行的独立软件包, 用来打包软件运行环境和基于环境开发的软件, 它包含运行某个软件所需的所有内容, 包括代码, runtime, 库, 环境变量和配置文件- 注:- 所有的应用, 直接打包docker 镜像, 就可以直接跑起来- 如何得到镜像?- 从远程仓库下载- 朋友拷贝给你- 自己制作一个镜像Docker File<a name="sZYFv"></a>## 镜像加载原理<a name="U8FTk"></a>### UnionFS (联合文件系统)- 定义:- Union 文件系统 (UnionFS) 是一种分层, 轻量级并且高性能的文件系统, 它支持文件系统的修改作为一次提交来一层层的叠加, 同时可以将不同目录挂载到同一个虚拟文件系统下 (unite serveral directories into a single virtual file system). Union 文件系统是Docker 镜像的基础. 镜像可以通过分层来继承, 基于基础镜像 (没有父镜像), 可以制作各种具体的应用镜像.<a name="DyJA3"></a>### Docker 镜像加载原理- Docker 的镜像实际上由一层一层的文件系统组成, 这种层级的文件系统是UnionFS (联合文件系统)- BootFS (boot file system) 主要包含bootloader 和kernel, bootloader 主要是引导加载kernel, Linux 刚启动时会加载BootFS 文件系统, 在Docker 镜像的最底层是BootFS. 这一层与我们典型的Linux/Unix 系统是一样的, 包含bootloader 和kernel. 当bootloader 加载完成之后整个内核就都在内存中了, 此时内存的使用权已由BootFS 转交给内核, 此时系统也会卸载BootFS.- RootFS (root file system), 在BootFS 之上. 包含的就是典型Linux 系统中的/dev, /proc, /bin, /etc 等标准目录和文件. RootFS 就是各种不同的操作系统发行版, 比如Ubuntu, CentOS 等等.<br />- 简单的理解:- BootFS 是所有Linux 系统 (Ubuntu, CentOS 等) 都通用的且不会变 (加载器和内核, 系统的组成部分, 加载器负责将内核加载到内存, 全部加载完毕后系统就启动了)- RootFS 就是负责调用BootFS 的指令, 相当于一个包装器, 不同的包装器 + BootFS 就形成了不同的Linux 系统版本- **对于在pull 时看到的layer, 可以理解为不同的RootFS, 将指令和所需文件变成了不同的层级以便于复用, 共享同一个BootFS**- 问题:- 平时我们安装进虚拟机的CentOS 都是好几个G, 为什么Docker 的CentOS 镜像才200M?- 因为对于一个精简的OS, RootFS 可以很小, 只需要包含最基本的命令, 工具和程序库就可以了, **因为底层直接用Host 的Kernel, 自己只需要提供RootFS 就可以了, 这就是为什么虚拟机笨重且启动慢, 而容器可以秒级启动, 因为容器是依赖宿主机的, 宿主机的内核已经在内存里面了, 无需加载!** 由此可见对于不同的Linux 发行版, **BootFS 基本是一致的, RootFS 会有差别, 因此不同的发行版可以公用BootFS.**<a name="BNfzF"></a>## 分层理解- 当使用Docker 去下载一个镜像时, 可以看到镜像的内容是分层下载的:- 所有的Docker 镜像都起始于一个基础镜像层, 当进行修改或增加新的内容时, 就会在当前镜像层之上, 创建新的镜像层.- 举一个简单的例子, 假如基于Ubuntu Linux 16.04 创建一个新的镜像, 这就是新镜像的第一层; 如果在该镜像中添加Python 包, 就会在基础镜像层之上创建第二个镜像层; 如果继续添加一个安全补丁, 就会创建第三个镜像层.- 该镜像当前包含3 个镜像层, 如下图所示 (这只是一个用于演示的很简单的例子)- 在添加额外的镜像层的同时, 镜像始终是当前所有镜像的组合, 理解这一点非常重要. 下图中举了一个简单的例子, 每个镜像层包含3 个文件, 而镜像包含了来自两个镜像层的6 个文件.- 上图中的镜像层跟之前图中的略有区别, 主要目的是便于展示文件.- 下图中展示了一个稍微复杂的三层镜像, 在外部看来整个镜像只有6 个文件, 这是因为最上层中的文件7 是文件5 的一个更新版本. (文件7 替换文件5)- 这种情况下, 上层镜像层中的文件覆盖了底层镜像层中的文件. 这样就使得文件的更新版本作为一个新镜像层添加到镜像当中.- Docker 通过存储引擎 (新版本采用快照机制) 的方式来实现镜像层堆栈, 并保证多镜像层对外展示为统一的文件系统- Linux 上可用的存储引擎有AUFS, Overlay2, Device Mapper, Btrfs 以及ZFS. 顾明思义, 每种存储引擎都基于Linux 中对应的文件系统或者块设备技术, 并且每种存储引擎都有其独有的性能特点.- Docker 在Windows 上仅支持windowsfilter 一种存储引擎, 该引擎基于NTFS 文件系统之上实现了分层CoW.- 下图展示了与系统显示相同的三层镜像. 所有镜像层堆叠并合并, 对外提供统一的试图.- 特点:- **Docker 镜像都是只读的, 当容器启动时, 一个新的可写层被加载到镜像的顶部**- **这一层就是我们通常说的容器层, 容器层之下都叫镜像层**<a name="z8FWH"></a>## 自定义镜像- 我们日常拉取的镜像是由别人制作再提交到仓库的。- 我们自己也是可以制作镜像并提交的,使用 docker commit 命令。<a name="rvx2e"></a>### 提交镜像 (docker commit)- 语法```shelldocker commit [参数] 容器 [仓库[:标签]]
- 参数
- -a:作者信息。一般为 作者名字<邮箱>。
- -c:将 Dockerfile 指令应用于创建的映像。
- -m:注释信息。
- -p:提交期间暂停容器(默认)。
- 作用:
- 如果想要保存当前容器的状态, 就可以通过commit 来提交, 获得一个镜像, 就比如VM 的快照
- 例子
- 制作自定义镜像, 如下图:

启动自定义镜像:
docker run -it -p 8081:8080 tomcat-2:1.0
访问测试:

