在 Debian 上使用 Docker 部署应用的完整流程
一 安装与准备
sudo apt update && sudo apt upgrade -ysudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-releasecurl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "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/nullsudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.iosudo systemctl start docker && sudo systemctl enable dockersudo docker version 或 sudo docker run --rm hello-worldsudo apt install -y docker-composeapt install docker.io(Debian 仓库打包版本),功能可用;若需最新特性与更新节奏,优先使用上面的官方仓库方式。二 构建镜像与运行容器
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.
├── app.py
├── requirements.txt
└── Dockerfile
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)
Flask==2.3.*
gunicorn==21.*
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
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 -ddocker-compose logs -fdocker-compose downdocker tag 与 docker push 推送镜像,线上 docker-compose pull && docker-compose up -d --force-recreate 滚动更新。四 网络与反向代理
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 -tsudo systemctl reload nginxsudo ufw allow 80,443/tcp五 生产实践与安全建议
app:1.2.3),便于回滚与审计--restart=always,保障高可用docker-compose up -d 后台运行