對於docker 我個人一直很好奇,可惜沒有環境來實戰,上一年了解到 win10 下可以使用 docker desktop 這樣的神器來搭建docker 環境,剛好周六自己玩了玩,使用idea+docker desktop 來搭建一個環境。現在將過程寫出來:
准備:
docker desktop 安裝包+idea,這邊我首先得說明下:docker desktop 需要win10的專業版甚至更高版本才行,而且必須得是win10 好像,這邊有問題就自己先百度吧,我這邊不做多余陳述,idea 我使用的是專業版,至於咋獲得,你懂得~
開始:
1.首先 安裝docker desktop ,這邊你可以參考如下:
https://www.cnblogs.com/jc2182/p/11260845.html
https://blog.csdn.net/topdeveloperr/article/details/105517877
2.docker desktop的使用參考如下帖子:
https://xunmi.blog.csdn.net/article/details/108641842
3.在idea 中安裝Docker 的相關插件,如何安裝請百度!
在設置中搜索docker,然后在Engine API URL中設置 :tcp://localhost:2375,
這個與docker desktop 中的General 中的選項類似,如圖:
一定得保證這個功能處於使能狀態。
4.開始編寫dockerfile 文件:
因為項目中一直使用的是springCloud 相關的東西,但是每次在本地調試時需要用到eureka,自己起idea 啥的好麻煩,所以docker 直接走起。
1.首先准備pom文件.如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neo</groupId>
<artifactId>spring-cloud-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-cloud-eureka</name>
<description>Demo project for Spring cloud eureka</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<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>
<configuration>
<imageName>${project.groupId}-${project.artifactId}</imageName>
<!-- <imageTags>-->
<!-- <imageTag>latest</imageTag>-->
<!-- </imageTags>-->
<dockerDirectory>src/main/docker</dockerDirectory>
<!-- 這里是復制 jar 包到 docker 容器指定目錄配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
關於eureka的相關配置我這里不做過多解釋,大家需要重點關注:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${project.groupId}-${project.artifactId}</imageName>
<!-- <imageTags>-->
<!-- <imageTag>latest</imageTag>-->
<!-- </imageTags>-->
<dockerDirectory>src/main/docker</dockerDirectory>
<!-- 這里是復制 jar 包到 docker 容器指定目錄配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
這里面的配置內容,其中 imageName 是將來鏡像的名稱,但我這次貌似沒啥用,
dockerDirectory 是未來 Dockerfile 存放的目錄,這個很重要,配置錯了將來dockerfile 打包的時候會報錯的,千萬記住,這里需要跟后面docker 的運行配置還有dockefile 文件互相呼應,剩下的就不說了你照抄就是了
2. 寫 Dockerfile文件:
我在 src/main 目錄底下新建了一個docker 目錄,然后在內新建一個 Dockerfile 文件,Dockerfile 文件內容如下:
# Docker image for springboot application
# VERSION 0.0.1
# Author: bolingcavalry
### 基礎鏡像,使用alpine操作系統,openjkd使用8u201
FROM java:8
#作者
MAINTAINER zhangming <362878635@gmail.com>
#系統編碼
#ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
#聲明一個掛載點,容器內此路徑會對應宿主機的某個文件夾
VOLUME /tmp
#應用構建成功后的jar文件被復制到鏡像內,名字也改成了app.jar
ADD target/spring-cloud-eureka-0.0.1-SNAPSHOT.jar app.jar
#暴露8090端口,這里是 eureka的端口號
EXPOSE 8900
#RUN bash -c 'touch /app.jar'
#啟動容器時的進程
ENTRYPOINT ["java","-jar","/app.jar"]
然后在Dockerfile 中會出現個箭頭
這里的Add 之后的目錄需要設置清楚,這里暫時設置target 目錄之后,這里的xx.jar 文件就是以后編譯成功之后的文件,這個需要跟context folder 做一個對應關系,看看主目錄是哪一個來決定這里咋設置
然后點擊最底下的edit 進行編輯,如圖:
注意這里的context folder 的路徑可得千萬設置清楚,我這里設置的文件根目錄,這個玩意讓我吃了好幾次虧
容器內外端口映射:
最后點擊最下面的:
最后在里面復制上:clean package -U -DskipTests 這段命令來跳過單元測試
3.開始編譯:
首先在maven插件內點擊 install
再次構建docker 文件:
構建成功后如圖:
運行dockerfile 文件,一定點擊這里,我當時點的是dockerfile 里面的run 一直運行不起來,坑了我好久:
此處我后續發現一個問題,假如在進行 運行配置設置時勾選了這個框的話,如圖:
你在運行docker 的時候可以直接點擊 運行那個三角符號,而不需要啰嗦的先進行build,然后點擊run 了,這樣子run 一下可以一步到位!有沒有很棒~O(∩_∩)O哈哈~
運行成功如圖:
此時在瀏覽器輸入http://localhost:8900/來訪問eureka,如圖:
此時點擊docker desktop 的Dashboard圖標,如圖:
點開后如圖:
此時可以看到我們的容器如上圖。
點擊開容器后,如圖:
這樣子就啟動了
插曲:我在運行成功后發現docker 內的日志打印正常,但是我本地就是沒辦法訪問,最后也不知道咋辦就用了重啟大法,果然沒有啥問題是重啟解決不了的!
完了!有問題的話后續繼續更新