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

Debian 上手 Docker:从安装到部署 Nginx、MySQL、Redis 一篇搞定

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

Debian Docker部署教程|零基础可学

Docker 是目前最流行的容器化技术之一。它可以把应用程序及其运行环境打包到一个独立的“容器”中,让应用在不同服务器、不同系统环境下都能稳定运行。对于刚接触 Linux 服务器的新手来说,Docker 能大大降低部署网站、数据库、面板、网盘、博客系统等服务的难度。

本文将以 Debian 系统 为例,从零开始讲解 Docker 的安装、配置、常用命令以及实际部署示例。即使你之前没有接触过 Docker,也可以按照本文一步一步完成部署。


一、Docker 是什么?

在正式安装之前,我们先简单理解一下 Docker。

传统部署一个应用时,通常需要安装运行环境,例如:

  • 部署 PHP 网站,需要安装 Nginx、PHP、MySQL;
  • 部署 Java 项目,需要安装 JDK、Tomcat;
  • 部署 Python 项目,需要安装 Python、pip、依赖库;
  • 部署数据库,需要配置用户、端口、数据目录等。

这些操作不仅繁琐,而且容易因为系统版本、依赖版本不同而出错。

Docker 的作用就是把应用和依赖环境打包成一个整体。你只需要运行一个镜像,就可以快速启动服务。

简单来说:

Docker 镜像类似“安装包”,Docker 容器类似“运行中的程序”。

例如你想运行一个 Nginx 网站,不需要手动安装 Nginx,只需要执行一条命令:

docker run -d -p 80:80 nginx

Docker 就会自动下载 Nginx 镜像并运行一个 Web 服务。


二、准备工作

在安装 Docker 之前,需要准备一台 Debian 系统的服务器或虚拟机。

本文适用于以下系统:

  • Debian 10
  • Debian 11
  • Debian 12

建议使用 Debian 11 或 Debian 12。

1. 登录服务器

如果你使用的是云服务器,可以通过 SSH 登录:

ssh root@服务器IP

例如:

ssh root@192.168.1.100

如果系统提示确认连接,输入:

yes

然后输入服务器密码即可登录。

2. 检查系统版本

登录后,可以执行以下命令查看 Debian 版本:

cat /etc/debian_version

也可以查看更详细的信息:

cat /etc/os-release

3. 更新系统软件包

安装 Docker 之前,建议先更新系统软件源和软件包:

apt update
apt upgrade -y

其中:

  • apt update:更新软件源列表;
  • apt upgrade -y:升级已安装的软件包;
  • -y:自动确认安装。

三、安装 Docker

Debian 安装 Docker 有多种方式,本文推荐使用 Docker 官方仓库安装。这样安装的版本较新,也更加稳定。

1. 卸载旧版本 Docker

如果系统中曾经安装过旧版本 Docker,可以先执行以下命令卸载:

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

如果提示没有安装相关软件,也不用担心,继续下一步即可。


2. 安装必要依赖

Docker 官方仓库需要一些基础工具支持:

apt install -y ca-certificates curl gnupg lsb-release

这些软件的作用如下:

  • ca-certificates:用于 HTTPS 证书验证;
  • curl:用于下载文件;
  • gnupg:用于验证软件源签名;
  • lsb-release:用于识别系统版本信息。

3. 添加 Docker 官方 GPG 密钥

执行以下命令创建密钥目录:

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

然后下载 Docker 官方 GPG 密钥:

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

4. 添加 Docker 软件源

执行以下命令添加 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 软件源添加成功。


5. 安装 Docker Engine

执行以下命令安装 Docker:

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

安装内容说明:

  • docker-ce:Docker 社区版引擎;
  • docker-ce-cli:Docker 命令行工具;
  • containerd.io:容器运行时;
  • docker-buildx-plugin:用于构建镜像的插件;
  • docker-compose-plugin:Docker Compose 插件。

四、启动并设置 Docker 开机自启

安装完成后,启动 Docker:

systemctl start docker

设置开机自动启动:

systemctl enable docker

查看 Docker 运行状态:

systemctl status docker

如果看到类似以下内容,说明 Docker 正在运行:

Active: active (running)

五、验证 Docker 是否安装成功

可以通过查看版本验证:

docker version

也可以运行官方测试容器:

docker run hello-world

如果看到类似以下提示:

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

说明 Docker 已经安装成功。


六、Docker 基础概念

学习 Docker 时,常见的几个概念一定要理解。

1. 镜像 Image

镜像是一个只读模板,里面包含应用程序和运行环境。

例如:

  • nginx 镜像:包含 Nginx 服务;
  • mysql 镜像:包含 MySQL 数据库;
  • redis 镜像:包含 Redis 服务;
  • ubuntu 镜像:包含 Ubuntu 基础系统。

