Docker


目录

  • Docker
  • 一.Docker的背景
  • 二.Docker是什么
  • 三.Docker三大组件
  • 四.Docker与虚拟机相比的优势
  • 五.使用Docker的意义
  • 六.Docker使用场景
  • 七.Docker 引擎(Docker Engine)
  • 八.Docker架构
  • 九.名称空间(Namespaces)
  • 十.控制组(Control groups)
  • 部署docker
  • 一.环境配置
  • 二.安装依赖包
  • 三.设置阿里云镜像源
  • 四.安装Docker-ce
  • 五.配置阿里云的镜像加速
  • 六.网络优化
  • 总结


一.Docker的背景

以Linux而言,Linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务。
例如:
pid=2——>python pid=3——> java pid=4——>php,三个服务可能会互相影响,但是希望这三个服务分别封装起来(可以使用kvm虚拟化技术,实现一个操作系统模拟多个操作系统/不同的运行时环境)随着技术的发展,虚拟化技术开销较大(比如:我只想运行一个python脚本,如果使用kvm虚拟化技术就需要安装一个操作系统并不方便/合理,安装一个kvm操作可能花费的时间更多)所以由此产生容器技术,虚拟化层的抽象层(用户层)剥离,使用docker egine来代替(来宾操作系统去除),只通过引擎就可以直接连接到宿主机操作系统中,减少了开销。

二.Docker是什么

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。是一个开源的应用容器引擎,让开发者以打包方式封装应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
沙箱(Sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制)Docker在2013年一炮而红,直到现在,已经成为容器技术的代名词。
Docker从一开始就以提供标准化的运行时环境为目标,真正做到"build once,run anywhere",可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出了Caas(容器即服务)技术。
总结:Docker是基于容器技术的轻量级虚拟化解决方案
Docker是容器引擎,把linux的cgroup、namespace等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行Cli、api等)docker也是一种C/S架构,client和server端工作在一起(cgroup:资源管理技术(是谷歌开发集成在linux中))

三.Docker三大组件

1.镜像(images)
一个面向Docker容器引擎的只读模板
提供单一的格式的一个组合型/叠加型文件(资源集合),一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境)
2.容器(container)
从镜像创建的运行实例
基于镜像的一种运行状态
3.仓库(registry)
集中保存镜像的地方
1.公有仓库:Docker官方仓库 docker hub ,github
2.私有仓库:个人化、私有化的仓库 registry(字符终端) ,harbor(web图形界面)gitlab
PS:存储镜像的地方,默认在公共的Docker Hub上查找,可以搞个人仓库。

docker 创建 image docker 创建线程_linux

docker bulid构建,pull下载,run运行

Docker daemon 守护进程也就是server端

四.Docker与虚拟机相比的优势

  • docker 引擎统一了基础设施环境-docker 容器环境(引擎)
  • docker 引擎统一了程序打包(装箱)方式-docker镜像
  • docker 引擎统一了程序部署(运行)方式-docker容器

docker与虚拟机区别之一( 资源利用率/损耗)
问:那如何实现应用A和应用B隔离
应用和应用的隔离,如何进行判断
以操作系统维度
应用A-与应用B隔离,在操作系统中,是通过namespaces (名称空间、命名空间)实现的,只要实现以下6个空间隔离,才能认为两个应用实现了完全/完整隔离

不同点

Docker container

VM(虚拟机)

启动速度

秒级

分钟级

运行性能

接近原始(直接在内核中运行)

50%左右损失

磁盘占用

MB

GB

数量

成百上千

一般几千台

隔离性

进程级别

系统级别

操作系统

主要支持Linux

几乎所有

封装程度

只打包项目代码和依赖关系,共享宿主机内核

完整的操作系统,与宿主机隔离

五.使用Docker的意义

docker 引擎统一了基础设施环境-docker 容器环境(引擎)

docker 引擎统一了程序打包(装箱)方式-docker镜像

docker 引擎统一了程序部署(运行)方式-docker容器

六.Docker使用场景

1.打包应用程序简单部署
流程:将应用程序代码 ,打包成war包或jar包——>放入私有仓库中(代码仓库)——>jenkins等工具,jenkins可以查看代码构建镜像失败的原因,相当于简单测试(构建镜像/应用程序封装)——>运维下载,或使用容器技术进行运行/发布
2.可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),比如:服务器从腾讯云迁移到阿里云
3.持续集成和持续交付(CI/CD):开发到测试发布
4.部署微服务
5.提供PASS产品(平台即服务)Openstack的云主机类似于阿里云的ECS,属于IAAS,Docker(K8S)属于PAAS
IAAS:基础设施即服务
SAAS:应用即服务
PAAS:平台即服务

七.Docker 引擎(Docker Engine)

