为 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 应用程序开发环境,使开发和部署更加顺畅。