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 容器
- 普通启动
如果应用不需要访问宿主机服务,直接运行:
docker run -p 9799:9799 --name aiyunhua-container sd-api-assistant:1.0.0
- 访问宿主机 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
- 查看运行中的容器
(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
五、实践思考与扩展
- 宿主机服务访问问题
- Windows / Mac Docker Desktop 默认支持 host.docker.internal
- Linux 需要手动添加 --add-host 或直接使用宿主机 IP
- Docker Compose 使用场景
- 如果有多个服务(Java 应用 + Redis + MySQL 等),推荐使用 docker-compose.yml 管理网络和依赖关系
- 通过 extra_hosts 可以统一配置宿主机访问
- 安全性
- 容器访问宿主机服务时要确保防火墙和网络安全
- 对外开放 Redis 端口时,建议设置密码或仅在内网使用
- 镜像优化
- 使用轻量级基础镜像(如 Alpine)可减小镜像体积
- 将 jar 包及依赖分层 COPY,可减少构建时间