docker学习
一、基础知识
1、Docker是什么?
docker是基于容器技术的轻量级虚拟化,是能够把开发的应用程序自动部署到容器的一个开源引擎。
docker借鉴了集装箱的概念,只不过集装箱用来运输货物;而docker运输软件,docker并不关心:装的内容是什么,也不关心要运到何处。
docker构建在操作系统上,而软件放在了docker里。软件运行在docker里的理念,类似于java运行在JVM中。
2、Docker有什么?
2.1、Docker客户端和服务端
客户端用来通过Docker守护进程,去访问Docker容器,Docker容器运行在Docker主机上,也就是服务器上
2.2、Docker镜像
镜像相当于容器的“源代码”,镜像类似于类,而容器类似于实例;镜像类似于Maven仓库管理的jar
2.3、Registry
类似于Maven仓库,Docker公司提供的官方registry被称为Docker Hub。(https://hub.docker.com)
2.4、Docker 容器
容器是镜像的运行时实例,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境。容器为镜像提供了一个标准的和隔离的运行环境。
2.5、Docker架构
3、Docker能干什么?
1、docker能加速本地开发和构建流程,使其更加高效,更加轻量化。
2、能让独立服务或应用程序在不同的环境中,得到相同的运行结果。
因为应用程序是跑在docker而不是外部环境
3、用Docker创建隔离的环境来测试
4、docker可以在开发者本机上构建复杂的环境,用来进行测试
5、构建一个多用户平台即服务(PaaS)的基础设施
6、为开发、测试提供一个轻量级的独立沙盒化解
7、提供软件及服务(SaaS)应用程序
8、支持高性能、超大规模的宿主机部署
二、Docker技术组件
1、Docker技术概述
Docker是基于容器技术的轻量级虚拟化,省去了传统虚拟化的hypervisor(运行于物理机和操作系统间的中间件软件层)层,其虚拟化技术是基于内核的cgroup和namespace技术,处理逻辑与内核深度融合,所以其性能和物理机相近。
LXC(linux内核容器技术):包括cgroup和namespace,进程沙盒等。
1)namespace:命名空间,主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对不同的容器有不同的抽象,彼此之间是不可见的,从而做到访问隔离。
2)cgroup:control group的简称,作为控制组,注意做资源控制。其原理是将一组进程放进一个控制组中,通过给这个控制组分配指定的可用资源,达到控制这一组进程资源的目的。
通信上,docker并不直接和内核交互,而是通过一个更底层的工具libcontainer与内核交互,libcontrainer是真正意义上的容器引擎,而docker本书侧重于处理更上层的业务。
VM与虚机对比:
2、Docker的技术组件
1、文件系统隔离:每个容器都有自己的root系统。
2、进程隔离:每个容器都允许在自己的进程环境中。
3、网络隔离:容器间的虚拟网络接口和IP地址都是分开的。
4、资源隔离和分组:使用cgroups,将CPU和内存之类的资源独立分配给每个docker容器。
5、写时复制:文件系统都是通过写时复制创建的,这意味着文件系统是分层的、快速的,且占用磁盘空间更小。
7、交互式shell:用户可以通过终端,使用交互式shell来与docker服务器交互。
3、Docker和传统的虚拟机技术对比
3.1 VM与docker的不同
1、虚拟机是利用硬件虚拟化技术,来实现对硬件资源进行划分,通过通过一个hypervisor来实现对资源的完全隔离;
而容器上操作系统级别的虚拟化,利用的是内核的cgroup和namespace特性,完全通过软件实现。
2、虚拟机会独占分配给自己的资源,各个虚拟机之间基本完全隔离,不存在资源共享,比较重量级;
而容器与主机共享操作系统内核,不同容器之间可以共享部分系统资源,因此相对更轻量级。
3、在一台物理机上能启动的虚拟机很有限,而且启动通常都在十几秒以上;我们可以在一台服务器上启动成百上千的Docker容器,启动时间通常在秒级。
三、Docker的安装
1、Docker服务器安装要求
官方推荐使用Ubuntu, 要求是64位机器,Linux 3.8 以上的内核。这里选Centos 7.x