Docker 核心技术 学习笔记 1

传统分层架构 VS 微服务

  1. Monolithic Architecture > UI / Biz logic / Data Access Layer 在一个服务上
  2. SOA 面向服务的架构,通过业务总线链接所有应用
  3. MicroService Architecture
    • SOA 的最佳实现
    • UI 可能会链接成百上千个微服务,微服务之间可以互相调用
    • 服务发现怎么做,一般,应用需要固定的 IP + 端口
    • 传统的
      1. 通过物理机,不同服务通过不同的 port ,挑战是一个接口不能重复利用
      2. 虚拟机,不同的应用使用不同的虚拟机,两个 web 应用使用不同的虚拟机 ip,可以使用同样的端口。管理困难。

Docker

基于Linux内核的Cgroup,Namespace,以及UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

虚拟机 VS Docker

  1. 性能不好,数据包会过两个 OS,资源也需要额外的支持操作系统。
  2. 有最好的性能,和资源有最高的利用率。
  • 更高效的利用系统资源
  • 更快速的启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • 更轻松的维护和扩展

docker run -it centos, ip, 操作系统,进程,完全不同。

初识容器

# cat Dockerfile
FROM ubuntu
ENV MY_SERVICE_PORT=80
ADD bin/amd64/httpserver /httpserver 
ENTRYPOINT /httpserver

• 将Dockerfile打包成镜像

docker build -t cncamp/httpserver:${tag} .
docker push cncamp/httpserver:v1.0

• 运行容器

docker run -d cncamp/httpserver:v1.0

容器主要特性

  • 隔离性:需要一个封闭的环境,所需依赖必须在隔离环境里。
  • 可配额:对资源的管控,保证一定会有所需的资源。如果写的不对,不能影响其他的应用
  • 便捷性:可以方便的 replay
  • 安全性:各个应用是安全隔离的。

Namespace

LinuxNamespace是一种LinuxKernel提供的资源隔离方案:

• 系统可以为进程分配不同的 Namespace;

• 并保证不同的 Namespace 资源独立分配、进程彼此隔离,即不同的 Namespace 下的进 程互不干扰 。

任何进程都是有 namespace,不同 namespace 之间相互隔离。

鼓励大家源代码驱动,就是学习任何技术的时候,都去看看源代码,可能无需看所有的代码。只关注想关注的部分。

隔离性 - Linux Namespace

namespace 有几种

  • IPC: System V IPC 和 POSIX 消息队列
  • Network: 网络设备、网络协议栈、网络端口等
  • PID: 进程
  • Mount:挂载点
  • UTS:主机名和域名
  • USR:用户和用户组

把用户的进程隔离开,让 Namespace 内的进程看不到外边的世界。有独立的主机域名、用户管理、网络、进程、文件系统等。把它模拟成一个操作系统。

容器就是通过 docker demon fork 了一个子进程

关于 namespace 的常用操作

  • 查看当前系统的 namespace: lsns –t <type>
  • 进入某namespace运行命令: nsenter -t <pid> -n ip addr, 主机可以操作容器内应用

答疑

  1. namespace 不能看到其他的 namespace
  2. 网络 namespace 的问题挺多,比如网络不通
  3. 容器分为两部分,一部分是 runtime service, 一部分是 mirror service
    1. namespace, cgroup 是跟 runtime service 相关的
  4. Docker 跟 containerd 底层技术相同。这会儿都是 containerd 了\
  5. kubernetes 限制一个主机上最多 110 个容器
  6. kuber admin 来深入学习 kubernates
  7. Kubernetes namespace 是把 kubernates 对象放在不同的 namespace,与 linux namespace 不同
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以下总结一些本人自学docker过程中的一些笔记,不保证内容的准确性 1. 云平台的三个层次服务 IaaS 基础设...
    半个茄子阅读 3,698评论 0 1
  • Docker介绍 当我们提到微服务部署或者虚拟化的时候,通常会想到docker跟kubernetes。docker...
    chen_kaka阅读 4,318评论 1 1
  • 深入浅出Docker学习笔记 Docker引擎 Docker引擎:用来运行和管理容器的核心文件模块化(基于开放容器...
    yuq329阅读 4,284评论 0 4
  • 1 Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub:...
    小波同学阅读 3,369评论 0 3
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 13,581评论 0 120