本文最后更新于121 天前,其中的信息可能已经过时。
docker 使用宿主机部署springboot应用
情况如下:现有一个简单的springboot应用.
想把应用部署到docker容器中,但应用中使用到的中间件 比如mysql ,redis.elasticsearch等都在宿主机中。
方法有很多种,这里记录一种较为简便的一种吧
查看宿主机网络 为127.20.0.1
ifconfig
修改关于中间件的配置为宿主机网络为127.20.0.1
spring: datasource: url: 'jdbc:mysql://172.20.0.1:3306/db_poetry?useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull' username: 'root' password: '123456' redis: host: 172.20.0.1 password: '123456' port: 6379 server: port: 7070 #运行在7070端口
将springboot应用打包为jar包 例如javademo-0.0.1-SNAPSHOT.jar
编写DockerCompoes文件 示例:(这个需要根据自己的需求编写
--- version: "1.0" services: test: build: context: . dockerfile: Dockerfile container_name: test ports: - 8090:7070
编写DockerCompoeswen文件中 dockerfile指向的文件 Dcokerfile
# 基础镜像 FROM openjdk:8-jdk # 设定时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY javademo-0.0.1-SNAPSHOT.jar /app.jar # 入口 ENTRYPOINT ["java", "-jar" , "/app.jar"]
将jar包、compose.yml文件,dockerfile文件放到同一目录下后,使用终端进入该目录后执行命令:
cd /root/demo/test docker-compose -f compose.yaml up -d
如图所示:
最后不要忘了检查是否开放宿主机端口,比如这里是使用8090的宿主机端口对应到容器机的7070端口,所以需要开放宿主机的8090端口给外部访问