debian

Debian Docker如何部署Web应用

小樊
43
2025-11-01 00:42:00
栏目: 智能运维

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

注意事项

0
看了该问题的人还看了