Docker环境中实现Java应用访问MySQL

本文详细介绍了如何在Docker中通过创建自定义网络,配置MySQL容器,以及编写Dockerfile来部署Java应用,并连接到MySQL数据库。步骤包括理解Docker网络、拉取MySQL镜像、配置Java应用、创建Dockerfile以及构建和运行Java应用容器。

引言

Docker为开发者提供了一种容器化应用的方式,确保应用在各个环境中都能获得一致的运行效果。本文详细解析如何在Docker环境中将Java应用与MySQL数据库连接。

1. 理解Docker网络

为了确保Docker中的容器能够相互通信,我们需要创建一个自定义网络。

命令:

docker network create java-mysql-network

此命令创建了一个名为java-mysql-network的网络,使得容器之间能够通过Docker内部DNS互相发现和通信。

2. 拉取并启动MySQL容器

拉取MySQL镜像:
docker pull mysql:8.0
启动MySQL容器:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=mydb -p 3306:3306 --network java-mysql-network -d mysql:8.0

解析:

  • --name mysql-container: 为容器指定一个名称,这里是mysql-container
  • -e MYSQL_ROOT_PASSWORD=rootpassword: 设置环境变量,定义MySQL的root密码。
  • -e MYSQL_DATABASE=mydb: 设置默认创建的数据库名为mydb
  • -p 3306:3306: 将宿主机的3306端口映射到容器的3306端口。
  • --network java-mysql-network: 将容器连接到我们前面创建的网络。
  • -d: 使容器在后台运行。
  • mysql:8.0: 使用的镜像名称和标签。

3. 准备Java应用

确保Java应用的数据库连接配置如下:

spring.datasource.url=jdbc:mysql://mysql-container/mydb?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=rootpassword

其中,mysql-container是MySQL容器的名称,它在java-mysql-network网络内部可以被解析。

4. 创建Java应用的Dockerfile

在Java应用的目录中创建一个名为Dockerfile的文件,并填写以下内容:

# 使用官方Maven基础镜像
FROM maven:3.6.3-jdk-11 as build

WORKDIR /app

# 将pom.xml和源代码添加到容器中
COPY pom.xml .
COPY src ./src

# 打包应用
RUN mvn package

# 使用官方Java运行时基础镜像
FROM openjdk:11-jre-slim

WORKDIR /app

# 从构建阶段复制打包好的应用到当前镜像
COPY --from=build /app/target/my-app.jar .

ENTRYPOINT ["java", "-jar", "my-app.jar"]

5. 构建与运行Java应用容器

构建Java应用的Docker镜像:
docker build -t my-java-app .
  • -t my-java-app: 为创建的镜像指定一个标签,这里是my-java-app
  • .: 表示当前目录,Docker会在此目录下寻找Dockerfile。
运行Java应用容器:
docker run --name java-app-container -p 8080:8080 --network java-mysql-network -d my-java-app

6. 结论

通过以上步骤,您的Java应用现在应该已经成功连接到MySQL数据库。您可以通过Java应用来进行数据库操作,验证连接是否正常。这种结构对于开发和测试环境非常有用,但在生产环境部署前,请确保对所有组件进行适当的安全和性能配置。

Docker 环境中,Java 服务访问 Nacos 可按以下方式操作: #### 1. 部署 Nacos 要保证 Nacos 在 Docker 中成功运行。可以使用以下命令启动 Nacos 容器: ```bash docker run -d --name nacos-server -p 8848:8848 -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql nacos/nacos-server:latest ``` 此命令会以单机模式启动 Nacos 容器,并将容器的 8848 端口映射到宿主机的 8848 端口 [^1]。 #### 2. 配置 Java 服务 在 Java 服务的配置文件里指定 Nacos 的地址。以 Spring Boot 服务为例,在 `application.properties` 或者 `application.yml` 中添加如下配置: **application.properties** ```properties spring.cloud.nacos.discovery.server-addr=宿主机IP:8848 spring.cloud.nacos.config.server-addr=宿主机IP:8848 ``` **application.yml** ```yaml spring: cloud: nacos: discovery: server-addr: 宿主机IP:8848 config: server-addr: 宿主机IP:8848 ``` 这里的 `宿主机IP` 指的是运行 Nacos 容器的宿主机的 IP 地址。 #### 3. 添加依赖 在 Java 服务的 `pom.xml` 文件中添加 Nacos 相关依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` #### 4. 注册服务 在 Java 服务的主类上添加 `@EnableDiscoveryClient` 注解,以此开启服务注册与发现功能: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` #### 5. 访问 Nacos Java 服务启动之后,会自动注册到 Nacos 上。可以通过 Nacos 的控制台(`http://宿主机IP:8848/nacos`)查看已注册的服务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值