5. 实战案例
在本章节中,我们将探讨利用Docker技术在实际项目开发和部署中的应用。Docker化是一种将应用程序和其依赖打包进容器的过程,这使得应用更易于分发、管理和运行。
实际项目的 Docker 化
Web 应用程序 Docker 化
Web 应用程序 Docker 化
概述
使用 Docker 将 Web 应用程序容器化,使应用的各个组成部分(服务器、代码、配置、依赖等)变得易于管理。通过容器化,可以简化应用的部署过程,在不同环境中实现一致性,并快速扩展和恢复服务。
流程
-
Dockerfile 创建:
为 Web 应用编写 Dockerfile 是容器化的第一步,确保应用环境一致。
# 基础镜像选择 FROM node:14 # 创建工作目录 WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json (如果有) COPY package*.json ./ # 安装应用依赖 RUN npm install # 如果你正在生产环境构建时,可以使用下面的命令:RUN npm ci --only=production # 复制应用代码 COPY . . # 暴露应用运行端口 EXPOSE 8080 # 启动应用 CMD ["node", "server.js"]
- 基础镜像:选择合适的基础镜像,这里我们用的是 Node.js 官方镜像。
- 工作目录:设置工作目录来保证容器内文件执行环境的稳定。
- 安装依赖:先复制
package.json
文件,再安装依赖,以优化缓存利用。 - 复制应用代码:将本地代码复制到容器中。
- 端口暴露:为外部访问指定容器内部服务的端口,比如 Node.js 应用默认端口。
- 启动命令:定义启动的默认命令。
-
镜像构建:
使用 Docker CLI 构建你的应用镜像。
docker build -t my-web-app .
- 设置标签
-t
为镜像命名。 - 最后一个参数
.
指向当前目录为构建上下文。
- 设置标签
-
容器运行:
一旦镜像创建成功,可以使用它来启动容器。
docker run -d -p 80:8080 --name my-running-app my-web-app
- -d:以分离模式运行容器,后台执行。
- -p 80:8080:将容器的端口 8080 映射至主机的端口 80。
- –name my-running-app:为容器命名便于管理。
-
配置管理和环境变量:
使用环境变量配置应用有助于环境的适配,可以在
docker run
时通过-e
参数传递环境变量。docker run -d -p 80:8080 --name my-running-app -e NODE_ENV=production my-web-app
- 环境变量管理:通过在启动时传递参数,便于迁移环境变更。
- 外部配置:使用配置文件时,可以考虑使用 Docker Volumes,确保配置外部化。
高级实践
-
多阶段构建:在 Dockerfile 中可以配置多阶段构建,以使用特定环境进行构建和生产环境运行。
-
日志管理:考虑将应用日志配置为输出到标准输出(stdout)和标准错误(stderr),便于集中管理和分析,或者使用容器的日志驱动如 JSON、Syslog 等。
-
安全与合规:
- 使用安全镜像,并定期进行更新和漏洞扫描。</