1. 准备Debian基础环境
首先确保Debian系统为最新状态,更新软件包列表并升级已安装的包:
sudo apt update && sudo apt upgrade -y
安装必要的工具(用于后续Docker源配置):
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
2. 安装Docker引擎
添加Docker官方GPG密钥和APT源(替换$(lsb_release -cs)为Debian版本,如bookworm):
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 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组件:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
验证Docker是否正常运行:
sudo docker run hello-world
3. 安装并配置Nginx(反向代理)
安装Nginx:
sudo apt install -y nginx
启动Nginx并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
创建Web应用专属Nginx配置文件(如/etc/nginx/sites-available/webapp),内容如下(替换your_domain为域名,webapp_container为后续Docker容器名):
server {
listen 80;
server_name your_domain;
location / {
proxy_pass http://webapp_container:8080; # 转发到Docker容器端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用配置并重载Nginx:
sudo ln -s /etc/nginx/sites-available/webapp /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx
4. 编写Dockerfile构建Web应用镜像
进入Web应用根目录(如Python Flask应用目录),创建Dockerfile(以Flask为例):
# 使用轻量级Python基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露应用端口
EXPOSE 8080
# 启动应用
CMD ["python", "app.py"]
若为静态网站(如HTML/CSS/JS),可使用Nginx镜像简化流程(Dockerfile内容见步骤2的示例)。
5. 构建并运行Docker容器
在应用根目录下构建镜像(-t指定镜像名,.表示当前目录为构建上下文):
sudo docker build -t webapp .
运行容器(-d后台模式,-p端口映射,--name容器名,需与Nginx配置中的webapp_container一致):
sudo docker run -d --name webapp_container -p 8080:8080 webapp
验证容器是否运行:
sudo docker ps
6. 验证部署
在浏览器中访问http://your_domain(若未配置域名,可直接用服务器IP),应能看到Web应用页面。
7. 可选优化:使用Docker Compose管理多容器
若应用包含多个服务(如Web应用+数据库),可使用docker-compose.yml简化管理。示例(Python Flask+MySQL):
version: '3'
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- db
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: webapp_db
volumes:
- db_data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
db_data:
运行命令启动服务:
sudo docker-compose up -d
注意事项
--memory、--cpu)。volumes挂载数据目录(如数据库文件),避免容器重启后数据丢失。ufw)允许HTTP(80)/HTTPS(443)端口:sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable