真实击剑
93.36 MB · 2025-11-22
在本地使用 Docker 部署 Java 服务是一个常见的做法,可以帮助开发者在本地环境中快速搭建、测试和调试 Java 应用程序。以下是详细的步骤指南,帮助你在本地计算机上使用 Docker 部署 Java 服务。
wsl --install
.dmg 文件,按照提示完成安装。sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
为了提高 Docker 镜像的下载速度,可以配置国内的镜像嘉苏琪。编辑 /etc/docker/daemon.json 文件,添加如下内容:
{
"registry-mirrors": ["https://<Your-ID>.mirror.aliyuncs.com"]
}
然后重启 Docker 服务:
sudo systemctl restart docker
假设你已经有一个简单的 Spring Boot 应用程序,目录结构如下:
my-java-app/
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── MyAppApplication.java
│ │ └── resources
│ │ └── application.properties
├── pom.xml
└── Dockerfile
Dockerfile在项目根目录下创建一个名为 Dockerfile 的文件,内容如下:
# 使用官方的 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"]
在项目根目录中运行以下命令来构建 Docker 镜像:
docker build -t my-java-app .
使用以下命令来运行 Docker 容器:
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 表示为容器指定一个名称。
打开浏览器,访问 http://localhost:8080,你应该能看到你的 Java 应用程序的响应。
docker ps
docker ps -a
docker stop <container-id>
docker rm <container-id>
docker images
docker rmi <image-id>
通过环境变量可以灵活配置应用程序,避免硬编码。在 Dockerfile 中定义环境变量:
ENV SPRING_PROFILES_ACTIVE=prod
在运行容器时,可以通过 -e 参数传递环境变量:
docker run -d -p 8080:8080 -e SPRING_PROFILES_ACTIVE=prod --name my-java-app-container my-java-app
使用 Docker 卷(Volume)可以实现数据的持久化,避免数据丢失。在 docker-compose.yml 中定义卷,并挂载到容器中:
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
volumes:
- app-data:/app/data
volumes:
app-data:
假设你的 Java 应用程序依赖于 MySQL 数据库,可以使用 Docker Compose 来管理多个服务。
docker-compose.yml 文件在项目根目录中创建一个名为 docker-compose.yml 的文件,内容如下:
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:
在包含 docker-compose.yml 文件的目录中运行以下命令来启动所有服务:
docker-compose up -d
其中 -d 表示后台运行。
通过以上步骤,你可以在本地计算机上成功安装和配置 Docker,并使用 Docker 来部署 Java 服务。Docker 的轻量级、可移植和高效的特点使得开发者可以在任何支持 Docker 的环境中快速搭建和运行应用。希望这些步骤对你有所帮助,祝你在 Docker 学习和实践中取得成功!