部署docker容器虚拟化平台(一)

Docker 概述

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统
  • 沙盒也叫沙箱,英文sandbox。在计算机领域指一种虚拟技术,且多用于计算机安全技术。安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。
  • Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2.0协议开源。
  • Docker让开发者可以打包他们的应用以及依赖包到一个可移植的container中,然后发布到任何流行的Linux机器上。
  • 现在软件包必须和系统相关。 Docker镜像一次编译,到处运行。
  • LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
  • LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。

官方网站:https://www.docker.com/

部署docker容器虚拟化平台(一)_第1张图片

注:docker服务相当于鲸鱼,container容器就是集装箱。

container :集装箱,容器

docker: 码头工人

源代码下载:

https://github.com/docker/docker


Docker容器技术 和 虚拟机对比

相同点: Docker容器技术 和 虚拟机技术,都是虚拟化技术

部署docker容器虚拟化平台(一)_第2张图片

总结:docker相对于VM虚拟机,少了虚拟机操作系统这一层,所以docker效率比虚拟机高

在docker上启动一个实例 1-2秒

Docker 架构

部署docker容器虚拟化平台(一)_第3张图片

工作流程:服务器A上运行docker Engine 服务,在docker Engine上启动很多容器container , 从外网Docker Hub上把image操作系统镜像下载来,放到container容器运行。这样一个容器的实例就运行起来了。

最后,通过Docker client 对docker 容器虚拟化平台进行控制。

Image和Container的关系:image可以理解为一个系统镜像,Container是Image在运行时的一个状态。
如果拿虚拟机作一个比喻的话,Image就是关机状态下的磁盘文件,Container就是虚拟机运行时的磁盘文件,包括内存数据。

dockerhubdockerhub是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu, centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。


Docker 核心技术

1.Namespace  — 实现Container的进程、网络、消息、文件系统和主机名的隔离。

2.Cgroup  — 实现对资源的配额和度量。

注:Cgroup的配额,可以指定实例使用的cpu个数,内存大小等。

Docker特性:

文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。

资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。

网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

优点:

1.一些优势和VM一样,但不是所有都一样。

比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker启动一个容器实例时间很短,一两秒就可以启动一个实例

2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT的发布速度更快。

Docker是一个开放的平台,构建,发布和运行分布式应用程序。

Docker使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。

3.您可以在部署在公司局域网或云或虚拟机上使用它。

4.开发人员并不关心具体哪个Linux操作系统

使用Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。

然后,在部署时一切是完全一样的,因为一切都在DockerImage的容器在其上运行。

开发人员负责并且能够确保所有的相关性得到满足。

5.Google,微软,亚马逊,IBM等都支持Docker。

6.Docker支持Unix/Linux操作系统,也支持Windows或Mac。

缺点局限性:

1.Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:NFS,ipsan,MFS等, -v 映射磁盘分区

Docker只用于计算,存储交给别人。

Oracle 不适合使用 Docker来运行, 太大了,存储的数据太多。


实验环境准备

配置本地 yum 源 

[root@docker ~]# tar zxvf docker-rpm.tar.gz
[root@docker ~]# vim  /etc/yum.repos.d/docker-rpm.repo
[docker-rpm]
name=docker-rpm
baseurl=file:///root/docker-rpm
enable=1
gpgcheck=0

[root@docker ~]# yum -y install docker
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl enable docker
[root@docker ~]# docker version
Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64
 Go version:      go1.8.3
 Git commit:      c4618fb/1.12.6
 Built:           Thu Sep 21 22:33:52 2017
 OS/Arch:         linux/amd64

Server:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64
 Go version:      go1.8.3
 Git commit:      c4618fb/1.12.6
 Built:           Thu Sep 21 22:33:52 2017
 OS/Arch:         linux/amd64

查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。

[root@docker ~]# docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 4
Server Version: 1.12.6
.................
Data loop file: /var/lib/docker/devicemapper/devicemapper/data   //存储docker平台中的相关数据
.................
[root@docker ~]#  ll -h /var/lib/docker/devicemapper/devicemapper/data 
-rw------- 1 root root 100G 6月  24 09:45 /var/lib/docker/devicemapper/devicemapper/data

 下载 docker 镜像

[root@docker ~]# docker search centos

部署docker容器虚拟化平台(一)_第4张图片

使用阿里云docker,或者使用网易云镜像加速,提升pull的速度。

vim  /etc/docker/daemon.json   #改成以下内容
改: {}
为:
{
	"registry-mirrors": ["加速地址"]
}
[root@docker ~]# systemctl daemon-reload    //加载配置文件
[root@docker ~]# systemctl restart docker   //重启docker
[root@docker ~]# docker pull docker.io/centos  //下载

 把之前下载好的image镜像导入image。

参数:  -i " docker.io-centos.tar  " 指定载入的镜像归档。

[root@docker ~]# docker load -i  /root/docker.io-centos.tar

查看 images 列表

[root@docker ~]# docker images

开启动网络转发功能,默认会自动开启

[root@docker ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[root@docker ~]# sysctl  -p     //生效
net.ipv4.ip_forward = 1

 

 

你可能感兴趣的:(虚拟化,Docker)