跳到主要内容

Docker

了解 Docker

Docker是什么?

Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成一个可移植的容器,这样就可以在任何支持 Docker 的系统上运行应用程序。

与虚拟机比较

特性Docker虚拟机 (VM)
虚拟化层级操作系统级别虚拟化 (OS-level)🟢硬件级别虚拟化 (Hypervisor-level)
启动时间🟢毫秒~秒级启动分钟级启动
资源消耗🟢轻量级,占用较少资源相对较重,每个虚拟机需要完整的操作系统
性能开销🟢较小(共享宿主机内核)较大(每个虚拟机有完整的操作系统)
隔离性容器之间共享宿主操作系统内核,隔离性较弱🟢完全隔离,每个虚拟机都有独立的操作系统
可移植性🟢高(可以在任何安装 Docker 的平台运行)较低(受限于虚拟机软件的兼容性)
部署效率🟢极高(可以快速部署和迁移)较低(启动和配置时间较长)
兼容性由于基于 Linux 的技术实现,在 Windows 和 macOS 上使用 Doceker 需安装 Docker-Desktop 模拟出一个 Linux 环境。🟢支持主流操作系统
使用场景APP开发环节,打包依赖环境。APP部署环节,提供软件隔离环境。APP运维,群组管理。提供硬件级的操作系统。
理解容器和虚拟机的关系

我们购买的云服务器,实际上是 KVM 虚拟出来的主机。也许你会在云服务器上部署 Docker 应用,或者 Docker 应用集群。

图1:运行4个业务应用的 VM 服务器,VM 将消耗掉服务器大量资源。

image-20250104233751211

图2:运行4个业务应用的 Docker 服务器,节省 VM 资源的消耗。

好处:更低的服务器配置,更少的成本,更快的速度。

image-20250104233835869

Docker的架构

图1:来自 docker 文档

image-20250104155030984

图2:来自《深入浅出Docker》

image-20250104233136577

使用 Docker

安装 Docker

  1. 安装

    # ubuntu/debian
    sudo apt update
    sudo apt install docker.io

    实际安装了以下组件:

    1. Docker Engine(Docker 引擎)
      • Docker Daemon (dockerd):负责管理容器的生命周期,包括容器的创建、启动、停止、删除等。
      • Docker REST API:用于与 Docker 引擎进行远程通信,支持程序化管理容器和镜像。
    2. Docker 客户端: - Docker CLI (Command Line Interface):用户与 Docker 交互的命令行工具,通过它可以执行各种 Docker 命令。
  2. 验证是否安装成功

    sudo docker --version

    有时候 守护进程可能没有启动,使用命令启动

    sudo systemctl start docker
  3. 加入 docker 组

    sudo usermod -aG docker $USER

    注销后生效。加入 docker 用户组后,使用不需要以 sudo 运行 docker 命令。

  4. 配置 Docker 仓库的镜像地址(由于国内网络无法访问 Docker 仓库)

    /etc/docker/daemon.json
    {
    "registry-mirrors": [
    "https://docker.1panel.live"
    ]
    }

接下来便能通过 Docker 命令管理 Docker 应用。

部署第一个 Docker 应用

docker run hello-world

hello-world 是一个简单的 Docker 应用,它的大小只有几KB。当它运行成功时会在屏幕上输出一段欢迎语,如此用户便能确认 Docker 的确安装成功了。

image-20250104181917624

运行 docker run 命令时,docker 在后台完成以下步骤:

了解镜像 (Image)

镜像是应用程序及其依赖项的只读模板,通常是从 Docker Hub 或其他镜像仓库下载的。镜像包含了容器运行所需的操作系统文件、程序文件以及执行环境等。

简单的理解为 应用程序的安装包

镜像管理命令:

#列出已下载镜像的名单
docker image ls

#删除镜像xx
docker image rm 镜像xx

#删除所有停止的容器
docker image rm $(docker ps -aq)

#下载镜像xx
docker pull 镜像xx

了解容器 (Container)

容器是镜像的一个实例,运行时是一个隔离的进程,包含所有执行应用所需的环境。容器可以启动、停止、重启、删除等。

简单的理解为 安装好的程序

容器管理命令:

#基于镜像xx,安装并启动一个容器
docker run 镜像xx

#启动已停止的,名为xx的容器
docker start 容器xx

#列出正在运行容器的名单
docker ps

#列出所有容器的名单(包括停止的容器)
docker ps -a

在传统的环境中,许多的软件只能在系统上安装一次。在 Docker 环境中,由于容器的隔离特性:可以在系统上安装无数个相同的应用程序

了解 Docker Hub

Docker Hub 是一个官方的公共镜像仓库,用户可以上传或下载各种镜像。

了解 Docker 网络

Docker 提供多种网络模式,容器之间可以通过 Docker 网络进行通信,支持桥接、宿主网络、容器网络等不同模式。

了解 Docker 数据持久化

Docker Volume 是用于持久化容器数据的机制,容器中的数据通常存储在 Volume 中,保证即使容器被删除,数据依然可以保留。

了解 Docker 应用开发

如果你想要开发了一个应用,想打包为 Docker 镜像,可以学习:

  • Docker file:单个应用。
  • Docker Compose:多个应用组成集群。

管理面板

通过面板管理 Docker 应用是一件愉快的事情,面板比命令更加简单、直观。降低了部署 和运维 Docker 应用程序的难度。

1Panel - 现代化、开源的 Linux 服务器运维管理面板 - 官网

PixPin_2025-01-20_16-45-07

总结

  1. Docker 通过轻量级的容器化技术,使得应用部署变得更加高效、可移植和灵活。
  2. 学习 Docker 可以从 书籍官方文档 开始。
  3. 管理 Docker :
    • 命令行:灵活且强大,学习成本高一些。
    • 运维面板 :难度低,上手快,对于运维应该足够了。
  4. 开发 Docker 应用:Docker file 和 Docker Compose