# docker-study
**Repository Path**: wlyfree/docker-study
## Basic Information
- **Project Name**: docker-study
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-05-16
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Docker
## 相关文档
**官方文档:** [https://docs.docker.com]()
**Centos下安装Docker社区版:**
```shell
# 内核要求3.10+
[root@VM_0_9_centos ~]# uname -r
3.10.0-957.el7.x86_64
# 安装依赖库
[root@VM_0_9_centos ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加稳定的存储库
[root@VM_0_9_centos ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 查找可用的docker
[root@VM_0_9_centos ~]# yum list docker-ce --showduplicates | sort -r
# 安装docker
[root@VM_0_9_centos ~]# yum install docker-ce
# 启动docker服务
[root@VM_0_9_centos ~]# systemctl start docker
# 设置docker开机启动(非必须)
[root@VM_0_9_centos ~]# systemctl enable docker
# 验证安装结果
[root@VM_0_9_centos ~]# docker version
```
## 概念相关
**参考博文:**
### 镜像(Image)

- 镜像就是一个可运行的只读文件,包含应用代码、类库、环境变量、配置文件等
- 镜像是由一层一层的镜像层组成,每一层都是基于其底层的变更
- 镜像层中包含一个指针和存储元数据的空间
### 容器(Container)

- 容器 = 镜像 + 读写层
- 容器中也包含一个指向下层的指针和存储元数据的空间
### 运行期的容器

- 运行期的容器 = 容器 + 进程空间(包含内部的进程)
- 运行中的容器可以理解为一个简易的linux环境(文件系统、用户控件、进程空间)
### 仓库(Repository)
- 镜像仓库,包含很多别人打包好的镜像,类似于maven的仓库。在Docker中默认的仓库是Docker Hub。
## 性质
### 容器 VS 虚拟机
**Guest OS:**虚拟机安装的完整的操作系统内核,通过Hypervisor虚拟化技术
**Hypervisor:**硬件虚拟化平台,在Host OS以内核态驱动存在。
**Docker Engine:**Docker引擎,上层容器共享宿主机内核。
对比容器和虚拟机的架构图,Docker Engine替代了Guest OS和Hypervisor
| | VM | Docker |
| :------------: | :----------------------------------------------------------: | :------------------------------: |
| 内核 | 虚拟机内安装OS,单独的内核,通过Hypervisor虚拟化技术操作硬件 | 共享宿主机内核,操作硬件 |
| 体积 | 大 | 小 |
| 启动速度 | 分钟级,需要重新引导、加载OS内核 | 秒级,共享宿主机OS,无需重新引导 |
| 集成能力 | 弱 | 强 |
| | 低,需要硬件虚拟化 | 高,直接操作 |
| 系统环境隔离 | 虚拟化 | 内核自带的namespace |
| 资源隔离 | 虚拟化 | Cgroup |
| 根目录环境隔离 | 虚拟化 | 镜像 |
### 运行架构

Docker Engine是C/S架构的,Client端命令都是交给Docker daemon执行的,Client和daemon的交互使用Rest API。
使用docker build可以通过docker file新建Image
使用docker pull可以从远端仓库pull镜像
使用docker run可以把xx镜像运行为一个容器,run默认会检查本地是否存在镜像,不存在则从远端仓库自动拉取并运行。
### 总体架构


### 命令图
**参考博文:**


## 常用命令
## Docker file
## Docker三剑客
### Docker Compose
### Docker Machine
### Docker Swarm