可以把镜像理解为“软件安装包”。


2. 容器 Container

容器是镜像运行后的实例。

例如你使用 nginx 镜像创建了一个容器,这个容器就是正在运行的 Nginx 服务。

可以把容器理解为“正在运行的软件”。


3. 仓库 Registry

仓库用于存放镜像。最常见的是 Docker Hub。

例如执行:

docker pull nginx

Docker 会从 Docker Hub 下载 Nginx 镜像。


4. 数据卷 Volume

容器本身可以删除、重建,因此如果重要数据直接放在容器内部,删除容器后数据可能会丢失。

数据卷用于持久化保存数据。

例如数据库数据、网站文件、配置文件,通常都应该挂载到宿主机目录或 Docker Volume 中。


七、Docker 常用命令

下面介绍一些新手必须掌握的 Docker 命令。

1. 查看 Docker 版本

docker version

查看更简洁的信息:

docker --version

2. 搜索镜像

docker search nginx

3. 下载镜像

docker pull nginx

指定版本下载:

docker pull nginx:stable

如果不指定版本,默认下载 latest 标签。


4. 查看本地镜像

docker images

或:

docker image ls

5. 运行容器

docker run -d --name my-nginx -p 80:80 nginx

参数说明:

  • -d:后台运行;
  • --name my-nginx:容器名称为 my-nginx
  • -p 80:80:端口映射,前面的 80 是服务器端口,后面的 80 是容器端口;
  • nginx:使用的镜像名称。

6. 查看运行中的容器

docker ps

查看所有容器,包括停止的容器:

docker ps -a

7. 停止容器

docker stop my-nginx

也可以使用容器 ID:

docker stop 容器ID

8. 启动已停止的容器

docker start my-nginx

9. 重启容器

docker restart my-nginx

10. 删除容器

删除容器前需要先停止:

docker stop my-nginx
docker rm my-nginx

如果想强制删除:

docker rm -f my-nginx

11. 删除镜像

docker rmi nginx

如果镜像正在被容器使用,需要先删除对应容器。


12. 查看容器日志

docker logs my-nginx

实时查看日志:

docker logs -f my-nginx

13. 进入容器内部

docker exec -it my-nginx bash

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

docker exec -it my-nginx sh

退出容器:

exit

八、实战:使用 Docker 部署 Nginx 网站

下面通过一个简单示例,演示如何使用 Docker 部署 Nginx 网站。

1. 创建网站目录

mkdir -p /docker/nginx/html
mkdir -p /docker/nginx/conf

创建一个测试网页:

cat > /docker/nginx/html/index.html << EOF



    
    Docker Nginx


    

Debian Docker Nginx 部署成功!

EOF

2. 启动 Nginx 容器

执行以下命令:

docker run -d \
--name nginx-web \
-p 80:80 \
-v /docker/nginx/html:/usr/share/nginx/html \
--restart=always \
nginx

参数说明:

  • --name nginx-web:设置容器名称;
  • -p 80:80:将服务器 80 端口映射到容器 80 端口;
  • -v /docker/nginx/html:/usr/share/nginx/html:将宿主机网页目录挂载到容器网页目录;
  • --restart=always:容器异常退出或服务器重启后自动启动;
  • nginx:使用 Nginx 镜像。

3. 访问网站

在浏览器中访问:

http://服务器IP

如果看到页面显示:

Debian Docker Nginx 部署成功!

说明 Nginx 网站已经部署成功。


九、Docker Compose 部署方式

虽然 docker run 可以启动容器,但当服务越来越多时,命令会变得很长,不方便维护。

Docker Compose 可以通过一个 YAML 文件管理多个容器,非常适合部署网站、数据库、反向代理等服务。

新版 Docker 安装后一般自带 Compose 插件,可以查看版本:

docker compose version

注意新版命令是:

docker compose

而旧版是:

docker-compose

十、实战:使用 Docker Compose 部署 Nginx

1. 创建项目目录

mkdir -p /docker/compose-nginx/html
cd /docker/compose-nginx

创建网页文件:

cat > html/index.html << EOF



    
    Docker Compose Nginx


    

Docker Compose 部署 Nginx 成功!

EOF

2. 编写 compose.yml 文件

nano compose.yml

写入以下内容:

services:
  nginx:
    image: nginx:latest
    container_name: compose-nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: always

保存并退出。

如果使用 nano 编辑器:

  • Ctrl + O 保存;
  • 按回车确认;
  • Ctrl + X 退出。

3. 启动服务

/docker/compose-nginx 目录下执行:

docker compose up -d

查看容器:

docker ps

访问:

http://服务器IP:8080

如果页面正常显示,说明 Docker Compose 部署成功。


