阅读量:1
在 Debian 上使用 Docker 部署应用的完整流程
一 安装与准备
- 更新系统并安装依赖
- 执行:
sudo apt update && sudo apt upgrade -y - 安装:
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
- 执行:
- 添加 Docker 官方仓库与密钥(推荐方式,适用于 Debian 12)
- 导入密钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - 写入源:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 导入密钥:
- 安装 Docker 引擎与 CLI
- 执行:
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
- 执行:
- 启动并设置开机自启
- 执行:
sudo systemctl start docker && sudo systemctl enable docker
- 执行:
- 验证安装
- 执行:
sudo docker version或sudo docker run --rm hello-world
- 执行:
- 可选 安装 Docker Compose
- 执行:
sudo apt install -y docker-compose
- 执行:
- 说明
- 某些教程使用
apt install docker.io(Debian 仓库打包版本),功能可用;若需最新特性与更新节奏,优先使用上面的官方仓库方式。
- 某些教程使用
二 构建镜像与运行容器
- 示例一 静态站点或 Nginx
- Dockerfile
FROM nginx:stable-alpine COPY . /usr/share/nginx/html EXPOSE 80 CMD ["nginx","-g","daemon off;"] - 构建与运行
- 构建:
docker build -t my-nginx . - 运行:
docker run -d --name web -p 80:80 my-nginx
- 构建:
- Dockerfile
- 示例二 Python Flask
- 目录结构
. ├── app.py ├── requirements.txt └── Dockerfile - app.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, Docker on Debian" if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) - requirements.txt
Flask==2.3.* gunicorn==21.* - Dockerfile
FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 5000 CMD ["gunicorn","-b","0.0.0.0:5000","app:app"] - 构建与运行
- 构建:
docker build -t my-flask . - 运行:
docker run -d --name flask -p 5000:5000 my-flask
- 构建:
- 目录结构
- 常用运行参数
- 端口映射:
-p 主机端口:容器端口 - 环境变量:
-e KEY=VALUE - 挂载数据卷:
-v 主机路径:容器路径 - 重启策略:
--restart=always - 后台运行:
-d
- 端口映射:
三 多容器应用与 Compose
- 示例 docker-compose.yml(Flask + PostgreSQL)
version: "3.8" services: web: build: . ports: - "5000:5000" environment: - DATABASE_URL=postgresql://postgres:example@db:5432/appdb depends_on: - db db: image: postgres:15-alpine environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: example POSTGRES_DB: appdb volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata: - 常用命令
- 启动:
docker-compose up -d - 查看日志:
docker-compose logs -f - 停止:
docker-compose down - 生产建议:使用镜像仓库管理版本,执行
docker tag与docker push推送镜像,线上docker-compose pull && docker-compose up -d --force-recreate滚动更新。
- 启动:
四 网络与反向代理
- 使用 Nginx 作为反向代理到容器
- 安装 Nginx:
sudo apt install -y nginx - 站点配置
/etc/nginx/sites-available/app.confserver { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 启用站点并热重载
- 启用:
sudo ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/ - 校验:
sudo nginx -t - 重载:
sudo systemctl reload nginx
- 启用:
- 安装 Nginx:
- 防火墙放行
- UFW:
sudo ufw allow 80,443/tcp
- UFW:
- DNS 解析
- 添加 A 记录:将域名指向服务器 IPv4 地址,完成后可通过域名访问应用。
五 生产实践与安全建议
- 镜像与构建
- 使用多阶段构建与轻量基础镜像(如 alpine/slim)减小体积
- 为镜像打语义化标签(如
app:1.2.3),便于回滚与审计
- 数据与持久化
- 数据库等状态使用 Docker Volume 或外部存储,避免容器重建导致数据丢失
- 配置与密钥
- 通过 环境变量 或 Docker Secrets 管理敏感信息,避免硬编码
- 运行与编排
- 设置重启策略
--restart=always,保障高可用 - 使用 Docker Compose 管理服务依赖与网络,生产可用
docker-compose up -d后台运行
- 设置重启策略
- 监控与日志
- 集中收集容器日志,结合 Prometheus + Grafana 做资源与应用监控
- 安全加固
- 定期更新 Docker 与镜像,以修复漏洞
- 以非 root 用户运行容器内进程,最小化容器权限。
以上就是关于“Debian中如何使用Docker进行应用部署”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm