# Docker-learn-day1
# 第一篇 什么是 Docker
# 容器
- 容器:描述一个物理资源隔离的运行环境的术语。
- Docker 组成:Docker 包括一个命令行程序,一个守护进程和一组远程服务。
# 容器不是虚拟化
- Docker 容器不使用硬件虚拟化,它直接与 Linux 内核打交道。
- 容器存在已久,Docker 并不提供容器技术,只是 Docker 的出现方便了容器的使用。
- Docker 依赖:LXC(Linux Container)和 Cgroups(Control Groups)
# Docker 构建的容器隔离
- PID 命名空间 ———— 进程标识符和能力
- UTS 命名空间 ———— 主机名和域名
- MNT 命名空间 ———— 文件系统访问和结构
- IPC 命名空间 ———— 通过共享内存的进程间通信
- NET 命名空间 ———— 网络访问和结构
- USR 命名空间 ———— 用户名和标识
- chroot() ———— 控制文件系统根目录的位置
- cgroups ———— 资源保护
# 分发容器
- 命名空间和 cgroups 管理运行着的容器,而 Docker 另一套技术(镜像)像运输集装箱一样为文件提供容器。
- 一个 Docker 容器 = 一个集装箱,用于打包和分发的软件实现的组件就是 Docker 镜像。
- 镜像在 Docker 生态系统中是可交付的基本单位。
- 简化分发镜像的基础设施组件:注册服务器 + 索引服务器(包括官方和其他托管公司)
# 第二篇 Docker 解决什么问题
- 软件越多,潜在风险越大,并且越难管理。
- 组织有序
- 提高可移植性
# 组织有序
- “如果没有 Docker,一台机器运行完看起来就像一个装满垃圾的抽屉”
- 小 tips:/lib 目录为 Linux 操作系统库文件目录,因此一些依赖的名字都是以 lib 为前缀的。
- 运行在容器中的应用程序与各自的依赖互相捆绑在一起,在此之前是互相交错的状态。
# 提高可移植性
- 虽然没有办法完全移植,因为想这样做需要构建整个可移植的软件版本。