Docker-学习笔记(一)

  • 虚拟机类型
  • Host型
  • Hyper型
  • 容器型
  • Docker的优势
  • Docker的劣势
  • Docker的组件
  • Docker Engine
  • Docker Compose
  • Docker Registry
  • Docker Machine
  • Docker Swarm
  • Docker Kitematic
  • Docker Hub
  • Docker的内部结构
  • namespace
  • cgroup(control group)
  • 网络
  • 连接机能(link)
  • ip a
  • 外部通信


虚拟机类型

Host型

带有gcc的linux的docker镜像_docker


在主机OS上通过虚拟软件的驱动搭建虚拟环境

例;VirtualBox、VMWare

Hyper型

带有gcc的linux的docker镜像_Docker_02


通过硬件上的Hyper技术实现虚拟的技术,不通过主机OS直接控制硬件。

例;KVM、Hyper-V、Xen

容器型

带有gcc的linux的docker镜像_名称空间_03


通过运行在主机上的容器驱动,实现多个虚拟环境的技术

Docker的优势

  1. 处理速度快
    不需要为每一个VM分配CPU,内存,存储等资源,减少处理目的以外的访问时间
    每台VM因为没有OS,消费的资源也比较少
  2. 启动快
    不用启动OS,直接service启动即可
  3. 可移植性高
    正像Docker所推崇的,集装箱一样,打包即走,集装箱内配置好环境和各种设置的话,可以即时使用
    还可以通过Dockerfile或者Docker-compose实现infra的代码化
  4. 共享性
    通过DockerHub等的管理,image的共享管理

Docker的劣势

依赖于base主机的OS

Docker的组件

Docker Engine

Docker image作成,容器启动等的Docker核心组件,
利用Linux的内核机能实现主处理,以Docker daemon形式动作。

Docker Compose

集中管理复数Docker容器的组件。

Docker Registry

公开/分享 Docker image的组件

Docker Machine

在非Linux环境,使用命令自动生成Docker实行环境的组件

Docker Swarm

容器的cluster集中化管理组件。
K8s是市场的开源代表。

Docker Kitematic

Docker的GUI工具组件

Docker Hub

Docker Hub是官方的库服务器。

Docker的内部结构

namespace

Docker使用Linux的名称空间机能实现容器的分区化。
Linux利用名称空间的概念,把不同的process放在不同的名称空间内实现容器化的隔离。有6种名称空间。

  1. PID:程序关联
  2. Network:IP地址,端口,路由,过滤等网络相关
  3. UID/GID:用户ID,群组ID相关
  4. MOUNT:外挂相关
  5. UTS:host名,domain名等相关
  6. IPC:信息队列等程序间通信相关

cgroup(control group)

Docker使用Linux的cgroup机能实现物理主机的资源(CPU,内存等)管理控制。
通过把process分组化,实现各个组的资源使用量限制。

网络

连接机能(link)

给每个容器分配一个虚拟NIC(eth0),172.17.0.0/16 段的IP由DHCP分割。
各容器的虚拟NIC(eth0)由主机上的一个桥(docker0)端口连接,相当于桥接器的作用,实现各容器之间的连接机能。该机能仅限一台物理主机,多台物理主机之间不能实现互联。

带有gcc的linux的docker镜像_docker_04

ip a

通过该命令查看主机Host上的桥接器的inferface

(省略)
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:bd:f7:d8:19 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever

外部通信

Docker使用Linux内核的iptables机能,实现hostOS的外部通信。
docker0和hostOS的物理NIC之间利用NAPT(Network Address Port Translation)实现私网到公网的通信。