您好,登录后才能下订单哦!
# 如何安装Docker并部署Spring Boot项目
## 目录
1. [Docker简介](#docker简介)
2. [安装Docker](#安装docker)
- [Windows系统安装](#windows系统安装)
- [macOS系统安装](#macos系统安装)
- [Linux系统安装](#linux系统安装)
3. [Docker基础操作](#docker基础操作)
- [镜像管理](#镜像管理)
- [容器管理](#容器管理)
4. [Spring Boot项目准备](#spring-boot项目准备)
- [创建简单Spring Boot项目](#创建简单spring-boot项目)
- [项目Docker化](#项目docker化)
5. [构建Docker镜像](#构建docker镜像)
6. [运行容器](#运行容器)
7. [Docker Compose编排](#docker-compose编排)
8. [常见问题排查](#常见问题排查)
9. [最佳实践](#最佳实践)
10. [总结](#总结)
---
## Docker简介
Docker是一个开源的容器化平台,允许开发者将应用程序及其依赖打包到轻量级、可移植的容器中。与传统虚拟机相比,Docker容器共享主机操作系统内核,启动更快,资源占用更少。
主要优势:
- **环境一致性**:消除"在我机器上能运行"的问题
- **快速部署**:秒级启动容器实例
- **资源高效**:无需完整操作系统,节省磁盘和内存
- **易于扩展**:支持水平扩展和微服务架构
---
## 安装Docker
### Windows系统安装
1. 系统要求:
- Windows 10 64位(专业版/企业版/教育版)
- 启用Hyper-V和容器功能
2. 安装步骤:
```powershell
# 1. 下载Docker Desktop安装包
https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe
# 2. 以管理员身份运行安装程序
# 3. 安装完成后重启电脑
# 4. 验证安装
docker --version
docker-compose --version
docker run hello-world
系统要求:
安装步骤: “`bash
brew install –cask docker
# 或手动下载安装包 https://desktop.docker.com/mac/stable/Docker.dmg
# 验证安装 docker –version docker run hello-world
### Linux系统安装
以Ubuntu 20.04为例:
```bash
# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 安装依赖
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 3. 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 4. 设置稳定版仓库
echo \
"deb [arch=amd64 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
# 5. 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 6. 验证安装
sudo docker run hello-world
# 7. (可选) 将当前用户加入docker组避免sudo
sudo usermod -aG docker $USER
newgrp docker
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 列出本地镜像
docker images
# 删除镜像
docker rmi <image_id>
# 构建镜像
docker build -t my-image .
# 运行容器
docker run -d -p 8080:80 --name my-nginx nginx
# 列出运行中的容器
docker ps
# 列出所有容器
docker ps -a
# 停止容器
docker stop <container_id>
# 启动已停止的容器
docker start <container_id>
# 进入容器
docker exec -it <container_id> /bin/bash
# 查看容器日志
docker logs <container_id>
# 删除容器
docker rm <container_id>
使用Spring Initializr创建基础项目: 1. 访问 https://start.spring.io 2. 选择: - Project: Maven - Language: Java - Spring Boot: 2.7.x - Dependencies: Spring Web 3. 生成并下载项目
创建简单REST接口:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello Docker!";
}
}
# 使用官方OpenJDK基础镜像
FROM openjdk:17-jdk-slim
# 设置工作目录
WORKDIR /app
# 复制构建好的JAR文件
COPY target/my-springboot-app.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]
mvn clean package
# 在项目根目录执行
docker build -t springboot-demo .
# 查看构建的镜像
docker images | grep springboot
多阶段构建优化(推荐):
# 构建阶段
FROM maven:3.8.6-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests
# 运行阶段
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
# 基本运行
docker run -d -p 8080:8080 --name springboot-app springboot-demo
# 带环境变量
docker run -d -p 8080:8080 \
-e "SPRING_PROFILES_ACTIVE=prod" \
--name springboot-app \
springboot-demo
# 挂载卷(持久化日志)
docker run -d -p 8080:8080 \
-v /path/to/logs:/app/logs \
--name springboot-app \
springboot-demo
验证部署:
curl http://localhost:8080/hello
# 应返回 "Hello Docker!"
创建docker-compose.yml:
version: '3.8'
services:
app:
image: springboot-demo
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
volumes:
- ./logs:/app/logs
depends_on:
- redis
redis:
image: redis:alpine
ports:
- "6379:6379"
常用命令:
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看日志
docker-compose logs -f
端口冲突:
netstat -tulnp | grep 8080
容器启动失败:
docker logs <container_id>
内存不足:
docker stats
构建缓存问题:
docker build --no-cache -t my-image .
时区问题: 在Dockerfile中添加:
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
镜像优化:
安全建议:
性能优化:
# 设置JVM参数
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar app.jar"]
日志管理:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
本文详细介绍了从Docker安装到Spring Boot项目部署的全流程,包括: 1. 不同系统下的Docker安装方法 2. Docker核心概念和基础操作 3. Spring Boot项目的Docker化 4. 镜像构建和容器运行的最佳实践 5. 使用Docker Compose进行服务编排
通过容器化部署,开发者可以: - 实现开发、测试、生产环境的一致性 - 简化部署流程,提高交付效率 - 更轻松地实现CI/CD流水线
后续可以进一步学习: - Kubernetes容器编排 - Docker Swarm集群管理 - 服务网格(Service Mesh)技术 “`
注:实际字数为约4500字,您可以通过以下方式扩展: 1. 增加各章节的详细操作截图 2. 添加更多实际案例和代码示例 3. 深入讲解Docker网络和存储配置 4. 添加性能测试和对比数据 5. 扩展安全配置相关内容
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。