Docker的介绍和安装(1)
一、虚拟化简介
1、虚拟化概念
计算机虚拟化(Computing Virtualization),一种资源管理技术,是指通过虚拟化技术将一台计算机的各种实体资源 , 如处理器 , 网络 , 内存及存储等 , 抽像 , 转换后呈现出来 , 打破实体结构间的不可切割的障碍,虚拟成多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
虚拟化目标 :
同一主机上运行多个系统或应用 , 从而提高系统资源的利用率 , 同时带来降低成本 , 方便管理和容错容灾
2、虚拟化级别
(1)完全虚拟 -- 处理器密集型技术,因为它要求 hypervisor 管理各个虚拟服务器,并让它们彼此独立 (Vmware/Virtual PC)
(2)准虚拟 -- 改动客户操作系统,让它以为自己运行在虚拟环境下,能够与 hypervisor 协同工作 (para-virtualization)
(3)系统虚拟 -- 没有独立的 hypervisor 层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立
(4)桌面虚拟化—桌面虚拟化主要功能是将分散的桌面环境集中保存并管理起来,包括桌面环境的集中下发,集中更新,集中管理。桌面虚拟化使得桌面管理变得简单,不用每台终端单独进行维护,每台终端进行更新
所以,Docker 和其他容器(container)技术都属于系统虚拟化范畴
3、虚拟化类型
对于系统虚拟化技术来说,虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。 CPU 虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的 CPU 、内存和 IO 设备资源
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。根据 Hypervisor 的实现方式和所处的位置,虚拟化按照结构分为两种类型:1型虚拟化和2型虚拟化。
4、虚拟化分类
1型虚拟化
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

2型虚拟化
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲:
1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;
2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
容器位于前两者之上,以进程的形式存在于操作系统之中
容器为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。为了能达到这种效果,容器技术使用了一系列的系统级别的机制诸如:利用Linux namespaces 来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过 cgroups 来确定每个容器可以利用多少资源。此外容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。
二、docker简介
1、容器虚拟化
容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机),甚至有人把他称为新一代的虚拟化技术, Docker 无疑就是其中的佼佼者
在一台服务器上同时运行上百个虚拟机,肯定会被认为是痴人说梦,而在一台机器上同时运行一千个 Docker 容器,这已成为现实
2、Docker 的目标:
Build,Ship and Run Any App,Anywhere— 即通过对应用组件的封装 (Packaging), 发布(Distribution), 运行(runing) 等生命周期的管理 , 达到应用组件级别的”一次封装 , 到处运行”。

