IDEA连接Docker
安装docker插件
配置docker仓库URL
搭建项目
代码下载
Demooo/springboot-demo-docker at master · cbeann/Demooo · GitHub
创建SpringBoot项目并且创建一个接口
@GetMapping("/hello") public String hello() { String s = LocalDateTime.now().toString(); return s; }
修改pom.xml
<properties> <!--设置时间戳--> <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format> <!--设置docker image 前缀--> <docker.prefix>mydocker</docker.prefix> </properties> <!-- docker插件 --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <!--将插件绑定在某个phase执行--> <executions> <execution> <id>build-image</id> <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build--> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--设置镜像名称--> <imageName>${docker.prefix}/${project.artifactId}_${maven.build.timestamp}</imageName> <!-- docker远程服务器地址 --> <dockerHost>http://127.0.0.1:2375</dockerHost> <!--设置目录,该目录下放dockerfike--> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
编写dockerfile
在/src/main/docker目录下,该位置在pom中已经设置
#指定基础镜像,在其上进行定制 FROM java:8 #维护者信息 MAINTAINER cbeann <cbeann@163.com> #这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /tmp 中写入的信息都不会记录进容器存储层 VOLUME /tmp #复制上下文目录下的target/springboot-demo-docker-0.0.1-SNAPSHOT.jar 到容器里 COPY springboot-demo-docker-0.0.1-SNAPSHOT.jar demo-1.0.0.jar #声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务 EXPOSE 8080 #指定容器启动程序及参数 <ENTRYPOINT> "<CMD>" ENTRYPOINT ["java","-jar","demo-1.0.0.jar"]
运行maven的package
此处已经在pom中把bulid image与mvn package做了关联,即运行package也运行构建镜像命令
运行结果
遇到的坑
IEDA连接远程docker仓库失败
0)确保2375端口开放
1)修改/usr/lib/systemd/system/docker.servic
2)修改ExecStart行为下面内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
3)加载docker守护线程
systemctl daemon-reload
4)重启docker
systemctl restart docker