不少人从来没有接触过 docker, 或者仅仅是听说过, 本文试图从原点开始深入了解 docker 的全貌, 剖析 docker 的基础概念, 让我们一起开始 docker 之旅~~~
开场: 什么是 docker
docker 是一个容器平台.
这是我最直接的定义, 打字间我即兴查了一下 wiki, 引证了以上单句
Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels. All containers are run by a single operating-system kernel and are thus more lightweight than virtual machines https://en.wikipedia.org/wiki/Virtual_machine .
目标: 为什么用 docker
docker 可以提供即开即用的特定 OS 环境, 并且简化对相关 OS 的依赖或者部署周期
这是我的看法, 互联网工作者几乎 99.9% 都是以 App 或者 Service 作为导向, 而实际使用中 docker 不仅仅是为了快速部署, 容灾热备, 换句话说 docker 不仅仅是和应用相关
docker 适合一切以环境导向的联合部署作业(TASK-oriented)
例子: 一个简单的网络型 App 和这个 App 依赖的复杂网络设置
例子: 一个简单的用户态服务和一个复杂的定制化 Linux OS, 如 OPENWRT
例子: 一个简单的源码文件夹和一个复杂的跨架构工具链
概念: docker 的逻辑结构
docker 是 vm 的包装, docker-machine 是 docker 开始的地方, 这里存在并且一直被忽视一个非常关键的适配桥接: driver
machine 的特性 start/stop 和 driver 的模型决定了另一端一定存在一种虚拟化支持, 也就是说 docker 不是虚拟化的全部而只是一个名词的概要, docker 离不开虚拟化
理由非常简单而且明确: docker-machine 和 dock-cli 到组成的 engine, 编译 88% 以上的源码语言 go.
体验: 从 Windows 10 到 Windows 7 不同的 docker 产品, 一样的基础构成
- 跟随 docker for Windows 一路走来, docker 以非常匀速的方式在不停演化, 一切都在意料之中
Docker Desktop for Windows 是伴随着 Hyper-V(win 7 无缘的本质)的联合体, 这里诞生出一个 moby, 作为整个产品的特异化核心
Docker Desktop for Mac 是伴随着 linuxkit+qemu 的联合体, 这里又又诞生出一个 moby, 作为整个产品的特异化核心
Docker Toolbox 是伴随着 Docker Desktop 发展的弃婴 (巨大的甲骨婴), 本文, 我们(我和我的看官们) 将抛弃一个时代失败品 Oracle VM VirtualBox, 迎来本篇的内涵 Vmware
深化: 在 Windows 7 上非常规的使用 Vmware Workstation 和 docker
如果你仅仅猜到了开始, 看到我 blah-blah-blah 码了几百字就应该会猜到, hehe 以下都是精华浓缩版, 因为困了, 要睡觉了
长话短说, 短话精缩, Win 7 上使用 workstation 太通常了, 稍微有一些虚拟化经验的都知道微软有 Virtual PC. 而它的对面就是 Vmware.
显然 Virtual PC 挑不动 docker 这根大梁所以 Hyper-V 才能独树一帜(没有细分的产品)
准备好 docker vmware driver 就开始吧, 我用的是大家不太常见的 driver, 没有任何 start 说明
我的 docker 和 vmware 都没有安装在缺省路径, 这时必须要动动脑筋, soft/hard link 可以解决问题
我的超高 T 级 HGST 氦气盘没有在缺省路径, 所以我们准备把 VM 放在这个仓储上必须提供 storepath 的环境变量, 我在 go 文件中确认过 cli 上下文, 或者系统级别都提供支持
我的 docker 动辄几百 G, 从 export 容器的从容不迫到更新 image:latest,tar 到文件, 4.14 的 kernel 必然的某些特定错误, 不难看出 4.19 的适用面更广也支持度也高于通俗的 4.14kernel
XFS 提供了很好的并行 IO 性能
关键语句是修改 start.sh 执行 ${DOCKER_MACHINE}"create -d vmware --vmware-boot2docker-url="file://\????????.iso", 此处应有掌声, 因为经历了几次失败后我发现失败的路径是 docker 的安装盘, 所以可以逃避失败删除 boot2docker-url 在覆盖 cache 后等一段时间, 或者如上所示干脆把盘符省去, 后面的路径都是有效的, 不知道是不是 start.bat 没有问题
当然可以看一下创建时的调试输出, 一般不看也是一件很省心的事情, 应该一切顺利
env 可以输出环境变量, cmd/ps 可以看到 SET 版本, bash 看到 export 版本
然后在困意中, 我贴出本文最佳, 之 2 幅图片在结尾, 一如既往, 所有的内涵都在图片里, 所有的内涵都在图片里, 所有的内涵都在图片里
提前 To be continued.
来源: https://www.cnblogs.com/A-Z/p/docker_4-19_win7_vmware.html