一、Docker介绍
1、Docker是什么
Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup、namespace、Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机于其他进程,这种运行时封装的状态称为容器。
Docker早期版本是基于LXC,并进一步对其封装、包括文件系统、网络互联、镜像管理等方面,极大简化了容器管理。从0.7版本以后开始移除LXC,转为自行研发的libcontainer,从1.11版本开始,进一步演进为使用runC和containerd。
Docker里念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序,程序之间相互隔离。
2、Docker体系结构
- Containerd:是一个简单的守护进程,使用runC管理容器。向Docker Engine提供接口。
- Shim:只负责管理一个容器。
- runC:是一个轻量级的工具,只用来运行容器。
举例:创建容器的流程
- Docker client将命令传递给Docker Engine,Docker Engine选择本地镜像或者从Image Repository(镜像仓库)拉取镜像;
- Docker Engine通知Contaninerd创建容器,Contaninerd收到请求后,启动shim;
- shim交给runC提供容器运行环境,runC挂载文件系统,启动对应的进程。
#通过查看docker进程,可以看到Contaninerd、Shim和runC详细
root 10532 0.0 0.0 9972 6400 ? Sl 03:24 0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux
/moby/ce02105208cc258d6e18e1b3f7fa6e7c783c544ca82b27ba8d9c55bf0ae27bd9 -address
/var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd
-runtime-root /var/run/docker/runtime-runc
(官方体系结构图)
架构也是一样的,不过没有详细解释Containers底层创建过程。
3、内部组件
Namespaces:命名空间,linux内核提供的一种对进程资源隔离的机制,例如进程、网络、挂载点等资源。
CGroups:控制组,Linux内核提供的一种限制进程资源的机制;例如CPU、内存等资源。
UnionFS:联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一个分层的模型。
4、虚拟机与容器区别
详细对比:
5、Docker应用场景
场景一、节省项目环境部署时间
- a、单项目打包
- b、整套项目打包
- c、新开源技术试用
场景二、环境一致性
场景三、持续集成
场景四、微服务
场景五、弹性伸缩
总结:开箱即用、快速部署、可移植性强、环境隔离等。
详情点击:http://blog.51cto.com/lizhenliang/1978081
二、Docker安装
1、Centos7.4安装Docker
-----------------------------安装------------------------------
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖包
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #添加Docker软件包源
yum makecache fast #快速更新yum源索引
yum install docker-ce #安装Docker社区版,ce社区版、EE企业版
systemctl start docker #启动Docker
-----------------------------卸载-------------------------------
yum remove docker-ce
rm -rf /var/lib/docker
官方安装文档:https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1