当前位置: 首页 > 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.xdnf.cn/news/1404937.html

相关文章:

  • 2025年水库单北斗GNSS变形监测TOP3系统推荐榜单
  • C++ 之 【map和set的模拟实现】(只涉及map和set的插入、迭代器以及map的operator[]函数)
  • 使用 JavaScript 构建 RAG(检索增强生成)库:原理与实现
  • TechPowerUp GPU-Z中文版:专业显卡检测工具
  • 多教师语言感知知识蒸馏:提升多语种语音情绪识别的新方法
  • FPGA 实现FOC 无刷电机控制器
  • 数字化赋能,鹧鸪云重塑光伏电站资产管理新范式
  • DDR5 介绍
  • C/C++:AddressSanitizer内存检测工具
  • 基于单片机甲醛浓度检测报警系统Proteus仿真(含全部资料)
  • 存储的未来之战:RustFS如何用ZK框架重构分布式协调?
  • L10 Function Calling与智能Agent开发
  • IC验证 AXI 项目(二)——断言
  • LeetCode - 21. 合并两个有序链表
  • 【前端教程】JavaScript 基础实战案例(5-10)
  • UE5多人MOBA+GAS 56、WSL + Docker 编排 Linux 服务器与 Windows 客户端
  • Linux基础1
  • AI融合高等教育:从通识到专业 - 学科+AI人才培养白皮书(上)
  • Linux查看Java进程PID、端口号和内存占用脚本
  • 【多项式】快速莫比乌斯变换(FMT)
  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • Python 数据分析:计算,分组统计2,df.groupby()和grouped.agg()。听故事学知识点怎么这么容易?
  • 告别图片处理焦虑:用imgix实现智能、实时且高效的视觉媒体交付(含案例、截图)
  • 一键掌控三线资源:极简 Shell 脚本实现 CPU·磁盘·内存可视化巡检
  • SRE命令行兵器谱之二:lsof - 解密“端口被占用”与“文件句柄泄漏”的终极侦探
  • MySQL-事务(下)-MySQL事务隔离级别与MVCC
  • 2021-11-10 C++不变初心数
  • ans1语法的一个例子nt5inf.cat
  • 详解Vue2、Vue3与React的Diff算法
  • TuringComplete游戏攻略(2.2存储器)