3、docker的组成
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
(1)dockerClient客户端
(2)Docker Daemon守护进程
(3)Docker Image镜像
(4)DockerContainer容器
容器:
存储、运输工具
实现对容器内部的物品实现包含(实现了一个相对隔离的环境)
容器:模拟(虚拟)出一个相对隔离的空间
镜像:
用来创建容器的模版,放在镜像仓库中,例如nginx,redis,httpd等
4、docker重要网站
Docker官网:https://www.docker.com/
Docker官方文档:https://docs.docker.com/
Docker仓库:https://hub.docker.com/
Docker中文社区:http://www.docker.org.cn/
Docker官方英文资源:
docker官网:http://www.docker.com
Docker windows入门:https://docs.docker.com/windows/
Docker Linux 入门:https://docs.docker.com/linux/
Docker mac 入门:https://docs.docker.com/mac/
Docker 用户指引:https://docs.docker.com/engine/userguide/
Docker 官方博客:http://blog.docker.com/
Docker Hub: https://hub.docker.com/
Docker开源: https://www.docker.com/open-source
Docker中文资源:
Docker中文网站:http://www.docker.org.cn
Docker入门教程: http://www.docker.org.cn/book/docker.html
Docker安装手册:http://www.docker.org.cn/book/install.html
一小时Docker教程 :https://blog.csphere.cn/archives/22
Docker纸质书:http://www.docker.org.cn/dockershuji.html
DockerPPT:http://www.docker.org.cn/dockerppt.html
三、Docker的特点
1、优点:
(1)启动快,资源占用小 , 资源利用高,快速构建标准化运行环境
(2)创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理
2、局限:
(1)Docker 是基于 Linux 64bit 的,无法在 windows/unix 或 32bit 的 linux环境下使用
(2)LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是linux
(3)隔离性相比 KVM 之类的虚拟化方案还是有些欠缺,所有 container 公用一部分的运行库
(4)管理相对简单,主要是基于 namespace 隔离
(5)cgroup 的 cpu 和 cpuset 提供的 cpu 功能相比 KVM 的等虚拟化方案相比难以度量 ( 所以 dotcloud 主要是按内存收费 )
(6)docker 对 disk 的管理比较有限(docker磁盘存储在一个目录下)
(7)container 随着用户进程的停止而销毁, container 中的 log 等用户数据不便收集
3、docker与虚拟机的比较:
(1)启动快比虚拟机 , 可以秒级启动
(2)对资源占用小 , 宿主机上可运行千台容器
(3)方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低
(4)通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效率
(5)Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 , 尽量减小系统开销
docker与kvm的对比
kvm:
1. 虚拟机
2. 使用复杂
3. 启动过程相对慢(分钟)
4. 模版文件较大
5. 和物理完全隔离
6. 模拟的是一个完整系统,可以登录并实现管理
docker:
1. 直接虚拟出来一个用户空间
2. 使用简单
3. 启动非常块(秒级)
4. 模版文件很小(体积小)(容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包)
5. 在一定程度上和物理机隔离
6. 仅仅是模拟一部分用户空间,不方便管理
4、docker使用理由
(1)快速部署服务
(2)多租户
(3)实现隔离
(4)让一个主机运行多个容器
(5)提高开发效率
(6)简化配置过程
(7)实现软件的跨平台
5、docker的主要用途:
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
四、docker的安装
1、docker的安装
安装docker需要配置网络源
(1)配置阿里云的网络源
第一步:下载阿里云的docker安装包(yum仓库的目录下)
[root@ren7 yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第二步:配置extra和epel源
[extra]
name=centos extra
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
[epel]
name=epel
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
第三步:使用yum安装
docker-ce 是社区版,免费的
docker-ee 是企业版,收费的
[root@ren7 ~]# yum install docker-ce -y
(2)配置云唯图书馆的源
第一步:vim /etc/resolv.conf
nameserver 172.16.254.110
第二步:下载docker安装脚本
[root@ren7 ~]# wget http://download2.yunwei.edu/shell/docker.tar.gz
第三步:解压并执行安装脚本
[root@ren7 ~]# tar xzf docker.tar.gz
[root@ren7 ~]# cd docker
[root@ren7 docker]# ls
ca.crt docker-app.tar.gz docker.sh remove.sh
[root@ren7 docker]# ls
ca.crt docker-app.tar.gz docker.sh remove.sh
[root@ren7 docker]# sh docker.sh
docker
docker-compose
docker-containerd
docker-containerd-ctr
docker-containerd-shim
dockerd
docker-init
docker-proxy
docker-runc
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.
[root@ren7 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@ren7 docker]# cat docker.sh
#/bin/bash tar zxvf docker-app.tar.gz -C /usr/local/bin/ mkdir -p /etc/docker
mkdir -p /etc/docker/certs.d/reg.yunwei.edu cp ca.crt /etc/docker/certs.d/reg.yunwei.edu/ echo "172.16.254.20 reg.yunwei.edu">>/etc/hosts cat <<EOF>/etc/docker/daemon.json
{
"registry-mirrors": ["http://cc83932c.m.daocloud.io"],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF cat <<EOF>/etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io [Service]
Environment="PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/usr/local/bin/dockerd
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process [Install]
WantedBy=multi-user.target
EOF systemctl daemon-reload && systemctl enable docker.service && systemctl start docker.service
2、docker镜像加速配置
因为docker镜像都在国外,而国内网络访问的比较慢,后续拉取docker镜像十分缓慢,所以在安装docker之后需要配置加速器。
(1)获取阿里云加速地址
第一步:打开阿里云官网
https://www.aliyun.com/?utm_content=se_1000301910
第二步:选择产品与服务 --->镜像与服务

第三步:选择镜像加速器,获取自己docker的加速器地址

(2)vim /etc/docker/daemon.json 中写入如下内容(如果文件不存在请手动创建)
{
"registry-mirrors": ["https://registry.docker-cn.com","https://twk069lg.mirror.aliyuncs.com","http://cc83932c.m.daocloud.io"]
}
添加一个网址即可
(3)重启服务
systemctl restart docker
Docker的介绍和安装(1)的更多相关文章
- Docker的介绍与安装教程
基于Windows系统下docker的介绍与安装教程以及更换docker镜像源教程 目录 基于Windows系统下docker的介绍与安装教程以及更换docker镜像源教程 Docker的核心概念 D ...
- Docker入门-介绍和安装
Docker容器 Docker是什么 Docker最初是dotCloud公司创建人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于 ...
- Docker之介绍与安装
Docker 说明 本章,我们主要从Docker简介.Docker中几个核心概念和Docker安装这几个方面对Docker进行介绍! 1. Docker 简介 1.1. 什么是 Docker Dock ...
- Docker 学习应用篇之二: Docker的介绍和安装
之前说过Docker的好处,Docker可以集装箱化的部署应用程序.那么Docker是通过什么实现的呢.要理解Docker内部构建,需要先理解Docker的四种部件 1)images:镜像,docke ...
- docker 简单介绍与安装
主机虚拟化(vmware,visual box等) type-Ⅰ type=Ⅱ 主机虚拟化是隔离最彻底的,但是由于多隔了一个虚拟的操作系统,性能会慢一些. 容器虚拟化(docker等) 隔离没有主机虚 ...
- Docker系列一:Docker的介绍和安装
Docker介绍 Docker是指容器化技术,用于支持创建和实验Linux Container.借助Docker,你可以将容器当做重量轻.模块化的虚拟机来使用,同时,你还将获得高度的灵活性,从而实现对 ...
- Docker的介绍及安装
什么是Dcoker? 引用度娘的解释:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 linux 机器上,也可以实现虚拟化.容器 ...
- 学习Mysql过程中拓展的其他技术栈:Docker入门介绍
一.Docker的介绍和安装 1. Docker是什么 百度百科的介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linu ...
- Docker Compose 介绍安装
Compose介绍 Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写.使用Compose配置文件描述多个容器应用的架构,biubiu使用什么镜像 ...
随机推荐
- Java异常系列
Java异常(一) Java异常简介及其架构 Java异常(二) <Effective Java>中关于异常处理的几条建议 Java异常(三) <Java Puzzles>中关 ...
- 记一次metasploitable2内网渗透之21,22,23,25端口爆破
Hydra是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具.Hydra是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限. 目前该工具支持以 ...
- JVM--Java核心面试知识整理(一)
JVM 基本概念 JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈. 一个垃圾回收,堆和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的交互 ...
- 浅谈 Fresco 框架结构
在前面的文章 Fresco 源码分析 -- 图片加载流程 里面详细说明了图片加载的整个流程,但是除了理解源码之外,对于源码的框架层面的设计也是需要去了解的,不能只是简单的读源码,好的源码的框架设计也是 ...
- [C++]一篇文章搞懂C++中五花八门的各种初始化
总结 初始化的概念:创建变量时赋予它一个值(不同于赋值的概念) 类的构造函数控制其对象的初始化过程,无论何时只要类的对象被创建就会执行构造函数 如果对象未被用户指定初始值,那么这些变量会被执行默认初始 ...
- malloc 函数分析 glibc2.23
malloc 函数详解 本篇主要是参考了glibc 2.23的源码 首先我们来看看malloc函数的执行流程. strong_alias (__libc_malloc, __malloc) stron ...
- CountDownLatch与CyclicBarrier的基本使用
1 概述 CountDownLatch以及CyclicBarrier都是Java里面的同步工具之一,本文介绍了两者的基本原理以及基本使用方法. 2 CountDownLatch CountDownLa ...
- MySQL数据类型全解析
1 概述 本文主要介绍了MySQL的各种数据类型,版本为8.x, MySQL的数据类型可以分为六类:数值类型,日期时间类型,字符串类型,二进制类型,JSON类型与空间数据类型. 2 数值类型 数值类型 ...
- day17.网络编程2+进程
1 加入链接循环的套接字服务端 1.1 服务端 ''' 2.1 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套 ...
- 自动化kolla-ansible部署openstack+GPU透传方法
自动化kolla-ansible部署openstack+GPU透传方法 欢迎加QQ群:1026880196 进行交流学习 1. CentOS7.x-8.x系列为虚拟机配置GPU直通 1. 编辑文件vi ...