主机虚拟化(vmware,visual box等)

  • type-Ⅰ
  • type=Ⅱ

主机虚拟化是隔离最彻底的,但是由于多隔了一个虚拟的操作系统,性能会慢一些。

容器虚拟化(docker等)

隔离没有主机虚拟化强,但是由于没有多余的虚拟的操作系统,所有的docker都运行在一个内核之上,性能会好。

不管什么样的虚拟化以下信息都需要是各自独立的:

缩写 说明
uts 主机名和域名
mount 挂载点(文件系统)
IPC 信号量,消息队列和共享内存
PID 进程ID
network 网卡,tcp套接字,网络设备,端口等
user 用户和用户组

要想实现以上功能

必须使用linux内核提供namespace功能,通过系统调用(clone(),setns()等)。

分配资源给容器

  • 主机虚拟化:在创建系统的时候,就可以指定使用几个cpu,多大的内存等外设。

  • 容器虚拟化:通过linux内核提供的control groups(Cgroups)功能,来控制各个容器,使用多少cpu,内存等。

    Cgroups可以控制以下设备:

    缩写 说明
    blkio 块设备IO
    cpu CPU
    cpuacct CPU资源使用报告
    cpuset 多处理器平台上的CPU集合
    devices 设备访问
    freezer 挂起或恢复任务
    memory 内存用量和报告
    perf_event 对cgroup中的任务进行统一性能测试
    net_cls cgroup中的任务创建的数据报文的类别识别符

隔离能力对比

容器级虚拟化肯定比主机级虚拟化的隔离能力低。

理由:容器级虚拟化,是在同一个内核之上的;主机级虚拟化本身就是在不同的内核上。

linux内核都提供了上述的隔离能力所用到的系统调用了,那还有docker什么事呢?

那些系统调用是需要写程序的,不是谁都能用的好。所以要有一个便于使用的现成的工具就好了。

这些现成的工具有个名字:LXC(LinuX Container),这些工具包含下面的命令(这些命令需要额外安装:sudo apt install lava-lxc-mocker,sudo apt install lxc-utils):

  • lxc-create:假如在red hat上安装一个utuntu。lxc-create提供了很多模板,对应不同的linux发行版,然后根据模板去远程仓库里找相应的包,下载到本地后,进行安装。

当用上面的命令创建好生成环境后,如何迁移,坏了如何恢复,如何创建成百上千的生成环境,还是个棘手的问题。

docker就是解决上面问题的。它就是LXC的二次封装。注意它不是容器技术,容器技术是linux内核的。它只是把容器技术简化,容易使用而已。

docker把整个环境打包成一个镜像文件,以后再使用的时候,直接把镜像文件拿过来就可以使用。比如你想使用一个ubuntu环境,那就可以找到一个安装了ubuntu的docker镜像文件。比如你想使用nginx环境,那就可以找到一个安装了nginx的docker镜像文件。

  • lxc的主要用途是隔离了一个系统
  • docker主要用途是隔离一个用户进程,比如nginx。

docker特点

  • 从运维角度看:假如某个安装了nginx的docker环境出现问题了,运维人员要去调查,首先运维人员要先进入到这个docker环境,调查也需要工具(比如ps,top等),这些工具如果docker里没有安装的话,还需要额外安装,对运维人员来说很麻烦。如果一个软件系统由很多docker组成,那么每个docker里都要安装调试工具。

  • 从开发角度看:任何语言,只要在一个环境上开发,然后打成docker,就可以在任意支持docker的操作系统环境上运行了,这是极大的便利。真正达到了一次开发到处部署,运行。

  • 从软件部署角度看:由于每个docker里基本就一个core进程,要把这些进程编排到一起,也不容易。

  • 从系统角度看:假设你的软件使用的操作系统是ubuntu,web服务器是nginx,缓存是redis。那么你就需要一个ubuntu的docker,nginx的docker,redis的docker。想象一下nginx的docker和redis的docker里其实也是有操作系统的,再加上ubuntu操作系统,就有了3个操作系统,产生了浪费。所以docker必须解决这个问题。采用【分层构建,联合挂载】。

    也就是说让nginx的docker和redis的docker里不包含操作系统,让nginx的docker和redis的docker使用的操作系统是ubuntu的docker里的ubuntu操作系统。

  • 从编排角度看:一个软件系统里包括很多别的子系统,每个子系统里有若干的进程,每个进程基本都是一个docker,这些子系统有执行的先后顺序,和依赖关系,如何组织好这一大堆的docker是个难点。所有就出现了一堆的docker编排工具,最厉害的就是Kubernetes (这个单词来自于希腊语,含义是舵手领航员。K8S是它的缩写,用“8”字替代了“ubernete”这8个字符。)。K8S的创造者,是众人皆知的行业巨头——Google。 K8S并不是一件全新的发明。它的前身,是Google自己捣鼓了十多年的Borg系统。 Google为了表明以后自己独自做大,建立了CNCF组织,ibm,aws等也加入其中,让K8S健康发展

    还有下面的编排工具:

    • nmp
    • machine+swarm+compose
    • mesos+marathon

