Here’s a detailed guide for deploying Docker on Debian:
Debian Docker 部署指南
简介
Docker 是一个开源平台,用于开发、发布和运行应用程序。它通过使用容器(Container)来打包应用程序及其所有依赖项,确保应用程序在任何环境中都能一致地运行。容器是轻量级、可移植且自给自足的执行单元,这使得 Docker 成为现代软件开发和部署不可或缺的工具。本指南将详细介绍如何在 Debian 系统上安装和配置 Docker。
为什么选择 Docker?
- 环境一致性:解决“在我的机器上能跑”的问题,确保开发、测试和生产环境的一致性。
- 快速部署:容器启动速度快,简化了应用程序的部署过程。
- 资源隔离:每个容器都在独立的进程中运行,与其他容器和主机系统隔离,提高了安全性。
- 可移植性:容器可以在任何支持 Docker 的机器上运行,无论是本地开发环境、虚拟机还是云服务器。
- 效率:Docker 镜像层叠技术减少了存储空间占用,容器的轻量级特性使得资源利用率更高。
1. 前提条件
在开始安装之前,请确保您的 Debian 系统满足以下要求:
- Debian 版本:本指南适用于 Debian 10 (Buster), Debian 11 (Bullseye) 或更高版本。
- sudo 权限:您需要一个拥有
sudo权限的用户账户。 - 互联网连接:用于下载 Docker 安装包和依赖。
更新系统包:
在安装任何新软件之前,始终建议更新您的系统包列表和已安装的包:
bash
sudo apt update
sudo apt upgrade -y
2. 卸载旧版本 (可选)
如果您之前安装过旧版本的 Docker,建议先将其完全卸载,以避免潜在的冲突:
bash
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
3. 安装 Docker Engine
Docker 官方提供了专门的仓库,以确保您能获取到最新且稳定的 Docker 版本。
步骤 3.1: 安装必要的包
安装一些 apt 工具所需的软件包,以便能够通过 HTTPS 使用仓库:
bash
sudo apt-get install ca-certificates curl gnupg -y
步骤 3.2: 添加 Docker 的官方 GPG 密钥
为了验证 Docker 软件包的真实性,您需要添加 Docker 的官方 GPG 密钥:
bash
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
步骤 3.3: 设置 Docker 仓库
将 Docker 仓库添加到 apt 源列表中。这会告诉您的系统从哪里下载 Docker 软件包。
bash
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤 3.4: 安装 Docker Engine、Containerd 和 Docker Compose
现在,您可以更新 apt 包索引并安装 Docker Engine、containerd(容器运行时)和 Docker Compose 插件:
bash
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
4. 后续配置
安装完成后,还需要进行一些重要的配置。
步骤 4.1: 验证 Docker 安装
运行一个简单的 hello-world 容器来验证 Docker 是否已正确安装和运行:
bash
sudo docker run hello-world
如果一切正常,您应该会看到一条信息,说明 Docker 客户端成功连接到 Docker 守护进程并运行了 hello-world 镜像。
步骤 4.2: 将当前用户添加到 Docker 组 (可选,但强烈推荐)
默认情况下,docker 命令需要 sudo 权限才能运行。为了避免每次都输入 sudo,您可以将当前用户添加到 docker 用户组。请注意,将用户添加到 docker 组会授予该用户对 Docker 守护进程的完全访问权限,这可能带来一定的安全风险。
bash
sudo usermod -aG docker $USER
更改将在您下次登录时生效。您可以退出当前会话并重新登录,或者运行以下命令使更改立即生效(无需重启):
bash
newgrp docker
现在,您可以尝试在不使用 sudo 的情况下运行 Docker 命令:
bash
docker run hello-world
步骤 4.3: 配置 Docker 开机自启
Docker 守护进程通常会在系统启动时自动启动。您可以使用以下命令检查其状态并启用(如果尚未启用):
bash
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
您应该看到 Active: active (running)。
5. 基本 Docker 命令
掌握一些基本的 Docker 命令对于日常使用至关重要。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:从镜像创建并运行一个新容器。
bash
docker run -d -p 80:80 nginx # 以后台模式运行 Nginx 容器,并将容器的 80 端口映射到主机的 80 端口docker ps [OPTIONS]:列出正在运行的容器。-a或--all:列出所有容器,包括已停止的。
docker images [OPTIONS]:列出本地的 Docker 镜像。docker pull NAME[:TAG]:从 Docker Hub 下载镜像。
bash
docker pull ubuntu:latestdocker stop [CONTAINER ID or NAME]:停止一个或多个正在运行的容器。docker start [CONTAINER ID or NAME]:启动一个或多个已停止的容器。docker rm [CONTAINER ID or NAME]:删除一个或多个容器。-f或--force:强制删除正在运行的容器。
docker rmi [IMAGE ID or NAME]:删除一个或多个本地镜像。-f或--force:强制删除镜像,即使它被容器使用。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:在运行中的容器内执行命令。
bash
docker exec -it <container_id_or_name> bash # 进入容器的 bash 终端docker logs [OPTIONS] CONTAINER:获取容器的日志。-f或--follow:实时跟踪日志输出。
docker-compose up:根据docker-compose.yml文件创建并启动服务。docker-compose down:停止并删除docker-compose.yml文件定义的服务。
6. 镜像加速器配置 (可选)
在中国大陆地区,从 Docker Hub 下载镜像可能会很慢。配置镜像加速器可以显著提高下载速度。您可以选择阿里云、腾讯云、DaoCloud 等提供的加速器服务。
以阿里云为例:
- 登录 阿里云容器镜像服务。
- 在左侧导航栏选择 镜像工具 > 镜像加速器。
- 复制您的专属加速器地址。
- 编辑或创建 Docker 配置文件
/etc/docker/daemon.json:
bash
sudo nano /etc/docker/daemon.json - 添加以下内容,将
YOUR_ACCELERATOR_URL替换为您的加速器地址:
json
{
"registry-mirrors": ["YOUR_ACCELERATOR_URL"]
} - 保存并关闭文件。
- 重启 Docker 守护进程以使配置生效:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
7. 常见问题与故障排除
Cannot connect to the Docker daemon. Is the docker daemon running on this host?- 检查 Docker 服务状态:
sudo systemctl status docker - 如果未运行,尝试启动:
sudo systemctl start docker - 如果已添加用户到
docker组但仍需sudo,请注销并重新登录或运行newgrp docker。
- 检查 Docker 服务状态:
- 镜像下载缓慢:
- 配置 Docker 镜像加速器。
- 检查网络连接。
- 端口冲突:
- 如果
docker run -p命令失败,可能是主机上已有一个服务占用了相同的端口。 - 使用
sudo netstat -tulnp | grep :<port_number>查找占用端口的进程。 - 更换容器映射到主机的端口。
- 如果
8. 总结
本指南详细介绍了在 Debian 系统上安装、配置和基本使用 Docker 的步骤。通过遵循这些步骤,您应该能够在 Debian 环境中成功部署 Docker Engine,并开始使用容器化技术来管理和运行您的应用程序。Docker 的世界非常广阔,建议您进一步学习 Dockerfile 的编写、Docker Compose 的高级用法以及 Docker Swarm 或 Kubernetes 等容器编排技术,以构建更健壮、可扩展的应用程序。