美文网首页
Docker 核心技术 学习笔记 1

Docker 核心技术 学习笔记 1

作者: 吴摩西 | 来源:发表于2022-11-09 20:36 被阅读0次

传统分层架构 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

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