上一篇 下一篇 分享链接 返回 返回顶部

Debian 服务器安装 Docker 全流程:从环境配置到 Compose 部署示例

发布人:慈云数据-客服中心 发布时间:14小时前 阅读量:4

Debian Docker部署教程|附配置文件

Docker 是目前最常用的容器化部署工具之一,它可以将应用程序及其依赖环境打包到容器中运行,从而解决“在我电脑上能跑,到了服务器就不行”的问题。对于个人开发者、中小型团队以及生产环境运维来说,Docker 都是非常重要的基础工具。

本文将以 Debian 系统 为例,详细介绍 Docker 的安装、配置、常用命令、Docker Compose 部署方式,并附带常见配置文件示例,方便你在服务器上快速完成 Docker 环境搭建。


一、环境说明

本文使用的环境如下:

项目 说明
操作系统 Debian 11 / Debian 12
用户权限 root 用户或具备 sudo 权限的普通用户
Docker 版本 Docker CE 最新稳定版
Compose 版本 Docker Compose Plugin
服务器架构 x86_64 / amd64

如果你的系统是 Debian 10,也可以参考本文步骤,但建议优先使用 Debian 11 或 Debian 12,以获得更好的软件兼容性和安全更新支持。


二、安装前准备

在安装 Docker 之前,建议先更新系统软件包,并安装一些必要工具。

如果你当前使用的是 root 用户,命令可以直接执行:

apt update
apt upgrade -y

如果你使用的是普通用户,请加上 sudo

sudo apt update
sudo apt upgrade -y

安装常用依赖:

apt install -y ca-certificates curl gnupg lsb-release apt-transport-https software-properties-common

这些软件包的作用如下:

软件包 作用
ca-certificates 用于 HTTPS 证书校验
curl 用于下载远程文件
gnupg 用于导入 GPG 密钥
lsb-release 用于识别系统发行版本
apt-transport-https 允许 APT 使用 HTTPS 源
software-properties-common 提供软件源管理工具

三、卸载旧版本 Docker

如果你的服务器之前安装过 Docker,建议先卸载旧版本,避免软件包冲突。

apt remove -y docker docker-engine docker.io containerd runc

如果提示某些软件包不存在,可以忽略。这只是为了清理旧版本,不影响后续安装。

如果你想彻底清理旧 Docker 数据,可以执行:

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

注意:以上命令会删除已有 Docker 镜像、容器、卷数据,请谨慎操作。如果服务器上已经运行了业务容器,不要直接删除。


四、添加 Docker 官方软件源

Debian 默认软件源中的 Docker 版本可能较旧,因此建议使用 Docker 官方源安装。

1. 创建密钥目录

install -m 0755 -d /etc/apt/keyrings

2. 下载 Docker 官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

3. 设置密钥权限

chmod a+r /etc/apt/keyrings/docker.gpg

4. 添加 Docker 软件源

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" \
> /etc/apt/sources.list.d/docker.list

更新软件包索引:

apt update

如果没有报错,说明 Docker 官方源添加成功。


五、安装 Docker Engine

执行以下命令安装 Docker:

apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后,查看 Docker 版本:

docker version

查看 Docker Compose 版本:

docker compose version

如果能正常输出版本信息,说明安装成功。


六、启动并设置开机自启

安装 Docker 后,通常服务会自动启动。你可以手动检查状态:

systemctl status docker

如果 Docker 没有运行,可以启动它:

systemctl start docker

设置开机自启:

systemctl enable docker

重启 Docker:

systemctl restart docker

七、运行测试容器

为了验证 Docker 是否可以正常使用,可以运行官方测试镜像:

docker run hello-world

如果输出类似以下内容,说明 Docker 已成功运行:

Hello from Docker!
This message shows that your installation appears to be working correctly.

这个命令会从 Docker Hub 拉取 hello-world 镜像,并创建一个临时容器运行。


八、配置普通用户使用 Docker

默认情况下,只有 root 用户可以直接执行 Docker 命令。如果你希望普通用户无需每次输入 sudo,可以将该用户加入 docker 用户组。

