容器技术.
本文结构
基本概念
看下面的图.
安装加速器
访问https://dashboard.daocloud.io/build-flows,
注册用户,然后使用加速器,体验飞速下载.
安装完后重启
1 | sudo systemctl restart docker |
容器和虚拟机对比
为什么需要容器: 让软件具备很强的移植能力.
容器的单词是container,也就是集装箱的意思,将以前运送货物的思想用到软件上,则软件变成了可移植了.
docker核心组件
hello-world解析
看看hello-world的Dockerfile
1 | FROM scratch 此镜像是从 0 开始构建。 |
hello是个二进制文件,只是打印一句话.
base镜像
条件
- 不依赖其他镜像,从0构建
- 其他镜像可在其上扩展
比如centos,只有几百兆.
1 | FROM scratch |
docker可以适用很多OS,但是有2点需要知道:
- centos只有rootfs,bootfs适用Host的;
- centos适用的是Host的kernel,所以对于特定kernel版本的应用,容器不适合.
镜像的分层结构
如下dockerfile
1 | FROM debian |
则结构如下:
每层共享,但相互修改不影响,因为如下图:
容器层记录每个每个容器各自的修改,而镜像层是只读的,可以被多个容器共享.
这个技术称为Copy-On-Write(只有当需要修改时才复制一份数据).
- 添加文件: 在容器中创建文件时,新文件被添加到容器层中。
- 读取文件: 在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
- 修改文件: 在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
- 删除文件: 在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
本节来自blog