先決條件:
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.在項目的“src\main” 目錄下新建 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. 項目地址: