在内网服务器部署自带 Java 环境 Docker 镜像的完整教程
引言
在开发和部署 Java 应用时,经常遇到内网服务器不通外网,无法安装 Java、MySQL、Redis 和 Nginx 等环境的问题。为了解决这一痛点,我设计了一个基于 Docker 的方案:在有外网的服务器上打包一个自含环境的镜像,传输到内网服务器运行。这样,整个环境都在容器内运行,无需在内网服务器再安装任何东西,数据持久化、端口映射、配置自定义都支持。
这个教程以 x86_64 架构服务器为例(外网服务器 192.168.0.157,内网服务器 192.168.0.129),从构建镜像到部署 Java 服务和静态网站,全过程详解。整个过程经历了架构兼容、网络超时、权限初始化等坑,最终成功上线生产环境。如果你也遇到类似需求,这个教程可以帮你节省大量时间。
前提条件:
-
外网服务器有 Docker 和互联网访问。
-
内网服务器有 Docker,但不通外网。
-
两台服务器能通过 scp 或 U 盘传输文件。
-
Ubuntu 22.04 操作系统(其他类似)。
步骤1:在外网服务器(192.168.0.157)构建镜像
- 准备 Dockerfile
在外网服务器创建目录并编写 Dockerfile:
mkdir ~/java/docker
cd ~/java/docker
nano Dockerfile
粘贴以下内容(Ubuntu 22.04 基础镜像,自带 OpenJDK 17、MySQL 8、Redis 最新、Nginx):
# 基础镜像:Ubuntu 22.04
FROM registry.cn-hangzhou.aliyuncs.com/library/ubuntu:22.04
# 避免交互式安装提示
ENV DEBIAN_FRONTEND=noninteractive
# 安装基础工具
RUN apt-get update && apt-get install -y \
wget \
curl \
gnupg \
software-properties-common \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# 安装 OpenJDK 17(如果你需要其他版本,可改为 11 或 21)
RUN apt-get update && apt-get install -y openjdk-17-jdk \
&& java -version \
&& rm -rf /var/lib/apt/lists/*
# 安装 MySQL 8
RUN apt-get update && apt-get install -y mysql-server \
&& mysql --version \
&& rm -rf /var/lib/apt/lists/*
# 安装最新版 Redis(使用 Redis 官方 PPA)
RUN curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list \
&& apt-get update \
&& apt-get install -y redis \
&& redis-server --version \
&& rm -rf /var/lib/apt/lists/*
# 安装 Nginx
RUN apt-get update && apt-get install -y nginx \
&& nginx -v \
&& rm -rf /var/lib/apt/lists/*
# 暴露常用端口(根据需要调整)
EXPOSE 80 3306 6379
# 默认启动一个交互式 shell,方便手动启动服务
CMD ["/bin/bash"]
- 配置 Docker 镜像加速器(国内网络必备)
编辑 /etc/docker/daemon.json:
sudo nan


5295

被折叠的 条评论
为什么被折叠?