4. 停止服务

docker compose down

如果只是重启:

docker compose restart

查看日志:

docker compose logs

实时查看日志:

docker compose logs -f

十一、配置 Docker 镜像加速

在国内服务器上拉取 Docker Hub 镜像时,可能会出现速度慢或下载失败的问题。这时可以配置镜像加速器。

创建 Docker 配置目录:

mkdir -p /etc/docker

编辑配置文件:

nano /etc/docker/daemon.json

写入类似内容:

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.m.daocloud.io"
  ]
}

保存后重启 Docker:

systemctl daemon-reload
systemctl restart docker

查看是否生效:

docker info

在输出内容中找到 Registry Mirrors,如果显示了镜像地址,说明配置成功。

提醒:镜像加速地址可能会随时间变化,如果不可用,可以更换为云服务商提供的最新地址。


十二、普通用户使用 Docker

默认情况下,Docker 命令通常需要 root 权限。如果你希望普通用户也能使用 Docker,可以将用户加入 docker 用户组。

假设用户名是 debian

usermod -aG docker debian

然后退出 SSH,重新登录。

测试:

docker ps

如果不再提示权限不足,说明配置成功。

注意:加入 docker 组的用户几乎等同于拥有 root 权限,因此不要随意给不可信用户添加该权限。


十三、Docker 数据持久化

使用 Docker 时,数据持久化非常重要。

假设你部署 MySQL,如果不挂载数据目录,容器删除后数据库数据可能会丢失。因此推荐使用数据卷或宿主机目录挂载。

1. 使用宿主机目录挂载

示例:

docker run -d \
--name mysql-demo \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /docker/mysql/data:/var/lib/mysql \
mysql:8.0

这里:

-v /docker/mysql/data:/var/lib/mysql

表示将 MySQL 数据保存到宿主机 /docker/mysql/data 目录。

即使容器删除,只要这个目录不删除,数据仍然存在。


2. 使用 Docker Volume

创建数据卷:

docker volume create mysql-data

运行容器时挂载:

docker run -d \
--name mysql-volume-demo \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql-data:/var/lib/mysql \
mysql:8.0

查看数据卷:

docker volume ls

查看数据卷详情:

docker volume inspect mysql-data

十四、Docker 网络基础

Docker 容器之间可以通过网络通信。默认情况下,Docker 会创建一个 bridge 网络。

查看网络:

docker network ls

创建自定义网络:

docker network create mynet

运行容器时指定网络:

docker run -d --name nginx1 --network mynet nginx

如果多个容器在同一个自定义网络中,它们可以通过容器名互相访问。

例如:

docker run -d --name redis --network mynet redis

其他同网络容器可以通过 redis:6379 访问 Redis 服务。


十五、部署 MySQL 示例

下面演示一个 MySQL 容器部署示例。

1. 创建目录

mkdir -p /docker/mysql/data

2. 启动 MySQL

docker run -d \
--name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=StrongPassword123 \
-v /docker/mysql/data:/var/lib/mysql \
--restart=always \
mysql:8.0

3. 查看运行状态

docker ps

查看日志:

docker logs mysql8

进入 MySQL:

docker exec -it mysql8 mysql -uroot -p

输入密码:

StrongPassword123

进入后可以执行:

SHOW DATABASES;

退出 MySQL:

exit;

安全建议:生产环境不要使用简单密码,也不要随意将数据库端口暴露到公网。


十六、部署 Redis 示例

1. 创建目录

mkdir -p /docker/redis/data

2. 启动 Redis

docker run -d \
--name redis \
-p 6379:6379 \
-v /docker/redis/data:/data \
--restart=always \
redis:latest \
redis-server --appendonly yes

参数说明:

  • --appendonly yes:开启 AOF 持久化;
  • /data:Redis 数据目录;
  • --restart=always:开机自动启动。

查看日志:

docker logs redis

进入 Redis:

docker exec -it redis redis-cli

测试:

ping

如果返回:

PONG

说明 Redis 正常运行。


十七、防火墙与端口开放

如果你部署的服务无法访问,除了检查 Docker 容器是否运行,还需要检查服务器防火墙和云服务商安全组。

1. 查看端口监听

ss -tulnp

2. Debian 使用 UFW 放行端口

如果安装了 UFW,可以执行:

ufw allow 80
ufw allow 443
ufw allow 8080

查看状态:

ufw status

3. 云服务器安全组

如果你使用的是阿里云、腾讯云、华为云、AWS 等云服务器,还需要到控制台安全组中放行对应端口。

例如:

  • HTTP:80
  • HTTPS:443
  • MySQL:3306
  • Redis:6379
  • 自定义网站端口:8080

对数据库、Redis 等服务,不建议直接开放公网端口,除非你已经做好 IP 白名单、强密码和访问控制。


十八、Docker 日常维护

Docker 使用一段时间后,可能会产生无用镜像、停止的容器、构建缓存等,占用磁盘空间。

1. 查看磁盘占用

docker system df

2. 清理停止的容器

docker container prune

3. 清理无用镜像

docker image prune

清理所有未使用镜像:

docker image prune -a

4. 清理无用数据卷

docker volume prune

执行前请确认数据卷不再使用,否则可能删除重要数据。

5. 一键清理无用资源

docker system prune

清理更彻底:

docker system prune -a

注意:清理命令有风险,生产环境执行前一定要确认不会删除重要镜像、容器或数据。


十九、常见问题排查

1. Docker 启动失败怎么办?

查看状态:

systemctl status docker

查看详细日志:

journalctl -u docker -xe

常见原因包括:

  • /etc/docker/daemon.json JSON 格式错误;
  • 软件源安装不完整;
  • 系统内核或依赖异常。

如果修改过 daemon.json,可以使用以下命令检查 JSON 格式:

cat /etc/docker/daemon.json

确保逗号、引号、括号没有错误。


2. 容器启动后访问不了?

可以按以下顺序排查:

  1. 查看容器是否运行:
docker ps
  1. 查看端口是否映射:
docker port 容器名
  1. 查看容器日志:
docker logs 容器名
  1. 查看服务器端口监听:
ss -tulnp
  1. 检查防火墙和云服务器安全组。

3. 拉取镜像失败怎么办?

可以尝试:

docker pull nginx

如果速度很慢或失败:

  • 检查服务器网络;
  • 配置镜像加速;
  • 更换镜像标签;
  • 使用云服务商提供的镜像源。

4. 端口被占用怎么办?

如果启动容器时报错类似:

Bind for 0.0.0.0:80 failed: port is already allocated

说明服务器的 80 端口已经被占用。

查看占用进程:

ss -tulnp | grep :80

解决方法:

  • 停止占用端口的服务;
  • 或修改 Docker 端口映射,例如使用 8080:80

二十、Docker 安全建议

Docker 部署方便,但也需要注意安全。

1. 不要随便使用未知镜像

尽量使用官方镜像或可信镜像。例如:

nginx
mysql
redis
postgres
ubuntu
debian

如果使用第三方镜像,需要查看维护情况、文档说明和用户评价。

2. 不要使用弱密码

尤其是数据库、管理面板、后台系统等服务。密码应包含:

  • 大写字母;
  • 小写字母;
  • 数字;
  • 特殊符号;
  • 足够长度。

3. 不要随意暴露数据库端口

MySQL、Redis、PostgreSQL 等服务尽量只允许内网访问。如果必须公网访问,应限制 IP 白名单。

4. 定期更新镜像

可以定期执行:

docker pull 镜像名
docker compose up -d

更新服务前建议备份数据。

5. 做好数据备份

Docker 容器可以随时重建,但数据不能丢。重要目录如:

  • 网站文件;
  • 数据库数据;
  • 配置文件;
  • 上传附件;

都应该定期备份。


二十一、推荐的 Docker 部署目录结构

为了方便管理,建议统一把 Docker 服务放在 /docker 目录下,例如:

/docker
├── nginx
│   ├── html
│   └── conf
├── mysql
│   └── data
├── redis
│   └── data
└── app
    ├── compose.yml
    └── data

这样做的好处是:

  • 服务目录清晰;
  • 数据方便备份;
  • 配置方便迁移;
  • 排查问题更容易。

如果使用 Docker Compose,每个项目可以单独放一个目录:

/docker/project-name/compose.yml

进入对应目录后执行:

docker compose up -d

即可启动服务。


二十二、总结

本文以 Debian 系统为例,完整讲解了 Docker 的安装、启动、验证、基础概念、常用命令、Docker Compose 使用方法,以及 Nginx、MySQL、Redis 的实际部署示例。

对于零基础用户来说,建议按照以下学习路线掌握 Docker:

  1. 先学会安装 Docker;
  2. 理解镜像、容器、数据卷、端口映射;
  3. 熟悉 docker rundocker psdocker logsdocker stop 等常用命令;
  4. 学会使用目录挂载保存数据;
  5. 学会使用 Docker Compose 管理服务;
  6. 注意防火墙、安全组和数据备份。

Docker 的优势在于部署快、迁移方便、环境一致。只要掌握基本命令和配置思路,就可以用它部署大多数常见服务。对于新手来说,不必一开始就追求复杂架构,先从 Nginx、MySQL、Redis 这些基础服务练习,逐步积累经验,就能熟练使用 Docker 管理自己的服务器。

目录结构
全文