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 将消耗掉服务器大量资源。
图2:运行4个业务应用的 Docker 服务器,节省 VM 资源的消耗。
好处:更低的服务器配置,更少的成本,更快的速度。
Docker的架构
图1:来自 docker 文档
图2:来自《深入浅出Docker》
使用 Docker
安装 Docker
-
安装
# ubuntu/debian
sudo apt update
sudo apt install docker.io实际安装了以下组件:
- Docker Engine(Docker 引擎):
- Docker Daemon (dockerd):负责管理容器的生命周期,包括容器的创建、启动、停止、删除等。
- Docker REST API:用于与 Docker 引擎进行远程通信,支持程序化管理容器和镜像。
- Docker 客户端: - Docker CLI (Command Line Interface):用户与 Docker 交互的命令行工具,通过它可以执行各种 Docker 命令。
- Docker Engine(Docker 引擎):
-
验证是否安装成功
sudo docker --version
有时候 守护进程可能没有启动,使用命令启动
sudo systemctl start docker
-
加入 docker 组
sudo usermod -aG docker $USER
注销后生效。加入 docker 用户组后,使用不需要以 sudo 运行 docker 命令。
-
配置 Docker 仓库的镜像地址(由于国内网络无法访问 Docker 仓库)
/etc/docker/daemon.json{
"registry-mirrors": [
"https://docker.1panel.live"
]
}
接下来便能通过 Docker 命令管理 Docker 应用。
部署第一个 Docker 应用
docker run hello-world
hello-world
是一个简单的 Docker 应用,它的大小只有几KB。当它运行成功时会在屏幕上输出一段欢迎语,如此用户便能确认 Docker 的确安装成功了。
运行 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 服务器运维管理面板 - 官网