Docker简介及centos7安装docker服务

容器级虚拟化

1、容器的分类

lxc:linux container   
openvz
docker

2、虚拟化分类

硬件级虚拟化

kvm,xen:有独立的操作系统,完全隔离的。最底层是硬件,再上一层是内核,再上层是虚拟出来的独立的虚拟主机,是完全隔离的。

库级别虚拟化:wine

最底层是硬件,上一层是内核,再上一层是库。

应用级虚拟化

jvm,java的虚拟技术,只是提供程序的运行环境。

3、Docker介绍

3.1、Docker:设计所需要的3个核心技术

NameSpace:名称空间

	内核级别完成环境隔离,
	chroot机制,

	PID NameSpace:隔离PID号,都是独立的PID,linux2.6.24开始使用。
	Network NameSpace:linux 2.6.29开始引用。网络设备,网络栈,端口等网络资源隔离。
	User NameSpace:用户和用户组资源隔离,linux 3.8,docker依赖于linux内核的3.10
	IPC NameSpace:进程间通信技术名称空间。进程间通信隔离。信号量,消息队列和共享内存的隔离,linux 2.6.19
	UTS NameSpace:linux 2.6.19,主机名和域名的隔离。
	Mount NameSpace:已识别的挂载文件系统隔离。挂载点资源隔离机制。linux 2.4.19
	API:clone(),setns(),unshare(),主要调用接口。

CGroup

linxu Control Group,控制组,内核级功能,linux 2.6.24引用
	限制,控制与分离一个进程组群的资源。配比资源,一个进程使用了CPU和内存的一部分资源。
	资源:CPU,内存,IO

	功能:
		Resource limitation:资源限制,
		Priorltization: 优先级控制。
		Accounting:审计和统计,主要为计费。
		Control: 挂起进程,恢复进程。

	/sys/fs/cgroup:基于单根树状结构层级分配机制。
	lssubsys -m
	mount

CGroup子系统:subsystem

	blkio:设定块设备的IO限制;
	cpu: 设定cpu的限制。
	cupacct: 报告cgroup中使用的CPU资源。
	cpuset: 为cgroup中的进程分配cpu和内存资源。
	memory: 设定内存的使用限制。
	devices: 控制cgroup中的任务对设备的访问。
	freezer: 挂起或回复cgroup中的任务。
	net_cls: (classid),使用等级级别标识符,来标记网络数据包,以实现基于tc完成对不同cgroup种产生的流量控制。
	perf_event: 性能控制相关的事件。使用后使cgroup中的任务可以进行统一的性能测试。
	hugetlb: 转换后援缓冲器,对HugeTLB 系统进行限制,大页(大内存页)系统(减少内存分配的次数),默认内存页是4K,可以使用大页改变为2M。

CGroup中的术语:

	task(任务):进程或线程;一个任务,只能属于一个cgroup。可以迁移。
	cgroup: 一个控制组,一个独立的资源控制单位。可以包含一个或多个子系统。
	subsystem: 子系统,需要关联至cgroup上。
	hierarchy: 资源组的层级结构,树状结构。

AUFS: UnionFS(联合文件系统),在ubuntu的内核中引入。

	UnionFS: 把不同的物理位置的目录合并到同一个目录中。实质:例如有1个目录test1另外有1个目录lufei1,其中test1和test2中有fstab的文件,lufei1 中有linux.txt文件,当使用UnionFS文件系统合并后,如果test1和test2在前边,则fstab文件是可读可写的,lufei1对这个文件只是可读,当lufei1在前边时,则linux.txt文件是可读可写的,fstab是可读的。

	Another UFS,Alternatlve UFS, Adanced UFS,日本人写的高级UnionFS版本,docker强依赖于AUFS。CentOS不支持这种机制,但支持UFS功能。

Device mapper: 为底层设备提供抽象功能。

	linux 2.6内核引入的最重要的技术之一,用于在内核中支持逻辑卷管理的通用设备映射技术,与AUFS原理相同。
		Mappend Device
		Mapping Table: 虚拟设备到物理设备之间的映射路径。
		Target Device

C/S:

	Docker Client:客户端发起docker相关请求。是用户使用docker的主要接口,docker client与docker daemon通信并将结构返回给用户。
	Docker Server:容器运行的节点。docker deamon:运行于宿主机上,是docker守护进程,用户可通过docker client与其交互。

image:

	镜像文件是只读的,用来创建container,一个镜像可以运行多个container;镜像文件可以通过dockerfile文件创建,也可以从docker hub/registry下载。

repository

	存放镜像文件。可以网络上的,也可以是本局域网的。
	公共创库:docker hub/registry
	私有创库:docker registry

docker container: docker的运行实例,容器是一个隔离环境。

另外两个重要组件:
	docker link:
	docker volume: 存储持久化文件。

解决方案:

	lxc:linux containers
	openvz:
	libcontainer:叫新系统版本(Cent OS 7)的docker使用的核心组件。

4、centos7安装docker

自动安装

		curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun    官网安装
		curl -sSL https://get.daocloud.io/docker | sh     国内 daocloud 一键安装命令

手动安装

卸载旧版本

	yum remove docker \
	  docker-client \
	  docker-client-latest \
	  docker-common \
	  docker-latest \
	  docker-latest-logrotate \
	  docker-logrotate \
	  docker-engine

使用 Docker 仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker
	
设置仓库

	安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
	yum install -y yum-utils device-mapper-persistent-data lvm2

使用以下命令来设置稳定的仓库
		yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo    官方仓库,较慢
		yum-config-manager --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   阿里仓库
		yum-config-manager --add-repo  https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo   清华大学仓库
	
安装 Docker Engine-Community
		yum -y install docker-ce docker-ce-cli containerd.io
				
列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
		yum list docker-ce --showduplicates | sort -r
			
启动:sudo systemctl start docker
	
Docker 镜像加速
	vim /etc/docker/daemon.json
		{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
		或者
		{
		  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
		  "hosts": [
			"tcp://0.0.0.0:2375",
			"unix:///var/run/docker.sock"
		  ]
		}

systemctl daemon-reload
systemctl restart docker

二进制安装:

wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin
开机自启配置
cat > /usr/lib/systemd/system/docker.service << EOF    
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF


mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "hosts": [
	"tcp://0.0.0.0:2375",
	"unix:///var/run/docker.sock"
  ]
}
EOF

systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl status docker
上一篇:《深入剖析Kubernetes》-张磊——白话容器基础(二):隔离与限制


下一篇:浅谈Cgroups V2