一、基础概念
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,是一个新兴的轻量级虚拟化技术,其主要动力是在不同的机器上创造无差别的应用运行环境。
Docker是以docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。是一个跨平台、可移植且简单易用的容器解决方案,其源代码托管在 Github 上,基于go语言并遵从Apache2.0协议开源。
Docker 使用客户端-服务器 (C/S) 架构模式,Docker容器本质上是宿主机上的进程,可在容器内快速自动化地部署应用,并通过操作系统内核技术(namespace、cgroups)为容器提供资源隔离和与安全保障(通过namespace实现资源隔离,通过cgroups 实现资源限制,通过写时复值机制(copy-on-write)实现了高效的文件操作)。其中,有六个namespace:Mount文件系统隔离、网络隔离network、主机名隔离UTS、进程间通信隔离IPC、用户和用户组隔离User、进行ID隔离PID。Cgroups可以限制、记录任务组所使用的物理资源(包括CPU/memory/IO等),为容器实现虚拟化提供基本保证。
二、基本组件
实际应用过程中,Docker 容器通过 Docker 镜像来创建,容器与镜像的关系类似于面向对象编程中的对象与类。
包含三部分:客户端、服务器和镜像仓库,如下图所示:
最核心的是 Docker Daemon我们称之为Docker守护进程,也就是Server端,Server端可以部署在远程,也可以部署在本地,因为Server端与客户端(Docker Client)是通过Rest API进行通信。图中各组件作用如下:
Docker Engine: 指的是通常意义上的docker容器,主要用来接收和处理docker命令请求。其架构为:
Docker Machine:则主要用来管理 docker化的host (安装了Docker Engine的主机);
docker Client客户端->向docker服务器进程发起请求,如:创建、停止、销毁容器等操作;
docker Server服务器进程->处理所有docker的请求,管理所有容器;
docker Registry镜像仓库->镜像存放的中央仓库,可看作是存放二进制的scm;
三、虚拟机与Docker的区别
1. 底层架构
2.基本属性
四、Docker安装
Docker分为社区版和企业版,且支持不同的操作系统平台,不同系统的软件依赖不一样,用户安装时需选择符合当前操作系统的版本。
安装docker具有三种方式,(1)设置docker镜像源(2)手动rpm(3)编写运行脚本;一般选择设置第一种方式,但是若所在范围不能联网,则建议手动rmp包安装。
方一:使用yum在centos上安装
1. 验证当前centos系统是否为64位,内核版本是否高于3.10;
命令:uname -r
2. 移除旧版本
yum remove docker docker-client docker-common \
docker-client-latest docker-latest docker-logrotate docker-engine \
docker-latest-logrotate docker-selinux docker-engine-selinux
换行需在每行末尾加斜杠\。
3. 安装一些必要的系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
4. 添加软件源信息(即yum获取源路径)
yum-config-manager --add-repo http://mirrors.aliyun.com / docker-ce/linux/centos/docker-ce.repo
5. 更新缓存:sudo yum makecache fast
6.安装docker-ce:sudo yum -y install docker-ce
7.启动docker后台服务:sudo systemctl start docker
8.测试运行hello-world:docker run hello-world
五、Docker安装目录
- 安装目录,安装完之后,会生成几个文件夹?
Pull镜像存放在哪?docker/container/xxx下,xxx的具体信息在docker/image/overlay/ repositories.json里。
docker 的镜像与容器都存储在 /var/lib/docker 下面。
不同操作系统具有不同存储方式,其中,Redhat版本,在该路径下,文件目录如下:
├── containers
├── devicemapper
│ ├── devicemapper
│ │ ├── data
│ │ └── metadata
│ └── metadata
│ ├── base
│ ├── deviceset-metadata
│ └── transaction-metadata
├── graph
├── linkgraph.db
├── repositories-devicemapper
├── tmp
├── trust
└── volumes
其中,devicemapper/devicemapper/data(metadata)下的data和metadata是用来存储对应的存储池和相关的元数据。devicemapper /metadata下的metadata用来存放前面元数据的id、大小、以及UUID等信息。