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架构

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与虚机对比:
docker学习

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

2、在Centos 7上安装Docker