先决条件:
a. idea已经安装了docker插件。
b. 有一台已经安装好docker环境的服务器,并且
否则的话,需要修改docker的配置,允许远程连接(以centos7下的yum方式安装的docker且使用service方式运行为例):
vi /usr/lib/systemd/system/docker.service
确保:ExecStart 的后面有: -H tcp://0.0.0.0:2375
修改完成后保存退出,刷新并重启docker服务:
systemctl daemon-reload
systemctl restart docker
c. 在idea中添加你的docker运行的服务器:
idea, File, Settings, Build Extention Deployment 菜单下找到Docker菜单,
点加号新建,名称自定义,然后选择tcp:
填写你服务器的配置即可,我此处使用的是:tcp://172.171.19.241:2375
然后保存即可,如果链接成功,会有提示,在代码页面的service面板中有docker的状态,当前服务器中的容器、镜像等信息。
如果连接失败,请检查你的服务器和网络环境是否放开了2375这个端口。
放行端口的命令(CentOS7):
firewall-cmd --permanent --add-port=2375/tcp
firewall-cmd --reload
到这里,准备工作基本完毕。
操作步骤:
1.新建SpringBoot项目。
2.编写测试用接口。
2.1修改pom.xml
build 一节替换成如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <!--使用docker-maven-plugin插件--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</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>dz/${project.artifactId}</imageName> <!--指定标签,也就是版本号,可以自定义--> <imageTags> <imageTag>0.1</imageTag> </imageTags> <!-- 指定 Dockerfile 路径--> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <!--指定远程 docker api地址 也就是服务器ip+docker的端口号--> <dockerHost>http://172.171.19.241:2375</dockerHost> <!-- 这里是复制 jar 包到 docker 容器指定目录配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar 包所在的路径 此处配置的 即对应 target 目录--> <directory>${project.build.directory}</directory> <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build>
3.在项目的“srcmain” 目录下新建 docker目录并新建文件:Dockerfile
输入下列内容:
#基础镜像 FROM java:8-jre #SpringBoot项目必须使用/tmp目录 VOLUME /tmp #将项目的jar包拷贝并命名 COPY hellodocker-0.0.1-SNAPSHOT.jar hellodocker.jar RUN bash -c "touch /hellodocker.jar" #暴露的端口 EXPOSE 8082 #执行命令运行项目 ENTRYPOINT ["java","-jar","hellodocker.jar"] #解决时间不正确的问题 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
4.编译项目打包项目并打包镜像
mvn clean package docker:build
执行成功后,就可以在服务器中看到有此镜像存在了:
[root@dockerdz app]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE dz/hellodocker 0.1 a70b918b24c2 49 minutes ago 348MB dz/hellodocker latest a70b918b24c2 49 minutes ago 348MB <none> <none> 29e8182007d4 52 minutes ago 123MB hello-world latest bf756fb1ae65 9 months ago 13.3kB openjdk 8-jdk-alpine a3562aa0b991 17 months ago 105MB java 8-jre e44d62cf8862 3 years ago 311MB
5.使用生成的镜像创建容器并运行
可以使用idea中的service面板来创建,在你添加的服务器名字下面有images,在你的镜像上右键,即可创建container了。
注意需要添加容器和宿主机的端口映射,我这里使用了8082端口(宿主机同样需要放行8082端口)。
运行成功后,即可在本机测试访问docker中的项目了。
此处使用:
http://172.171.19.241:8082/api/hi?name=sixi
来访问。
ps:
linux服务器上该容器的运行状况:
[root@dockerdz app]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd67f7921842 a70b918b24c2 "java -jar hellodock…" 2 hours ago Up 2 hours 0.0.0.0:8082->8082/tcp dzTest
6. 项目地址: