Java Docker本地部署Java服务

在本地使用 Docker 部署 Java 服务是一个常见的做法,可以帮助开发者在本地环境中快速搭建、测试和调试 Java 应用程序。以下是详细的步骤指南,帮助你在本地计算机上使用 Docker 部署 Java 服务。

1. 安装 Docker

1.1 Windows

  1. 检查系统要求:确保你的 Windows 版本是 Windows 10 Pro、Enterprise 或 Education(Build 14393 或更高版本)。家庭版用户可能需要更新到 Windows 10 Pro。
  2. 启用 WSL 2:打开 PowerShell 以管理员身份运行以下命令:
css 复制代码
wsl --install
  1. 下载 Docker Desktop :访问 ​Docker 官方下载页面​,下载适用于 Windows 的 Docker Desktop 安装包。
  2. 安装 Docker Desktop:双击下载的安装包,按照提示完成安装。
  3. 启动 Docker Desktop:安装完成后,启动 Docker Desktop。首次启动时,可能需要几分钟时间来初始化。

1.2 macOS

  1. 下载 Docker Desktop :访问 ​Docker 官方下载页面​,下载适用于 macOS 的 Docker Desktop 安装包。
  2. 安装 Docker Desktop :双击下载的 ​.dmg​ 文件,按照提示完成安装。
  3. 启动 Docker Desktop:安装完成后,启动 Docker Desktop。首次启动时,可能需要几分钟时间来初始化。

1.3 Linux

  1. 更新系统:
sql 复制代码
sudo apt-get update
sudo apt-get upgrade
  1. 安装必要的包:
arduino 复制代码
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  1. 添加 Docker 的官方 GPG 密钥:
bash 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 设置稳定版存储库:
bash 复制代码
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装 Docker Engine:
sql 复制代码
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 启动 Docker 服务:
bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

2. 配置 Docker

2.1 配置镜像加速

为了提高 Docker 镜像的下载速度,可以配置国内的镜像加速器。编辑 ​​/etc/docker/daemon.json​​ 文件,添加如下内容:

json 复制代码
{
  "registry-mirrors": ["https://<Your-ID>.mirror.aliyuncs.com"]
}

然后重启 Docker 服务:

复制代码
sudo systemctl restart docker

3. 创建 Java 应用

假设你已经有一个简单的 Spring Boot 应用程序,目录结构如下:

css 复制代码
my-java-app/
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── MyAppApplication.java
│   │   └── resources
│   │       └── application.properties
├── pom.xml
└── Dockerfile

3.1 编写 ​​Dockerfile​​

在项目根目录下创建一个名为 ​​Dockerfile​​ 的文件,内容如下:

bash 复制代码
# 使用官方的 OpenJDK 镜像作为基础镜像
FROM openjdk:11-jdk-slim as build

# 设置工作目录
WORKDIR /app

# 将项目文件复制到容器中
COPY . .

# 构建 Java 项目
RUN ./mvnw clean package

# 使用构建阶段生成的 jar 文件创建一个新的镜像层
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 将构建阶段生成的 jar 文件复制到新的镜像层中
COPY --from=build /app/target/my-app.jar /app/my-app.jar

# 暴露应用程序端口
EXPOSE 8080

# 启动应用程序
ENTRYPOINT ["java", "-jar", "/app/my-app.jar"]

4. 构建 Docker 镜像

在项目根目录中运行以下命令来构建 Docker 镜像:

perl 复制代码
docker build -t my-java-app .

5. 运行 Docker 容器

使用以下命令来运行 Docker 容器:

perl 复制代码
docker run -d -p 8080:8080 --name my-java-app-container my-java-app

其中 ​​-d​​​ 表示后台运行,​​-p 8080:8080​​​ 表示将宿主机的 8080 端口映射到容器的 8080 端口,​​--name my-java-app-container​​ 表示为容器指定一个名称。

6. 访问 Java 应用

打开浏览器,访问 ​​http://localhost:8080​​,你应该能看到你的 Java 应用程序的响应。

7. 管理 Docker 容器和镜像

7.1 列出所有运行的容器

复制代码
docker ps

7.2 列出所有容器(包括停止的)

css 复制代码
docker ps -a

7.3 停止容器

arduino 复制代码
docker stop <container-id>

7.4 删除容器

bash 复制代码
docker rm <container-id>

7.5 列出所有镜像

复制代码
docker images

7.6 删除镜像

arduino 复制代码
docker rmi <image-id>

8. 高级配置

8.1 使用环境变量

通过环境变量可以灵活配置应用程序,避免硬编码。在 ​​Dockerfile​​ 中定义环境变量:

ini 复制代码
ENV SPRING_PROFILES_ACTIVE=prod

在运行容器时,可以通过 ​​-e​​ 参数传递环境变量:

ini 复制代码
docker run -d -p 8080:8080 -e SPRING_PROFILES_ACTIVE=prod --name my-java-app-container my-java-app

8.2 数据持久化

使用 Docker 卷(Volume)可以实现数据的持久化,避免数据丢失。在 ​​docker-compose.yml​​ 中定义卷,并挂载到容器中:

yaml 复制代码
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - app-data:/app/data
volumes:
  app-data:

9. 使用 Docker Compose 管理多容器应用

假设你的 Java 应用程序依赖于 MySQL 数据库,可以使用 Docker Compose 来管理多个服务。

9.1 创建 ​​docker-compose.yml​​ 文件

在项目根目录中创建一个名为 ​​docker-compose.yml​​ 的文件,内容如下:

yaml 复制代码
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: pass
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    ports:
      - "3306:3306"
    volumes:
      - db-data:/var/lib/mysql
volumes:
  db-data:

9.2 启动 Docker Compose

在包含 ​​docker-compose.yml​​ 文件的目录中运行以下命令来启动所有服务:

复制代码
docker-compose up -d

其中 ​​-d​​ 表示后台运行。

10. 总结

通过以上步骤,你可以在本地计算机上成功安装和配置 Docker,并使用 Docker 来部署 Java 服务。Docker 的轻量级、可移植和高效的特点使得开发者可以在任何支持 Docker 的环境中快速搭建和运行应用。希望这些步骤对你有所帮助,祝你在 Docker 学习和实践中取得成功!

相关推荐
文丑颜不良啊40 分钟前
LeetCode1461~1480题目解析
java·leetcode
2301_780789668 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
Shulex8 小时前
跨境电商 AI Agent 核心架构解析:从只读问答到自主执行的工程落地
人工智能·架构·智能客服·跨境电商
学长毕设9 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
钱工的门窗技术笔记9 小时前
室内极窄全景移门的支承路径与预留接口:轨道形式、型材壁厚口径与验收边界
物联网·架构·数据分析
码农小旋风9 小时前
Ray分布式计算引擎介绍
人工智能·架构
滴滴答答哒9 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
ZhengEnCi10 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
步行cgn10 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川10 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化