如何为 Web 应用设置 Docker

为 Web 应用设置 Docker 涉及将您的应用程序及其依赖项容器化,确保开发、测试和生产环境的一致性。以下是涵盖基本组件的通用指南:

Beginner

为 Web 应用设置 Docker 涉及将您的应用程序及其依赖项容器化,确保开发、测试和生产环境的一致性。以下是涵盖基本组件的通用指南:

1. 安装 Docker

首先,确保您的系统上已安装 Docker。您可以从官方 Docker 网站下载适用于您操作系统的 Docker Desktop。对于 Linux 上的命令行工具,请使用您发行版的包管理器(例如,Ubuntu 上的 sudo apt install docker.io)。

2. 创建 Dockerfile

Dockerfile 是一个包含 Docker 构建镜像指令的文本文件。它定义了环境、依赖项以及如何运行您的应用程序。

Node.js 应用程序的示例 Dockerfile

# 使用官方 Node.js 运行时作为父镜像
FROM node:18-alpine

# 在容器中设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json(或 yarn.lock)
COPY package*.json ./

# 安装应用程序依赖项
RUN npm install

# 复制您的应用程序代码的其余部分
COPY . .

# 暴露您的应用程序监听的端口
EXPOSE 3000

# 定义运行应用程序的命令
CMD [ "npm", "start" ]

常见 Dockerfile 指令的解释: * FROM <image>:指定要构建的基础镜像。 * WORKDIR /app:设置容器内的当前工作目录。 * COPY <src> <dest>:将文件和目录从主机复制到容器。 * RUN <command>:在镜像构建过程中执行命令(例如,安装依赖项)。 * EXPOSE <port>:通知 Docker 容器在运行时监听此端口。 * CMD ["executable", "param1", "param2"]:指定容器启动时要运行的默认命令。

3. 构建您的 Docker 镜像

在终端中导航到您的项目根目录(Dockerfile 所在的位置)并运行构建命令:

docker build -t your-app-name .
  • docker build:创建 Docker 镜像的命令。
  • -t your-app-name:为镜像打上名称标签(例如 my-nodejs-app)。
  • .:指定构建上下文(当前目录),告诉 Docker 在哪里查找 Dockerfile 和应用程序文件。

4. 运行您的 Docker 容器

镜像构建完成后,您可以从中创建并运行一个容器。

docker run -p 80:3000 your-app-name
  • docker run:启动容器的命令。
  • -p 80:3000:将容器内的端口 3000(您的应用程序监听的端口)映射到主机上的端口 80。这允许您通过 http://localhost 访问您的应用程序。
  • your-app-name:要运行的 Docker 镜像的名称。

您的 Web 应用程序现在将在 Docker 容器中运行,可以通过浏览器访问。

5. 为多服务应用程序使用 Docker Compose

对于涉及多个服务的应用程序(例如,Web 应用和数据库),Docker Compose 非常有价值。它使用 docker-compose.yml 文件来定义和管理所有服务。

具有 PostgreSQL 数据库的 Node.js 应用的示例 docker-compose.yml

version: '3.8' # 指定 Compose 文件格式版本

services:
  web:
    build: . # 从当前目录的 Dockerfile 构建镜像
    ports:
      - "3000:3000"
    volumes:
      - .:/app # 为实时更新(开发)挂载本地代码
    environment:
      DATABASE_URL: postgresql://user:password@db:5432/mydatabase
    depends_on:
      - db # 确保数据库在 web 服务之前启动
    networks:
      - app-network

  db:
    image: postgres:14-alpine # 使用预构建的 PostgreSQL 镜像
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data # 持久化数据库数据
    networks:
      - app-network

volumes:
  db_data: # 定义命名卷

networks:
  app-network: # 定义自定义网络

要使用 Docker Compose,请将 docker-compose.yml 文件放在项目根目录中,然后运行:

docker compose up -d --build
  • docker compose up:构建镜像(如果使用了 --build)并启动服务。
  • -d:以分离模式(在后台)运行容器。

要停止并移除容器、网络和卷:

docker compose down

此设置提供了可复现且隔离的 Web 应用程序开发环境,使开发和部署更加顺畅。