Docker 是一个轻量型虚拟机,它与虚拟机最大的区别是 Docker 不会虚拟出一个完整的操作系统,它套用宿主机的内核,因此,在 Linux 上只能使用 Linux 容器, Windows 亦如此,如果需要在 Windows 运行容器,那么需要在虚拟机中运行
Docker 技术本质上属于对资源隔离的应用,cgroup 和 namespace 使得容器技术成为可能。每个容器被限制在它自己的环境中,它感知到自己是一个完整的操作系统,但是实际上容器内的所有命令都是由宿主机完成的, 宿主机拥有对容器中二进制文件的感知能力 。因此,容器中命令的执行会受到宿主机 SELinux 等 MAC 的控制,SELinux 可以对容器中命令的执行进行拦截,即使容器中实际上并没有安装 SELinux。
Docker 技术基于 LXC ,每个容器都被隔离在 /var/lib/docker/containers
中的单独环境中。更近一步的说, Docker 是 chroot 技术的进化。
容器涉及到两个基础概念:镜像和容器
镜像是储存在硬盘中、包含操作系统和必要运行时的二进制文件
容器是镜像的运行时,是带有运行时配置的的镜像。
镜像的导入和导出
导出镜像分为两种:
动作 | 作用对象 |
export-import | 运行中的镜像 |
save-load | pull 下来的镜像 |
export-import 用来将 run 后的镜像导出,导出后丢失依赖层信息
save-load 用来将 pull 下来的镜像导出,导出后保留依赖层信息,但是会丢失 tag 信息