Docker 概述
指尖二进制 • 1 年前 • 930 次点击 • DOCKER
文章概要:
Docker概述
部署Docker容器虚拟化平台
Docker镜像制作方法
Container(容器)端口影响
本章主要说一下Docker的理论知识。(多看看,多理解着读读,后面实验一遍之后在回来看看这些理论,你会发现你明白多了。)
一、Docker概述:
Docker是一个开源的应用容器引擎,让开发者可以打包它们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制(封装前),相互之间不会有任何接口(类似iphone的app)。几乎没有性能开销,可以很容易的再服务器和数据中心中运行。最终要的是,它们不依赖于任何语言、框架或包装系统。
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管到Github上,基于go语言并遵从Apache2.0协议开源。
Docker让开发者可以打包它们的应用以及依赖包到一个可移植Container(容器)中,然后发布到任何流行的Linux系统上。
以前发布软件时:以二进制文件或源代码的方式发布,如:office-2012.exe
扩展:
LXC为Linux Container的简写。Linux Contariner同期是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。
image和Container(容器)的关系:image可以理解为一个系统的镜像,Container是image再运行时的一个状态。如果拿虚拟机做一个比喻的话,image就是关机状态下的磁盘文件,Container就是虚拟机运行时的磁盘文件,包括内存数据。
Dockerhub:dockerhub是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu、centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。
官方网站:
https://www.docker.com
注:docker-engine相当于蓝鱼,container容器就是集装箱。
container:容器,集装箱。
源代码下载:
https://github.com/docker/docker
linux容器技术,容器虚拟化和kvm虚拟化的区别
kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
linux开机启动流程:
bios开机硬件自检
根据bios设置的优先启动项boot 网卡 硬盘 u盘 光驱
读取mbr引导 2TUEFI(gpt分区) mbr硬盘分区信息,内核加载路径,
加载内核
启动第一个进程/sbin/init systemd 系统初始化完成 运行服务(nginx,httpd,mysql) ......
容器启动流程:
共用宿主机内核: 第一个进程直接启动服务(nginx,httpd,mysql)
容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,直能运行linux操作系统虚机
虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统
工作流程:
服务器A上运行Docker Engine服务,在Docker Engine上启动很多容器container,从外网Docker Hub上把image操作系统镜像下载下来,放到container容器运行。这样一个虚拟机实例就运行起来了。
最后,通过Docker client对docker容器虚拟化平台进行控制。
Image和Container的关系:Image可以理解为一个系统镜像,Container是Image在运行时的一个状态。
如果拿虚拟机作一个比喻的话,Image就是关机状态下的磁盘文件,Container就是虚拟机运行时的磁盘文件,包括内存数据。
Dockerhub:dockerhub时docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu,centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站双创建一个docker仓库。
Docker 核心技术
Namespace — 实现Container的进程、网络、信息、文件系统哥主机名的隔离
Cgroub — 实现对资源的配额和度量
ps:Cgroup的配额就像vmware虚拟机的配置参数,可以指定CPU个数、内存大小等......
特性:
文件系统的隔离:每个进程容器运行在一个完全独立的跟文件系统里。
资源隔离:系统资源,像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。
缺点:(局限性)
Docker 支持 Unix/Linux 操作系统,Windows 或 Mac需要借助于Boot2Docker。(即使可以在其上进行安装,不过也是基于Linux虚拟机的)
Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker 容器外。