0%

Docker

基于 Go 的开源应用容器引擎 Docker

快速了解 Docker

快速了解 docker 的小视频

【docker是什么?和kubernetes(k8s)是什么关系?-哔哩哔哩】

  • Docker 是一款能将程序和环境一起打包并运行的工具软件。Docker 作为中间层,使得应用和机器基础架构分离,从而实现不同架构下的快速交付部署。
  • 程序和环境打包构建成一个容器镜像文件,根据 Dockerfile 构建出容器镜像,Dockerfile 中设置包括指定环境的基础镜像(如 ubuntu/centos、python/go 等等)以及后续需执行的命令(比如安装依赖、运行服务等)。
  • 部署环境部署容器镜像,就会在 Linux 上以一个进程的形式运行该 docker 容器,利用操作系统的用户空间构建出应用所需的环境,运行相应服务。
  • Docker Registy:相当于 docker 镜像的代码仓,也就是镜像仓,可以将 docker 镜像推到 Registy,部署环境再从 Registy 拉取镜像。
  • Docker Compose:一整套服务经常包含多个 docker 镜像部署到单节点,这时候就可以使用 Docker Compose 来部署,通过 yaml 文件呢规定各个 docker 镜像间的部署顺序与其他部署配置信息。
  • Docker Swarm:解决一整套服务在多个节点间的部署问题,如迁移、扩缩容。
  • k8s:与 Docker Swarm 类似,也是解决一整套服务在多个节点间的部署问题,如迁移、扩缩容。

虚拟化过程

物理机

物理机存在的痛点:

  • 各个应用会共享依赖库,所以有可能存在不同应用依赖有冲突的问题,比如需要同一个依赖的不同版本
  • 低使用率,可能仅有几个应用在运行,却得占用一整台物理机
  • 爆炸半径大,比如改变一个应用的依赖,可以会导致另一应用变得不可用
  • 开关机慢
  • 创建和搭建物理机慢

image-20241013193557973

虚拟机

物理机上的 Hypervisor 会从物理机分离出独立的资源池,在这个资源池中生成虚拟化硬件以及与物理机相同的上方结构。

Hypervisor 分为两类:

  • Type 1:不依赖物理机上的 OS,比如 VMware、Hyper-V
  • Type 2:依赖物理机上的 OS,比如 Virtual Box

虚拟机一定程度上缓解了物理机的问题。

  • 应用运行在不同的虚拟机上,实现相互隔离,解决了依赖冲突问题
  • 可以根据需要分配相应的规格,提高使用率
  • 减小了爆炸半径
  • 开关机变为分钟级
  • 最大的好处:可以快速构建虚拟机

image-20241014005509938

容器

容器的载体可以是物理机也可以是虚拟机,和虚拟机的 Hypervisor 相对,容器通过 Container Runtime 控制。

容器与虚拟机的最大不同点:

  • 虚拟机复制了一份 Linux 内核
  • 容器并不存在内核,而是与载体的 OS 共用一个内核

容器的好处:

  • 无依赖冲突问题
  • 进一步提高了资源利用率。虚拟机还需要构造一套 OS,而容器可以直接依赖于宿主机的 OS
  • 进一步减小了爆炸半径。每个容器所占的资源相对更少了,爆炸半径也就相对减小。不过其实隔离性是不如虚拟机的
  • 开关容器时间短(秒级)
  • 极快速部署

image-20241014015955548

日常结构

image-20241015021636441

Docker 架构

Docker 采用 client-server 架构,由 Docker Client 发出指令,命令 Docker daemon 构建、运行、分发 Docker containers。Docker Client 和 Docker daemon 可以运行在同一个节点,也可以用 Docker Client 控制远程的 Docker daemon。

镜像 Image

容器镜像是一个由程序和环境构建出的标准包,包括了用来运行容器所需的文件、二进制文件、库以及配置。

容器 Container

Ubuntu 中安装 Docker Engine

https://docs.docker.com/engine/install/ubuntu/

  1. 卸载老版本

    1
    for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
  2. 更新 Ubuntu 源列表

    1
    apt-get update
  3. 安装 docker 依赖包

    1
    apt-get install ca-certificates curl
  4. 添加 docker 官方 GPG 密钥

    1
    2
    3
    install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    chmod a+r /etc/apt/keyrings/docker.asc
  5. 添加 docker 官方库

    1
    2
    3
    4
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  6. 更新 Ubuntu 源列表

    1
    apt-get update
  7. 安装 docker

    1
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  8. 查看 docker 服务运行状态

    1
    systemctl status docker

Docker 从构建到部署

Docker 镜像构建

Docker 镜像仓

Docker 容器部署

Docker 命令

查看正在运行的容器

1
docker ps

查看所有容器

1
docker ps -a

开启容器

1
docker start <CONTAINER ID>

停止容器

1
docker stop <CONTAINER ID>

执行命令

1
docker exec -it <CONTAINER ID> <CLI>

Docker Compose

Docker Swarm 与 k8s

参考