无快不破,在本地 docker 运行 IDEA 里面的项目?

Posted 秦怀杂货店

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无快不破,在本地 docker 运行 IDEA 里面的项目?相关的知识,希望对你有一定的参考价值。


前言

之前我们用​​docker​​部署了​​springboot​​,​​redis​​,​mysql​的项目,但是是部署在三个不同的容器里,还需要先知道​​redis​​和​​mysql​​的​​ip​​地址,手动配置到​​springboot​​应用容器里,我只是想快速在本地进行测试啊,这样成本太高了,有没有什么办法,把他们集中管理呢?比如把它构建成为一个镜像。办法总是有的,那就是​


​Docker Compose​​。 之前的项目地址:https://github.com/Damaer/DemoCode/tree/main/springboot/springDocker 上一篇:http://aphysia.cn/archives/ru-he-ji-yu-dockerkuai-su-da-jian-springbootmysqlredisxiang-mu-

Docker Compose

1. Docker Compose是什么?

​Docker Compose​​其实就是用来定义和运行复杂应用的​​Docker​​工具,什么叫复杂应用,比如前面写的​​springboot​​+​​redis​​+​​mysql​​,里面就有三个容器,这种多个容器的,用一个工具来管理,它不香么?

docker compose 通过配置文件来管理多个 ​​Docker​​ 容器,在配置文件中,所有的容器通过​​service​​来进行定义,然后使用​​docker-compose​​脚本来启动、停止、重启应用以及应用中的服务和所依赖的容器等。

2. Docker Compose 的具体步骤

一般是三个步骤:

  • 使用​​Dockerfile​​ 来定义应用程序的环境
  • 在 ​​docker-compose.yml​​ 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 执行 ​​docker-compose up​​ 命令来启动并运行整个应用程序。

我使用的是​​Mac OS​​,装​​Docker​​的时候已经把​​Docker Compose​​也安装好了,不需要单独安装。

3. 如何在IDEA项目里面使用Docker Compose

首先​​pom.xml​​文件中需要注意配置小写的​​artifactId​​:

    <groupId>com.aphysia</groupId>
<artifactId>dockerdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dockerdemo</name>
<packaging>jar</packaging>

除此之外还需要配置插件:

    <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!-- 将插件绑定在某个phase执行 -->
<executions>
<execution>
<id>build-image</id>
<!-- 用户只需执行mvn package ,就会自动执行mvn docker:build -->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>$docker.image.prefix/$project.artifactId</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>$project.build.directory</directory>
<include>$project.build.finalName.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

除此之外,​​Dockerfile​​是必要的,上面的插件中已经配置了我们​​dockerFile​​需要放在​​src/main/docker​​这个位置,​​DockerFile​​里面配置如下:

FROM openjdk:8-jdk-alpine
EXPOSE 8081
VOLUME /tmp
# 重写命名为app.jar
ADD dockerdemo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

理论上到这个时候,我们使用​​mvn clean package​​就会生成对应的​​jar​​包:

无快不破,在本地

​docker compose​​最重要的是配置​​docker-compose.yml​​,这个文件我们放在项目的根目录就可以,和​​pom.xml​​平级:

version: "3"
services:
redis:
image: redis:latest
restart: always
ports:
- "6389:6379"
volumes:
- /tmp/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: root
MYSQL_PASS: 123456
ports:
- "3306:3306"
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
# 指定服务名称
webapp:
# 指定服务使用的镜像
image: aphysia/dockerdemo
# 指定容器名称
container_name: dockerdemo
# 指定服务运行的端口
ports:
- 8081:8081
# 指定容器中需要挂载的文件
volumes:
- /etc/localtime:/etc/localtime
- /tmp/dockerdemo/logs:/var/logs

值得注意的点:

  1. service里面就是我们配置的镜像,包含了​​redis​​,​​mysql​​,​​webapp​​,​​webapp​​其实就是我们的应用。
  2. ​"6389:6379"​​中​​6389​​其实是我们主机的端口,也就是我的​​Mac​​连接​实验吧--web--天下武功唯快不破

    idea怎么在maven工程里引用本地的另外一个maven工程

    idea怎么在maven工程里引用本地的另外一个maven工程

    idea中安装docker插件

    idea怎么在maven工程里引用本地的另外一个maven工程

    idea怎么在maven工程里引用本地的另外一个maven工程