Docker Engine 是具有以下主要组件的客户端——服务器应用程序(C/S架构)
服务器(server)是一种长期运行的程序。称为守护程序进程(dockerd命令)。
REST API,指程序可以用来与程序进行通信并指示其操作的接口
命令行界面(CLI)客户端(docker命令)

  • docker run
  • docker start
  • docker rm

客户端传入docker指令/命令一》通过restAPI—》进入内核中的docker-server端—》 由server端进 行处理—》通过rest API返回给docker-client 端进行展示

docker 创建 image docker 创建线程_容器_02

八.Docker架构

1.docker使用客户端——服务器架构。docker 客户端与docker守护进程进行对话,该守护进程完成构建,运行和分发docker容器的繁重工作。Docker区别于传统的虚拟化,不需要虚拟硬件资源,hi姐使用容器引擎,所以速度块
2.docker client:客户端/提供一个于用户交互,展示的平台+管理,控制docker服务端(命令行)
3.docker客户端(docker)是许多docker用户与docker交互的主要方式,当您使用比如docker run命令是客户端将这些命令发送到dockerd,以执行这些命令。该docker命令使用docker api。docker客户端可以与多个守护进程通信
4.docker daemon:守护进程
5.docker守护程序(docker)侦听docker
api请求并管理docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护进程通信以管理docker服务
6.docker image(镜像)
容器可以被打包成镜像
docker container :容器
docker registry :镜像仓库
储存镜像的地方,默认在公共的docker hub 上查找,可以使用个人仓库

九.名称空间(Namespaces)

Docker使用一种成为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组名称空间。
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
Docker Engine(Docker 引擎)在Liunx上使用以下名称空间:

mount

文件系统,挂载点

user

操作进程的用户和用户组

pid

进程编号

uts

主机名和主机域

ipc

信号量、消息队列,共享内存

net

网络设备、网络协议栈、端口

pid命名空间:进程隔离(pid:进程ipd号)
net命名空间:管理网络(net:网络)
ipc命名空间:管理访问ipc资源(ipc:进程间通信)
mnt命名共享:管理文件系统挂载点(mnt:mount挂载)
uts命名空间:隔离内核文件和版本标识符(uts:unix时间共享系统)

十.控制组(Control groups)

Linux_上的Docker引擎还依赖于另一种称为控制组( cgroups)的技
术。cgroup 将应用程序限制为一组特定 的资源。控制组允许Docker
Engine将可用的硬件资源共宁给容器,并有选择地实施限制利约束。
例如,您可以限制特定容器可用的内存。
PS:cgroups管理 3.8版本(如果想完整的使用Docker内核版本必须是3.8以上);Linux 内核版本3.8+

部署docker

一.环境配置

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname docker
[root@localhost ~]# su
[root@docker ~]#

docker 创建 image docker 创建线程_容器_03

二.安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

#yum-utils提供了yum-config-manager,yum的管理工具
#device-mapper-persistent-data 容器引擎的存储驱动
#device mapper存储驱动程序需要device-mapper-persistent-data和lvm2
#Device Mapper 是Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动

docker 创建 image docker 创建线程_容器_04

三.设置阿里云镜像源

cd /etc/yum.repos.d
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

docker 创建 image docker 创建线程_linux_05

四.安装Docker-ce

yum install -y docker-ce

systemctl start docker.service 
systemctl enable docker.service

docker 创建 image docker 创建线程_Docker_06

五.配置阿里云的镜像加速

加速地址从阿里云官网获取::https://account.aliyun.com/

docker 创建 image docker 创建线程_docker_07


docker 创建 image docker 创建线程_linux_08

docker 创建 image docker 创建线程_docker_09


docker 创建 image docker 创建线程_linux_10

六.网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1		#ipv4转发功能

sysctl -p

systemctl restart docker 或 service network restart

docker 创建 image docker 创建线程_linux_11


docker 创建 image docker 创建线程_容器_12

总结

Docker有哪些优势:
(三个统一 ①封装的模式image②运行时环境container ③统一的平台engine )
docker把容器化技术做成了标准化平台CAAS (docker统一/指定了容器化技术的标准化平台)
使用docker有什么意义(实现了3个统一)
docker引擎统一了基础设施环境-docker环境一》image》 封装一个简易的操作系统(3.0+G )
docker引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像一》 images
docker 引擎统一了程序部署(运行)方式-docker容器—>》基于镜像-》运行为容器(可运行的环境)实现了一次构建、多次、多处使用

容器隔离了6个名称空间:
1.mount
2.user
3.net
4.ipc
5.pid
6.uts

Docker三大组件:
1.镜像
2.容器
仓库

docker和vm之前的区别,主要就是在于资源利用率和隔离性(共享内核、独立的操作系统)

Docker的意义:
docker 引擎统一了基础设施环境-docker 容器环境(引擎)
docker 引擎统一了程序打包(装箱)方式-docker镜像
docker 引擎统一了程序部署(运行)方式-docker容器