Docker 容器化个人博客部署环境搭建指南:从基础工具到项目路径配置
目录
2.1 NVM(Node 版本管理)容器化:支撑前端 Vue3 环境
步骤 2:修改 Maven 配置文件(settings.xml)
在现代开发与部署流程中,Docker 容器化技术凭借其环境一致性、可移植性和轻量级的优势,成为个人项目部署的首选方案。本文将详细记录个人博客部署环境的搭建全过程,涵盖 NVM(Node 版本管理)、Maven、JDK 等基础工具的 Docker 化配置,以及前后端项目路径规划,为后续博客项目的开发与部署打下坚实基础。
一、环境搭建前的核心思路
个人博客通常包含前端(如 Vue3) 和后端(如 Spring Boot) 两个部分,需依赖 Node.js、Maven、JDK 等工具。为避免环境冲突并简化部署流程,我们采用以下策略:
- 所有工具(NVM、JDK)通过 Docker 镜像构建,确保环境隔离;
- 关键数据(如 Maven 仓库、工具安装目录)通过 Docker Volume 挂载到宿主机,实现数据持久化;
- 统一规划前后端项目路径,便于后续 Jenkins 自动化部署(若后续引入 CI/CD)。
本文基于 Linux 环境(CentOS/Ubuntu 通用),所有操作均在/root/docker/volumes目录下进行,确保路径统一可追溯。
二、基础工具容器化:从 Dockerfile 到镜像构建
2.1 NVM(Node 版本管理)容器化:支撑前端 Vue3 环境
NVM 用于管理多个 Node.js 版本,是前端项目(如 Vue3)开发的必备工具。我们通过自定义 Dockerfile 构建 NVM 镜像,避免直接在宿主机安装导致的版本冲突。
步骤 1:创建 NVM 工作目录与 Dockerfile
首先在宿主机创建 NVM 相关目录,用于存储 Dockerfile 和挂载 Volume:
# 创建NVM工具安装目录(后续Jenkins可直接引用此路径)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.nvmInstallation/nvm/v0.40.1
# 进入目录
cd /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.nvmInstallation/nvm/v0.40.1
步骤 2:编写 NVM 的 Dockerfile
Dockerfile 采用ubuntu:latest作为基础镜像,集成 wget/curl 工具,并通过腾讯云 CDN 加速 NVM 安装(解决 GitHub 访问慢问题):
# 创建自定义Dockerfile
vim custom-nvm-Dockerfile
dockerfile
# 构建阶段:基于Ubuntu最新版
FROM ubuntu:latest AS builder
LABEL maintainer="author <dadap>" \
version="1.0" \
description="基于Ubuntu的NVM镜像"
# 安装基础工具(wget用于下载,curl备用)
RUN apt-get update && apt-get install -y \
wget \
curl
# 设置NVM安装目录(与宿主机Volume路径对应)
WORKDIR /usr/local/nvm/v0.40.1
# 切换bash终端(NVM安装依赖bash)
SHELL ["/bin/bash", "-c"]
# 安装NVM(v0.40.1版本,使用腾讯云CDN加速)
# 可选镜像:Gitee镜像(https://gitee.com/mirrors/nvm/raw/v0.40.1/install.sh)
RUN wget -qO- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.1/install.sh | bash && \
# 加载NVM环境变量
source ~/.bashrc
# 挂载日志目录(可选,便于排查安装问题)
VOLUME ["/var/log/nvm"]
# 保持容器运行(tail -f避免容器启动后退出)
CMD ["tail", "-f", "/dev/null"]
步骤 3:构建 NVM 镜像并启动容器
执行以下命令,构建镜像、启动容器,并验证容器状态:
# 构建NVM镜像(标签:custom_nvm:0.40.1)
docker build -t custom_nvm:0.40.1 -f ./custom-nvm-Dockerfile . && \
# 启动容器(--restart always确保开机自启,-v挂载宿主机目录到容器)
docker run --name custom_nvm_0.40.1 --restart always -p 80:3000 \
-v /root/docker/volumes/nvm/usr/local/nvm/v0.40.1:/usr/local/nvm/v0.40.1 \
-d custom_nvm:0.40.1 && \
# 查看所有容器(确认custom_nvm_0.40.1状态为Up)
docker ps -a
步骤 4:在容器内安装 Node.js 与 Vue CLI
进入 NVM 容器,安装前端所需的 Node.js 18.19.0(Vue3 推荐版本)和 Vue CLI:
# 进入NVM容器终端
docker exec -it custom_nvm_0.40.1 /bin/bash
# 容器内执行:
#安装Node.js 18.19.0并验证版本
nvm install 18.19.0 && node -v && npm -v
# 全局安装Vue CLI(前端项目构建工具)
npm install -g @vue/cli
# 验证全局安装的工具(确认@vue/cli存在)
npm list -g --depth 0
至此,前端所需的 Node.js 和 Vue CLI 环境已通过 Docker 容器化完成,后续前端项目可直接在该容器内构建。
2.2 Maven 环境配置:支撑后端项目构建
Maven 用于管理 Java 后端项目的依赖和构建流程,我们采用 “宿主机下载 + Volume 挂载” 的方式,避免重复下载依赖,同时便于后续 Jenkins 集成。
步骤 1:创建 Maven 目录与下载安装包
# 创建Maven工具安装目录(Jenkins后续可引用)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation
# 创建Maven本地仓库目录(持久化存储依赖,避免重复下载)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_repos
# 进入Maven安装目录
cd /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation
# 下载Maven 3.8.1(稳定版,从Apache官方镜像下载)
wget https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
# 解压Maven(--strip-components 1:解压到当前目录,不创建额外子目录)
tar -zxf apache-maven-3.8.1-bin.tar.gz --strip-components 1
# 删除压缩包(节省空间)
rm -f apache-maven-3.8.1-bin.tar.gz
步骤 2:修改 Maven 配置文件(settings.xml)
关键配置:指定自定义本地仓库路径(与宿主机 Volume 对应),后续可追加阿里云镜像(加速依赖下载):
# 编辑Maven配置文件
vim /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/conf/settings.xml
在<settings>标签内添加本地仓库配置:
<!-- 自定义本地仓库路径(与宿主机创建的Maven_repos目录一致) -->
<localRepository>/root/docker/volumes/var/jenkins_home/tools/hudson.tasks.Maven_repos</localRepository>
可选优化:添加阿里云 Maven 镜像(解决中央仓库访问慢问题),在<mirrors>标签内添加:
<mirrors>
<!-- 阿里云公共仓库(主镜像,优先使用) -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<!-- 华为云镜像(作为中央仓库的备用镜像) -->
<mirror>
<id>huaweicloud</id>
<mirrorOf>central</mirrorOf>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>
<!-- 网易163镜像(使用HTTPS协议避免被拦截) -->
<mirror>
<id>nexus-163</id>
<mirrorOf>central</mirrorOf>
<name>Nexus 163</name>
<url>https://mirrors.163.com/maven/repository/maven-public/</url>
</mirror>
<!-- 腾讯云镜像(使用HTTPS协议避免被拦截) -->
<mirror>
<id>nexus-tencentyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus tencentyun</name>
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
<!-- 移除默认HTTP拦截器,或保持但确保所有镜像使用HTTPS -->
<!--
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
-->
</mirrors>
2.3 JDK 11 容器化:支撑 Java 后端运行
Java 后端项目(如 Spring Boot)依赖 JDK,我们通过 Dockerfile 构建 JDK 11 镜像,确保后端环境一致性。
步骤 1:创建 JDK 目录与下载 JDK 安装包
# 创建JDK安装目录(Jenkins后续可引用)
mkdir -p /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.JAVA_JDKInstallation/jdk-11/
cd /root/docker/volumes/var/jenkins_home/tools/hudson.tasks.JAVA_JDKInstallation/jdk-11
下载 JDK 11 压缩包(推荐使用华为云镜像,避免 Oracle 账号登录):
- 华为云 OpenJDK 镜像:Index of openjdk-local
https://mirrors.huaweicloud.com/openjdk/ - 官方OracleJDK
https://www.oracle.com/java/technologies/downloads/ - 选择版本:
jdk-11.0.28_linux-x64_bin.tar.gz(根据实际需求调整版本)
将下载的压缩包上传到当前目录(/root/docker/volumes/var/jenkins_home/tools/hudson.tasks.JAVA_JDKInstallation/jdk-11)。
步骤 2:编写 JDK 的 Dockerfile
基于 CentOS 7.9(稳定版)构建,配置 JDK 环境变量和时区:
# 创建Dockerfile
vim Dockerfile
Dockerfile 内容:
# 基础镜像:CentOS 7.9(长期支持版,兼容性好)
FROM centos:7.9.2009
LABEL maintainer="author <dadap>" \
version="1.0" \
description="基于CentOS的JDK8镜像"
# 在容器内创建JDK安装目录
RUN mkdir /usr/local/java
# 将宿主机的JDK压缩包复制到容器并自动解压(需与实际压缩包名一致)
ADD ./jdk-11.0.28_linux-x64_bin.tar.gz /usr/local/java/
# 设置时区为上海(避免日志时间异常)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 配置JDK环境变量(需与解压后的JDK目录名一致)
ENV JAVA_HOME=/usr/local/java/jdk-11.0.28
ENV PATH $JAVA_HOME/bin:$PATH
# 挂载临时目录(Java程序常用/tmp存储临时文件)
VOLUME /tmp
# 保持容器运行(可选,若仅用于提供JDK环境,可省略此步)
CMD ["tail", "-f", "/dev/null"]
步骤 3:构建 JDK 镜像
# 构建JDK 11镜像(标签:centos-jdk:11)
docker build -t centos-jdk:11 -f ./Dockerfile .
# 验证镜像(确认centos-jdk:11存在)
docker images | grep centos-jdk
三、云端项目路径规划:统一前后端目录结构
为便于后续项目部署(如 Jenkins 拉取代码、构建产物输出),我们在宿主机规划统一的前后端项目根路径,所有路径均基于/root/docker/volumes(与前文工具目录统一)。
3.1 前端项目路径(Vue3)
前端项目(如 Vue3 博客前台 / 后台)存储在 NVM 容器挂载的 Volume 目录下,便于直接使用容器内的 Node.js 环境构建:
# 创建前端项目根路径(Vue3项目)
mkdir -p /root/docker/volumes/nvm/usr/local/nvm/v0.40.1/personal_blog/Vue3
后续操作:将 Vue3 项目代码拉取到该目录,进入 NVM 容器后执行npm install安装依赖,npm run build构建静态文件。
3.2 后端项目路径(API 服务)
后端项目(如 Spring Boot API 服务)存储在独立目录,便于使用 Maven 构建和 JDK 容器运行:
# 创建后端项目根路径(API服务)
mkdir -p /root/docker/volumes/blog/APIServer/personal_blog
后续操作:将后端代码拉取到该目录,通过 Maven(前文配置的宿主机 Maven)执行mvn clean package构建 JAR 包,再通过centos-jdk:11镜像运行 JAR 包。
四、总结与后续展望
本文完成了个人博客部署环境的核心搭建:
- 容器化工具:NVM(Node.js 18.19.0 + Vue CLI)、JDK 11 通过 Docker 镜像构建,实现环境隔离;
- 持久化配置:Maven 仓库、工具安装目录通过 Volume 挂载,避免数据丢失和重复下载;
- 统一路径规划:前后端项目目录结构化,为后续自动化部署奠定基础。
后续可扩展方向:
- 引入 Jenkins:基于本文配置的工具路径,搭建 Jenkins 实现代码拉取、自动构建(前端 npm build + 后端 mvn package);
- 部署 Nginx:通过 Docker 运行 Nginx 容器,代理前端静态文件和后端 API 服务,实现端口统一和反向代理;
- 数据库容器化:添加 MySQL/MongoDB Docker 容器,存储博客数据,并通过 Volume 挂载数据目录。
通过容器化技术,后续博客项目的部署将更高效、可移植,无需担心 “在我电脑上能运行” 的环境问题。
更多推荐
所有评论(0)