docker结构图:

docker是C/S架构的,server端是个守护进程,通过unix socket和client通信,所以server端和client端必须在同一台物理机器上。client和server通信的应用层协议是https。docker先从registry下载镜像(imags)文件,然后加载镜像文件到container里。然后client端就可以操作了。

1,docker deamon:server端守护进程。

2,docker clinet:客户端。

3,docker registries:docker仓库,目前就是docker hub。国内访问docker hub很慢。可以使用阿里的加速,但是必须注册成为阿里的开发者,阿里才会提供加速链接。大家要想一个问题,每个镜像都有版本,比如nginx有很多版本,如何特定到具体版本呢,docker通过,仓库名:版本号来确定唯一一个镜像。比如想要nginx1.15的docker镜像,那么就使用【nginx:1.15】。所以可以看出来,仓库名就是应用程序的名字。

docker objects

对docker object都可以进行增删改查操作,通过restful方式

  • imags:镜像文件。注意:它是只读的,很重要。比如nginx镜像,你可以随意使用它,但是不能改里面的东西。因为有可能是多个别的进程使用它,如果不是只读的,别其中一个进程修改了内容,那就影响了其他的进程,也就失去了隔离的意义。
  • contains:加载镜像,运行后,产生的进程。
  • imags/和contains的关系:images就是一个存放在硬盘上的可执行程序(比如是/bin/ls);contains则是运行/bin/ls的进程,可以运行多次,运行完,进程就结束消失了,但是/bin/ls还是存在。所以它俩的关系就是,程序和进程的关系。
  • network:网络
  • volumes:contains运行时,使用的存储介质(卷)
  • plugin:插件。

centos7的yum源替换成清华大学的源

1,备份

$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2,编辑/etc/yum.repos.d/CentOS-Base.repo

参考清华的内容

3,之后运行yum makecache生成缓存

$ sudo yum makecach

在centos7下安装docker

1,去清华镜像下载docker-ce.repo文件。并保存在目录:/etc/yum.repos.d/

2,修改docker-ce.repo文件,把【download.docker.com】替换成【mirrors.tuna.tsinghua.edu.cn/docker-ce】

3,执行yum repolist,如果如下,发现有docker-ce。

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,097
docker-ce-stable/x86_64 Docker CE Stable - x86_64 56
extras/7/x86_64 CentOS-7 - Extras 305
updates/7/x86_64 CentOS-7 - Updates 738
repolist: 11,196

4, 执行docker安装命令:sudo yum install docker-ce

注意:这里的名字是【docker-ce】,不是【docker】

5,由于默认的docker仓库在国外,访问速度慢,所以配置一个国内的docker加速器。

​ 创建文件: /etc/docker/daemon.json

把下面内容加进去。

//docker cn的加速镜像
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

国内的docker 镜像:

  • docker cn
  • 阿里云加速器
  • 中国科技大学

6,启动/重新启动docker 守护(daemon)进程

# systemctl start docker.service
# systemctl restart docker.service

7,docker 老版本命令不再推荐使用

新版本把命令做了大的分类,如下:

Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes

老版本使用create命令时,用docker create,新版本也可以使用这个命令。新版本把命令都归类了,所以创建容器的话,用docker container create也是和老版本的docker create的功能是一样的,推荐还是使用新版本的命令。现在是为了兼容老版本,所以老版本的命令还保留着。

9,检查docker是否安装成功:docker version或者docker info

# docker info

结果如下:说明docker安装成功了!

Client:
Debug Mode: false Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.2
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.701GiB
Name: localhost.localdomain
ID: D7NH:N5X6:KM6Y:Q6L4:TEUV:BWSG:X3YH:LLMZ:UEC3:T2ID:A6RB:2XSF
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://registry.docker-cn.com/
Live Restore Enabled: false
  • Storage Driver: overlay2

    上面说的【采用分层构建,联合挂载】要能过被使用的话,必须是【overlay2】

  • Registry Mirrors:https://registry.docker-cn.com/

    说明上面设置的加速器生效了。

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

docker 简单介绍与安装的更多相关文章

  1. Docker的介绍与安装教程

    基于Windows系统下docker的介绍与安装教程以及更换docker镜像源教程 目录 基于Windows系统下docker的介绍与安装教程以及更换docker镜像源教程 Docker的核心概念 D ...

  2. Docker简单介绍

    Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...

  3. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  4. CocoaPods的简单介绍及安装和使用

    CocoaPods的简单介绍及安装和使用   一.CocoaPods是什么? 当你开发iOS应用时,会常常使用到非常多第三方开源类库.比方JSONKit.AFNetWorking等等. 可能某个类库又 ...

  5. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  6. Nessus简单介绍与安装

    1.Nessus简单介绍与安装 1.Nessus简介 Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Ne ...

  7. Docker之介绍与安装

    Docker 说明 本章,我们主要从Docker简介.Docker中几个核心概念和Docker安装这几个方面对Docker进行介绍! 1. Docker 简介 1.1. 什么是 Docker Dock ...

  8. Cloudera impala简单介绍及安装具体解释

    一.Impala简单介绍 Cloudera Impala对你存储在Apache Hadoop在HDFS,HBase的数据提供直接查询互动的SQL.除了像Hive使用同样的统一存储平台,Impala也使 ...

  9. MongoDB(1)--简单介绍以及安装

    前段时间接触了NoSql类型的数据库redis,当时是作为缓存server使用的.那么从这篇博客開始学习还有一个非常出名的NoSql数据库:MongoDb.只是眼下还没有在开发其中使用.一步一步来吧. ...

随机推荐

  1. PHP 7.0 7.3 (Unix) - 'gc' Disable Functions Bypass

    <?php # PHP 7.0-7.3 disable_functions bypass PoC (*nix only) # # Bug: https://bugs.php.net/bug.ph ...

  2. iOS中点击按钮跳转到外部浏览器和内部打开

    如图所示,需要实现点击一个按钮,跳转到指定网页: -(void)pushBtnCellClickDeleate{ NSLog(@"跳转"); //在APP内部打开指定网页 UIWe ...

  3. Good start is a half success(2019-04-07)

    一. 回顾你过去将近3年的学习经历. (1)当初你报考的时候,是真正喜欢计算机这个专业吗?. (2)你现在后悔选择了这个专业吗?. (3)你认为你现在最喜欢的领域是什么(可以是计算机的也可以是其它领域 ...

  4. RHEL 6.6配置网易CentOS镜像的yum源小结

       之前没有使用过网易CentOS镜像的yum源,最近由于需要,遂在一台测试服务器验证.测试了一下如何配置使用网易的Cent0S的yum源.此文仅仅是笔记性质,参考了网上大量资料(文末"参 ...

  5. MySql 库/表级操作 及 数据类型

    数据库分类 关系型数据库(SQL):存储方式固定,安全 非关系型数据库(NoSQL):存储方式比较灵活,存储数据的效率比较高,不太安全 MySQL是一种关系型数据库管理系统(采用关系模型来组织管理数据 ...

  6. PM8909 linear charger硬件概述

    电池充电是由qpnp-vm-bus.c(电池驱动BMS)和qpnp-linear-charger.c(线性充电器)组成: SMMB charger:Switch-ModeBattery Charger ...

  7. Python xlwt 写Excel相关操作记录

    1.安装xlwt pip install xlwt 2.写Excel必要的几步 import xlwt book = xlwt.Workbook() #创建一个workbook,无编码设置编码book ...

  8. 在 VS 中查看所有线程

    查看当前所有线程 在程序中打断点,然后启动调试(注意:线程窗口需要启动调试才可以看得到)点击 Debug > Windows > Threads 线程窗口如下:

  9. R-2 - 正态分布-中心极限-置信区间-正态假设检验

    本节内容 1:样本估计总体均值跟标准差,以及标准误 2:中心极限定理 3:如何查看数据是否是正态分布QQ图 4:置信区间的理解跟案例 5:假设检验 参考文章: 假设检验的学习和理解 一.样本估计总体均 ...

  10. 算法问题实战策略 NTHLON

    地址 https://algospot.com/judge/problem/read/NTHLON #include <iostream> #include <vector> ...