当前位置: 首页 > news >正文

Linux 下 Docker 容器部署指南(Java + Redis 示例)

Linux 下 Docker 容器部署指南(Java + Redis 示例)

  • 一、Docker 镜像源配置
  • 二、构建 Docker 镜像
  • 三、运行 Docker 容器
  • 四、查看容器日志
  • 五、实践思考与扩展

在 Linux 上部署 Java 应用到 Docker 容器中,并访问宿主机的 Redis 服务,是一个常见场景。本文将结合实际操作步骤,详细讲解 Docker 镜像配置、镜像构建、容器启动及宿主机 Redis 访问问题的解决方案。

一、Docker 镜像源配置

国内访问 Docker Hub 较慢,建议配置国内镜像源来加速镜像下载。编辑 Docker 配置文件 /etc/docker/daemon.json:

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn/docker/","https://docker.m.daocloud.io"]
}

配置完成后,执行以下命令重新加载配置并重启 Docker 服务:

systemctl daemon-reload
systemctl restart docker

⚠️ 注意:修改镜像源后,最好先执行 docker info | grep -i mirror,确认镜像源已生效。

二、构建 Docker 镜像

在项目根目录下,创建 Dockerfile,例如:

# 使用官方OpenJDK 8运行时作为父镜像(Alpine Linux版本非常小巧)
FROM openjdk:8-jdk-alpine# 在镜像内设置一个工作目录,后续的命令都会在这个目录下执行
WORKDIR /app# 将当前目录下的jar文件复制到镜像的工作目录中,并可重命名
COPY sd-api-assistant-1.0.0-SNAPSHOT.jar /app/sd-api-assistant.jar# 告诉Docker容器在运行时监听指定的端口(根据你的应用实际端口修改)
EXPOSE 9799# 配置容器启动后执行的命令
ENTRYPOINT ["java", "-jar", "sd-api-assistant.jar"]

然后执行构建命令:

docker build -t sd-api-assistant:1.0.0 .

构建完成后,你可以通过 docker images 查看本地镜像列表。

(base) [root@localhost aiyunhua_api]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED             SIZE
sd-api-assistant                1.0.0     0ed1e0438307   26 minutes ago      557MB

三、运行 Docker 容器

  1. 普通启动

如果应用不需要访问宿主机服务,直接运行:

docker run -p 9799:9799 --name aiyunhua-container sd-api-assistant:1.0.0
  1. 访问宿主机 Redis 服务

在容器里访问宿主机的 Redis,需要注意:

容器里的 127.0.0.1 只指容器本身,不能直接访问宿主机

Linux Docker 没有默认的 host.docker.internal,需要手动添加

运行容器时,添加 --add-host 参数:

docker run \--add-host=host.docker.internal:host-gateway \-d \-p 9799:9799 \--name aiyunhua-container \sd-api-assistant:1.0.0

在 Java 项目的 application.yml 中配置 Redis:

spring:redis:host: host.docker.internalport: 6379
  1. 查看运行中的容器
(base) [root@localhost aiyunhua_api]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                                       NAMES
d6a5704734c2   sd-api-assistant:1.0.0   "java -jar sd-api-as…"   22 minutes ago   Up 22 minutes   0.0.0.0:9799->9799/tcp, :::9799->9799/tcp   aiyunhua-container

🔑 注意事项:

  • 宿主机 Redis 必须监听所有网卡:bind 0.0.0.0
  • 确保防火墙放行 6379 端口:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
  • Redis 默认可能开启 protected-mode yes,需要设置 protected-mode no 以允许外部访问(请确保在安全网络环境下使用)。

四、查看容器日志

容器启动后,可以通过日志监控应用运行状态:

docker logs -f aiyunhua-container

五、实践思考与扩展

  1. 宿主机服务访问问题
  • Windows / Mac Docker Desktop 默认支持 host.docker.internal
  • Linux 需要手动添加 --add-host 或直接使用宿主机 IP
  1. Docker Compose 使用场景
  • 如果有多个服务(Java 应用 + Redis + MySQL 等),推荐使用 docker-compose.yml 管理网络和依赖关系
  • 通过 extra_hosts 可以统一配置宿主机访问
  1. 安全性
  • 容器访问宿主机服务时要确保防火墙和网络安全
  • 对外开放 Redis 端口时,建议设置密码或仅在内网使用
  1. 镜像优化
  • 使用轻量级基础镜像(如 Alpine)可减小镜像体积
  • 将 jar 包及依赖分层 COPY,可减少构建时间
http://www.dtcms.com/a/358649.html

相关文章:

  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • 设置word引用zotero中的参考文献的格式为中文引用格式或中英文格式
  • Shell编程核心入门:参数传递、运算符与流程控制全解析
  • SEO关键词布局总踩坑?用腾讯云AI工具从核心词到长尾词一键生成(附青少年英语培训实操案例)
  • [吾爱原创] 千千每日计划
  • Java全栈工程师面试实录:从基础到微服务的全面技术解析
  • 系统架构设计师选择题精讲与解题技巧
  • Spring Boot 自动配置原理深度解析:从启动流程到监听机制
  • 学习Python中Selenium模块的基本用法(10:浏览器操作)
  • 【物联网】BLE Fundamentals 核心概念总结-广告-读写特征-LED控制-传感器通知-上下游通信过程
  • CSDN博客语法(不常用但有用)
  • 年化225%,回撤9%,夏普4.32,3积分可查看参数
  • 【光照】[光照模型]是什么?以UnityURP为例
  • Excel工作技巧
  • 如何解决虚拟机异常退出后提示“获取所有权”错误
  • 企业为什么需要部署数据防泄露系统?
  • ModuleNotFoundError: No module named ‘cairosvg‘
  • 基于Spring Boot小型超市管理系统的设计与实现(代码+数据库+LW)
  • OpenCV DNN 模块完全指南:从理论基础到实战应用 —— 图像分类与目标检测的深度学习实现(含 Python/C++ 代码与性能分析)
  • MongoDB 聚合管道(Aggregation)高级用法:数据统计与分析
  • 用【Coze】实现文案提取+创作
  • 解决低版本CUDA与PyTorch之间的兼容性问题
  • Android FrameWork - 开机启动 SystemServer 进程
  • Preprocessing Model in MPC 3 - 基于同态加密的协议 - Over Rings 环
  • Linux系统编程--进程控制
  • 飞帆fvi.cn拖放配置实现卡片布局
  • GJB 11664-2024《装备数字样机通用要求》概述
  • 数字签名 digital signature
  • 第三十一天:数列求和取模
  • 达梦数据库-报错-03-viosocket_peer_addr getpeername error: 107