当前位置:  首页>> 技术小册>> Docker入门与实战

第二十一章:实战一:构建基于Docker的Web应用

在本章中,我们将通过一系列实战步骤,深入探索如何使用Docker来构建并部署一个基本的Web应用程序。我们将从环境准备开始,逐步搭建起一个包含前端、后端及数据库的完整Web服务,并学习如何将它们封装进Docker容器中,实现快速部署与扩展。通过本章的学习,你将掌握Docker在Web应用开发、测试及部署中的核心应用。

21.1 环境准备

21.1.1 安装Docker

首先,确保你的开发环境中已经安装了Docker。Docker支持多种操作系统,包括Windows、macOS和Linux。访问Docker官网下载对应版本的Docker Desktop安装程序,并按照官方指导完成安装。安装完成后,通过命令行或终端执行docker --version来验证Docker是否成功安装。

21.1.2 配置Docker镜像仓库(可选)

如果你打算将构建的Docker镜像推送到远程仓库(如Docker Hub、阿里云Docker镜像服务等),需要提前注册账户并配置访问权限。这有助于镜像的分享、备份及自动化部署。

21.2 设计Web应用架构

在开始编码之前,先规划你的Web应用架构。假设我们要构建的是一个简单的博客系统,它可能包含以下几个部分:

  • 前端:使用HTML/CSS/JavaScript构建用户界面,可能通过React、Vue等现代前端框架实现。
  • 后端:使用Node.js配合Express框架处理业务逻辑,与数据库交互。
  • 数据库:使用MySQL或MongoDB等数据库存储数据。

21.3 编写Web应用代码

21.3.1 创建项目目录结构

  1. myblog/
  2. ├── frontend/ # 前端代码
  3. ├── src/
  4. ├── public/
  5. ├── package.json
  6. └── Dockerfile # 前端Dockerfile
  7. ├── backend/ # 后端代码
  8. ├── src/
  9. ├── package.json
  10. └── Dockerfile # 后端Dockerfile
  11. ├── db/ # 数据库配置文件及初始化脚本
  12. ├── init.sql
  13. └── Dockerfile # 数据库Dockerfile
  14. └── docker-compose.yml # Docker Compose配置文件

21.3.2 编写前端代码

使用Create React App快速搭建前端项目框架,并编写基本的页面和路由。

21.3.3 编写后端代码

使用Node.js和Express创建RESTful API,用于处理用户请求并与数据库交互。

21.3.4 配置数据库

编写MySQL或MongoDB的初始化脚本,包括创建数据库、表或集合,以及插入初始数据。

21.4 创建Dockerfile

为前端、后端和数据库分别编写Dockerfile,以定义如何构建各自的Docker镜像。

前端Dockerfile示例

  1. # 使用官方Node.js镜像作为基础镜像
  2. FROM node:14
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 将当前目录下的文件复制到容器内的/app目录下
  6. COPY . .
  7. # 安装依赖
  8. RUN npm install
  9. # 打包构建
  10. RUN npm run build
  11. # 设置容器启动时执行的命令
  12. CMD ["npm", "start"]
  13. # 注意:实际生产环境中前端构建后通常不需要Node.js运行,这里仅为示例

后端Dockerfile示例(简化版,不包含前端构建过程):

  1. FROM node:14
  2. WORKDIR /app
  3. COPY . .
  4. RUN npm install
  5. EXPOSE 3000
  6. CMD ["node", "src/index.js"]

数据库Dockerfile示例(以MySQL为例):

  1. FROM mysql:5.7
  2. # 设置环境变量,如数据库名、用户和密码
  3. ENV MYSQL_ROOT_PASSWORD=my-secret-pw
  4. ENV MYSQL_DATABASE=myblog
  5. ENV MYSQL_USER=user
  6. ENV MYSQL_PASSWORD=password
  7. # 复制初始化脚本到容器内
  8. COPY db/init.sql /docker-entrypoint-initdb.d/

21.5 使用Docker Compose编排服务

编写docker-compose.yml文件,以定义并编排前端、后端和数据库服务。Docker Compose允许你使用YAML文件来配置多个容器应用的服务、网络和卷。

  1. version: '3'
  2. services:
  3. frontend:
  4. build: ./frontend
  5. ports:
  6. - "3001:3000"
  7. depends_on:
  8. - backend
  9. backend:
  10. build: ./backend
  11. ports:
  12. - "3000:3000"
  13. depends_on:
  14. - db
  15. environment:
  16. DB_HOST: db
  17. DB_USER: user
  18. DB_PASSWORD: password
  19. DB_NAME: myblog
  20. db:
  21. build: ./db
  22. ports:
  23. - "3306:3306"
  24. environment:
  25. MYSQL_ROOT_PASSWORD: my-secret-pw
  26. MYSQL_DATABASE: myblog
  27. MYSQL_USER: user
  28. MYSQL_PASSWORD: password

21.6 构建与运行Web应用

在项目根目录下执行以下命令,使用Docker Compose构建并启动所有服务:

  1. docker-compose up --build

该命令会依次构建前端、后端和数据库的Docker镜像,并根据docker-compose.yml中的配置启动它们。服务启动后,你可以通过浏览器访问前端页面(通常是http://localhost:3001,取决于你的端口映射设置),测试Web应用的各项功能。

21.7 调试与优化

  • 日志查看:使用docker-compose logs命令查看各个服务的日志,帮助定位问题。
  • 性能优化:根据应用的实际运行情况,可能需要调整Docker的内存、CPU等资源限制,或者优化应用代码和数据库查询。
  • 环境变量管理:通过环境变量管理不同环境下的配置,如开发、测试和生产环境。

21.8 部署到生产环境

在本地测试无误后,你可以将构建的Docker镜像推送到远程仓库,并在生产环境中使用Docker Compose或Kubernetes等容器编排工具进行部署。确保生产环境的安全性和稳定性,包括使用HTTPS、配置适当的防火墙和安全组规则等。

通过以上步骤,我们成功构建并部署了一个基于Docker的Web应用。Docker不仅简化了应用的构建、测试和部署流程,还提高了应用的可移植性和可扩展性。希望本章内容能够帮助你更好地理解和应用Docker技术。


该分类下的相关小册推荐: