Docker 的概念和理解

作者: AlienPaul | 来源:发表于2020-02-06 17:51 被阅读0次

Docker 容器和虚拟机的区别

  • 虚拟机需要安装Guest OS。如果运行多个虚拟机,需要安装多个Guest OS。比较浪费存储资源。
  • Docker运行的机器不用安装多个Guest OS,Docker container的容器其实还是主机的操作系统上运行。
  • 虚拟机启动需要经历安装的操作系统启动过程,启动比较缓慢。
  • Docker容器的启动仅仅是启动一个在宿主机运行的进程,启动非常快速。
  • 虚拟机可以实现完全彻底的资源隔离(CPU,内存,磁盘和网络)。但是未使用的资源也不会被其他虚拟机使用,存在一定的资源浪费。
  • Docker使用namespace实现资源的隔离,但不是真正的资源物理隔离。资源隔离没有使用虚拟机彻底。但是资源利用率高。
  • 虚拟机每个Guest OS都有一套独立的内核和程序库。可以在不同虚拟机中运行多个完全不同的系统和软件环境。但是虚拟机占用资源较高。
  • Docker和宿主系统共用一个内核和应用程序库。占用资源少,同样资源机器可运行的容器数远大于可运行的虚拟机数量。

Docker联合文件系统AUFS

AUFS全称为Another Union File System。是一种联合文件系统。它可以把不同物理位置的文件合并mount到同一个目录。

Docker镜像为分层结构,任何对镜像的修改都是创建一个新层,新层中保存了镜像的修改内容。最后,将这个新层,连同之前所有的分层一起,保存为新的镜像。

AUFS将这些层挂载到同一个目的地,于是在使用Docker时候,我们看到的是这些分层合并后的结果。

不建议自己创建的Docker镜像存在过多不必要的分层。镜像最多为127层,超过这个层数为会出现问题。过多的分层会占用过多的存储空间,减慢镜像加载的速度。

Docker如何隔离资源

使用cgroup限制容器资源的使用。
使用内核的namespace进行运行环境的隔离。

  • Mount Namespace:每个容器能看到不同的文件系统层次结构
  • UTS Namespace:每个容器可以有自己的 hostname 和 domainame
  • IPC Namespace:每个容器有其自己的 System V IPC 和 POSIX 消息队列文件系统,因此,只有在同一个 IPC namespace 的进程之间才能互相通信
  • PID Namespace:每个 PID namespace 中的进程可以有其独立的 PID; 每个容器可以有其 PID 为 1 的root 进程;也使得容器可以在不同的 host 之间迁移,因为 namespace 中的进程 ID 和 host 无关了。这也使得容器中的每个进程有两个PID:容器中的 PID 和 host 上的 PID。
  • Network Namespace:每个容器用有其独立的网络设备,IP 地址,IP 路由表,/proc/net 目录,端口号等等。这也使得一个 host 上多个容器内的同一个应用都绑定到各自容器的 80 端口上。
  • User Namespace:在 user namespace 中的进程的用户和组 ID 可以和在 host 上不同;每个 container 可以有不同的 user 和 group id;一个 host 上的非特权用户可以成为 user namespace 中的特权用户。

Docker的相关概念

Image

类似于虚拟机的快照。容器中运行时需要的文件都需要储存在Image中。运行时Docker会读取所有层的内容生成一个文件系统,同时在最上层创建一个可写层。在运行时这个可写层可以保存数据,但是停止运行的时,这个可写层的内容会被销毁。每次从Image启动一个container都是一个“干净”的运行环境。

Container

Container是Docker的运行实例。可以从一个Image运行产生多个Docker container(这些container之间没有任何关系)。Container是可以读写的,但是任何修改的内容都是临时的,不会保存在Image中。

Network

默认来说即便是同一个Docker Daemon下运行的container之间的网络也是互相隔离的。用户可以创建一个或多个network,并分配给container。通过这种方式可以控制哪些container之间的网络是互通的。

Volume

Volume是Docker的数据卷。可以持久化保存container中生成的数据。即便是container被销毁有重建,volume中的数据也不会丢失。

Dockerfile

Dockerfile用于创建Docker Image。Dockerfile描述了Image文件构建的步骤,内容包含基于哪个Image,构建时需要执行什么命令,以及启动container时候的入口命令等。

相关文章

  • Docker 的概念和理解

    Docker 容器和虚拟机的区别 虚拟机需要安装Guest OS。如果运行多个虚拟机,需要安装多个Guest OS...

  • 阿里大神带你了解他们眼中的Docker!

    1. Docker 基本概念 Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker ...

  • docker 基础(1)

    Docker 镜像和容器 要想更好使用和理解 docker 有两个概念是绕不开的,那就是镜像和容器的概念。Dock...

  • Docker概念理解

    容器技术 简单介绍 容器技术又称为容器虚拟化 首先是一种虚拟化技术 虚拟化技术包括硬件虚拟化 半虚拟化 操作系统虚...

  • docker 入门

    Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启...

  • Docker学习笔记

    Docker 掌握Docker基础知识,理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Dock...

  • Docker学习笔记

    Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启...

  • Docker学习笔记

    以下均为个人对docker的理解,相关概念说法不一定正确,但能方便我们去理解。 什么是Docker? Docker...

  • Docker、Dockerfile 和 Docker-compo

    本文是笔者基于平常docker使用的一些要点总结和自己的理解,记录于此,仅供参考。 1、Docker 相关概念要点...

  • docker相关概念理解

    Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。 Docker 容器(...

网友评论

    本文标题:Docker 的概念和理解

    本文链接:https://www.haomeiwen.com/subject/wsuuxhtx.html