Docker 容器基础知识介绍
1.1 什么是 Docker 容器
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包
他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了 docker
引擎的服务器上(包括流行的 Linux 机器、windows 机器),也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。
几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不
依赖于任何语言、框架包括系统。
1.2. 容器与虚拟机
结构:
VM:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,
在该系统上再运行所需应用进程。
Docker:容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,
而且也没有进行硬件虚拟
Hypervisor 是虚拟机管理者,不但协调着硬件资源的访问,也同时在各虚拟
机之间施加防护。传统虚拟机的 Guest OS 层、Hypervisor 层在 docker 中被
docker engine 层所替代。
特性:
⚫ 更高效的利用系统资源
由于 Docker 工作在进程级别,不需要进行硬件虚拟以及运行完整操作系统
等额外开销,所以 Docker 对系统资源的利用率更高。相比虚拟机技术,一个相
同配置的主机,往往可以运行更多数量的应用。
⚫ 更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由
于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫
秒级的启动时间。大大的节约了开发、测试、部署的时间。
⚫ 一致的运行环境
由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过
程中被发现。Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运
行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。
⚫ 更轻松的迁移
Docker 确保了执行环境的一致性,无论是物理机、虚拟机、公有云、私有
云,甚至是笔记本,其运行结果是一致的。因此可以很轻易迁移到任意上,而不
用担心运行环境的变化导致应用无法正常运行的情况。
⚫ 更轻松的维护和扩展
Docker 使用的分层存储以及镜像的技术,Docker 团队同各个开源项目团队
一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为
基础进一步定制。
1.3. Docker 的应用场景
• Web 应用的自动化打包和发布。
• 自动化测试和持续集成、发布。
• 在服务型环境中部署和调整数据库或其他的后台应用。
• 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的
PaaS 环境。
1.4. Dcoker 三大核心 :镜像、容器、仓库
镜像:
Docker 镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称
为 UnionFS( Union file system 联合文件系统)。
⚫ Docker 镜像位于 bootfs 之上
⚫ 第一层镜像称之为 base image
⚫ 容器在最顶层,其下的所有层都是 readonly
⚫ Docker 将所有只读的 FS 层称之为镜像
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),
就相当于是一个 root 文件系统。Docker 镜像是一个特殊的文件系统,除了提
供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准
备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,
其内容在构建之后也不会被改变。镜像并非是像一个 ISO 那样的打包文件,镜
像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统
组成,或者说,由多层文件系统联合组成。
Docker 中用的是 AUFS(Advanced Union file system)。 跟存储驱动有
关,例如 overlayFS。
分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构
建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建
新的镜像。
仓库:
仓库就是存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库
3(Private)两种形式。
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它
服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的服务----Docker
Registry(仓库)。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该
软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软
件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。Docker 镜
像仓库分为公开仓库和私有仓库两种形式,目前最大的公开仓库是 Docker Hub,
存放了数量庞大的镜像供用户下载。
容器:
Docker 容器是由 Docker 镜像创建的运行实例。
⚫ 对于镜像来说是动态的
⚫ 镜像最上面的一层可写的层就是容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的
类和实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创
建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主机执行的进程不同,容器进程运行于属
于自己的独立命名空间。因此容器可以拥有自己的文件系统、自己的网络配置、
自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的
环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。
镜像加速:
Docker官方中国区 https://registry.docker-cn.com
网易: http://hub-mirror.c.163.com
中国科学技术大学: https://docker.mirrors.ustc.edu.cn
通过修改daemon配置文件/etc/docker/daemon.json文件来使用加速器