假设用户名为 debian

usermod -aG docker debian

然后退出当前 SSH 会话,重新登录后执行:

docker ps

如果没有权限错误,说明配置成功。

注意:加入 docker 组的用户拥有接近 root 的权限,因为其可以通过 Docker 挂载宿主机目录。因此生产环境中应谨慎授权。


九、Docker 国内镜像加速配置

在国内服务器上拉取 Docker Hub 镜像时,可能会遇到速度慢、超时等问题。可以配置镜像加速地址。

Docker 的配置文件路径为:

/etc/docker/daemon.json

如果文件不存在,可以新建。

示例配置如下:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}

保存后重启 Docker:

systemctl daemon-reload
systemctl restart docker

查看配置是否生效:

docker info

在输出结果中查找:

Registry Mirrors

如果能看到配置的镜像地址,说明镜像加速已生效。


十、daemon.json 配置文件详解

下面对常用参数进行说明。

1. registry-mirrors

用于配置镜像加速地址:

"registry-mirrors": [
  "https://docker.m.daocloud.io"
]

当拉取 Docker Hub 镜像时,Docker 会优先使用镜像加速服务。

2. log-driver

用于设置容器日志驱动:

"log-driver": "json-file"

默认情况下 Docker 使用 json-file 保存日志。

3. log-opts

用于限制容器日志大小:

"log-opts": {
  "max-size": "100m",
  "max-file": "3"
}

表示单个日志文件最大 100MB,最多保留 3 个日志文件。这样可以防止容器日志无限增长导致磁盘被占满。

4. storage-driver

用于设置存储驱动:

"storage-driver": "overlay2"

overlay2 是目前 Linux 上推荐使用的 Docker 存储驱动,性能和稳定性较好。


十一、常用 Docker 命令

1. 查看 Docker 信息

docker info

2. 查看镜像列表

docker images

3. 拉取镜像

docker pull nginx:latest

4. 运行容器

docker run -d --name nginx-test -p 8080:80 nginx:latest

参数说明:

参数 说明
-d 后台运行
--name 指定容器名称
-p 端口映射
nginx:latest 使用的镜像

访问:

http://服务器IP:8080

如果可以看到 Nginx 默认页面,说明容器运行正常。

5. 查看运行中的容器

docker ps

6. 查看所有容器

docker ps -a

7. 停止容器

docker stop nginx-test

8. 启动容器

docker start nginx-test

9. 删除容器

docker rm nginx-test

如果容器正在运行,需要先停止,或者使用强制删除:

docker rm -f nginx-test

10. 删除镜像

docker rmi nginx:latest

11. 查看容器日志

docker logs nginx-test

实时查看日志:

docker logs -f nginx-test

12. 进入容器

docker exec -it nginx-test bash

如果容器内没有 bash,可以使用 sh:

docker exec -it nginx-test sh

十二、使用 Docker Compose 部署服务

Docker Compose 适合用于管理多容器应用。比如一个 Web 应用可能包含 Nginx、MySQL、Redis 等多个服务,使用 Compose 可以通过一个 docker-compose.yml 文件统一管理。

从新版 Docker 开始,推荐使用:

docker compose

而不是旧版:

docker-compose

十三、Docker Compose 部署 Nginx 示例

创建项目目录:

mkdir -p /opt/docker/nginx
cd /opt/docker/nginx

创建配置目录:

mkdir -p html conf logs

创建首页文件:

cat > html/index.html << EOF



  
  Docker Nginx


  

Nginx is running in Docker!

这是通过 Docker Compose 部署的 Nginx 服务。

EOF

创建 Nginx 配置文件:

cat > conf/default.conf << EOF
server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
        try_files \$uri \$uri/ =404;
    }

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}
EOF

创建 docker-compose.yml

services:
  nginx:
    image: nginx:latest
    container_name: nginx-demo
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./conf/default.conf:/etc/nginx/conf.d/default.conf
      - ./logs:/var/log/nginx

启动服务:

docker compose up -d

查看容器状态:

docker compose ps

查看日志:

docker compose logs -f

停止服务:

docker compose down

十四、Docker Compose 部署 MySQL 示例

创建目录:

mkdir -p /opt/docker/mysql
cd /opt/docker/mysql
mkdir -p data conf logs

创建 MySQL 配置文件:

cat > conf/my.cnf << EOF
[mysqld]
default-time-zone = '+8:00'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 500

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
EOF

创建 docker-compose.yml

services:
  mysql:
    image: mysql:8.0
    container_name: mysql-demo
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "YourStrongPassword123!"
      MYSQL_DATABASE: "demo"
      MYSQL_USER: "demo_user"
      MYSQL_PASSWORD: "DemoPassword123!"
      TZ: "Asia/Shanghai"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./logs:/var/log/mysql

启动 MySQL:

docker compose up -d

进入 MySQL 容器:

docker exec -it mysql-demo mysql -uroot -p

输入 MYSQL_ROOT_PASSWORD 中配置的密码即可登录。

生产环境中不建议直接将数据库端口 3306 暴露到公网。如果必须开放,请配合防火墙、安全组、强密码、白名单等安全策略。


十五、Docker Compose 部署 Redis 示例

创建目录:

mkdir -p /opt/docker/redis
cd /opt/docker/redis
mkdir -p data conf

创建 Redis 配置文件:

cat > conf/redis.conf << EOF
bind 0.0.0.0
port 6379
requirepass YourRedisPassword123
appendonly yes
appendfilename "appendonly.aof"
dir /data
protected-mode yes
timeout 300
tcp-keepalive 60
EOF

创建 docker-compose.yml

services:
  redis:
    image: redis:7
    container_name: redis-demo
    restart: always
    ports:
      - "6379:6379"
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/etc/redis/redis.conf

启动 Redis:

docker compose up -d

进入 Redis:

docker exec -it redis-demo redis-cli

认证:

AUTH YourRedisPassword123

测试:

PING

如果返回:

PONG

说明 Redis 正常运行。


十六、配置 Docker 自动清理

Docker 使用时间久了以后,会产生大量无用镜像、停止的容器、构建缓存等,占用磁盘空间。

查看 Docker 占用空间:

docker system df

清理未使用资源:

docker system prune -f

清理未使用镜像:

docker image prune -a -f

清理构建缓存:

docker builder prune -f

如果需要定期清理,可以添加计划任务:

crontab -e

添加如下内容:

0 3 * * 0 docker system prune -f >/dev/null 2>&1

表示每周日凌晨 3 点自动清理未使用的 Docker 资源。

不建议在生产环境中频繁执行 docker system prune -a,因为它可能删除暂时未使用但后续仍需要的镜像。


十七、防火墙与端口开放

如果你的 Debian 启用了 UFW 防火墙,需要开放对应端口。例如开放 Nginx 的 8080 端口:

ufw allow 8080/tcp

开放 SSH:

ufw allow 22/tcp

启用 UFW:

ufw enable

查看状态:

ufw status

如果你使用的是云服务器,还需要在云平台安全组中放行对应端口,例如 80、443、8080、3306 等。


十八、生产环境部署建议

在生产环境中使用 Docker,除了能运行服务,还应关注安全性、稳定性和可维护性。

1. 不要随意使用 latest 标签

例如:

image: nginx:latest

虽然方便,但不利于版本控制。生产环境建议指定明确版本:

image: nginx:1.26

这样可以避免镜像自动升级导致兼容性问题。

2. 对外暴露端口要谨慎

数据库、Redis、管理后台等服务不建议直接暴露公网。如果必须暴露,应配合防火墙、访问白名单、强密码和 TLS 加密。

3. 重要数据必须挂载到宿主机

例如 MySQL 数据目录:

volumes:
  - ./data:/var/lib/mysql

否则容器删除后,数据可能丢失。

4. 配置日志大小限制

建议在 /etc/docker/daemon.json 中配置日志限制,避免日志撑满磁盘。

5. 定期备份数据

Docker 并不等于备份。数据库、配置文件、上传文件等仍然需要定期备份,可以结合 rsync、对象存储、快照等方式实现。


十九、常见问题排查

1. Docker 服务启动失败

查看服务状态:

systemctl status docker

查看详细日志:

journalctl -u docker -xe

常见原因包括:

  • daemon.json 格式错误;
  • 存储驱动配置不兼容;
  • 磁盘空间不足;
  • 旧版本 Docker 残留冲突。

可以使用以下命令检查 JSON 格式:

python3 -m json.tool /etc/docker/daemon.json

2. 拉取镜像失败

常见原因:

  • 网络无法访问 Docker Hub;
  • DNS 配置异常;
  • 镜像名称写错;
  • 镜像加速器不可用。

可以尝试测试网络:

curl -I https://registry-1.docker.io

也可以更换镜像加速地址后重启 Docker。

3. 容器端口无法访问

检查容器是否运行:

docker ps

检查端口映射:

docker port 容器名

检查防火墙:

ufw status

检查云服务器安全组是否放行端口。

4. 容器日志过大

查看容器日志文件位置:

docker inspect 容器名 | grep LogPath

建议通过 daemon.json 统一限制日志大小,而不是手动删除日志文件。


二十、一键安装脚本示例

如果你希望快速安装 Docker,可以使用下面的脚本。建议先阅读脚本内容,再执行。

创建脚本:

vim install-docker.sh

写入以下内容:

#!/bin/bash

set -e

echo "更新系统软件包..."
apt update
apt install -y ca-certificates curl gnupg lsb-release apt-transport-https software-properties-common

echo "卸载旧版本 Docker..."
apt remove -y docker docker-engine docker.io containerd runc || true

echo "添加 Docker 官方 GPG 密钥..."
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo "添加 Docker 官方软件源..."
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" \
> /etc/apt/sources.list.d/docker.list

echo "安装 Docker..."
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

echo "写入 Docker 配置..."
mkdir -p /etc/docker

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

echo "启动 Docker..."
systemctl daemon-reload
systemctl enable docker
systemctl restart docker

echo "Docker 安装完成!"
docker version
docker compose version

授权执行:

chmod +x install-docker.sh

运行脚本:

./install-docker.sh

二十一、完整目录结构示例

如果你准备在服务器上统一管理 Docker 服务,建议使用如下目录结构:

/opt/docker/
├── nginx/
│   ├── docker-compose.yml
│   ├── html/
│   ├── conf/
│   └── logs/
├── mysql/
│   ├── docker-compose.yml
│   ├── data/
│   ├── conf/
│   └── logs/
└── redis/
    ├── docker-compose.yml
    ├── data/
    └── conf/

这种结构的优点是:

  • 服务之间相互独立;
  • 配置文件清晰;
  • 便于备份和迁移;
  • 方便使用 Docker Compose 管理;
  • 出问题时更容易排查。

二十二、总结

本文以 Debian 系统为例,介绍了 Docker 的完整部署流程,包括系统准备、卸载旧版本、添加 Docker 官方源、安装 Docker Engine、配置开机自启、设置镜像加速、编写 daemon.json 配置文件,以及使用 Docker Compose 部署 Nginx、MySQL、Redis 等常见服务。

对于日常使用来说,掌握以下几个重点即可:

  1. 使用 Docker 官方源安装,避免版本过旧;
  2. 配置 /etc/docker/daemon.json,限制日志大小并设置镜像加速;
  3. 使用 Docker Compose 管理服务,而不是手动运行大量 docker run 命令;
  4. 生产环境不要滥用 latest 标签;
  5. 数据库、配置文件、上传目录必须挂载到宿主机;
  6. 定期备份数据,定期检查磁盘空间;
  7. 不要轻易暴露数据库、Redis 等敏感服务端口到公网。

通过本文的配置和示例,你可以在 Debian 服务器上快速搭建稳定、清晰、易维护的 Docker 运行环境,为后续部署网站、数据库、中间件和业务系统打下基础。

目录结构
全文