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,可減少構建時間