用idea部署springboot項目到docker

本篇博客記錄如何用idea裏的docker插件去部署springboot項目到docker容器裏

相關Linux的準備工作

1、配置docker遠程連接端口

編輯服務器上的docker.service文件

vi /usr/lib/systemd/system/docker.service

找到如下圖所示的地方,添加以下東西(版本需爲centos7以上):

-H tcp://0.0.0.0:2375

如果版本是centos7以下的則直接在這一行的最後添加即可,centos7以下版本添加後的全部代碼爲:

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

2、保存修改退出,重啓docker

systemctl daemon-reload
service docker restart

3、測試遠程連接是否正常

curl http://localhost:2375/version

如果出現以下內容則能正常連接:

4、開放端口

需要將2375端口進行開放才能被遠程連接,如果是阿里雲主機的話,可以直接登錄阿里雲去進行開放:

如果是虛擬機的話,可以用以下命令進行開放:

firewall-cmd --zone=public --add-port=2375/tcp --permanent

然後用瀏覽器訪問Linux主機的IP:2375/version,測試端口是否開放成功

5、在docker裏裝MySQL數據庫(如果已經裝過則不用)

#拉取MySQL鏡像
docker pull mysql:5.7

#使用鏡像開啓服務(PASSWORD後面是root用戶的密碼)
docker run -d -p 3308:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

然後看MySQL是否已啓動:

如果已啓動,則可以用工具去連接,注意端口用3308,因爲MySQL的3306端口映射成了3308

6、在docker裏裝redis(如果已經裝過則不用)

#拉取redis鏡像
docker pull redis

#啓動redis
#redis-server --appendonly yes:在容器執行redis-server啓動命令,並打開redis持久化配置
#requirepass "123456":配置redis連接密碼
docker run --name redis -p 6379:6379 -d --restart=always redis redis-server --appendonly yes --requirepass "123456"

然後看redis是否已啓動:

如果已啓動,則可以用工具去連接,端口用6379

相關idea的操作

1、下載docker插件

在File-》Setting-》Plugins-》Browse Repositones進行下載:

2、使用docker插件連接到Linux上的docker容器

在File-》Settings-》Build, Execution, Deployment-》Docker裏用Linux主機的IP:2375進行連接:

連接成功後可以看到docker裏所有的鏡像以及容器:

3、在項目中添加一個docker文件夾並創建Dockerfile文件

Dockerfile文件的內容如下:

#這是基礎鏡像
FROM java:8
VOLUME /tmp
#複製jar包到鏡像中,並且將名字改成app.jar
ADD springboot_project.jar app.jar
#在容器啓動的時候運行命令,來啓動我們的項目(這其實就是一段Linux命令)
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

建議先登錄Linux用命令拉取java:8基礎鏡像,這樣以免到後面build鏡像的時候才拉取,造成用時很長

4、在pom.xml裏添加docker相關配置

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <!--綁定mvn package命令,當執行package這個maven命令打包項目的同時
        會把target目錄下的jar包給copy到docker目錄去-->
    <executions>
        <execution>
            <phase>package</phase>
            <configuration>
                <tasks>
                    <copy todir="src/main/docker" file="target/${project.artifactId}.${project.packaging}"></copy>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

5、添加一個docker配置

具體配置如下:

部分解釋如下:

1.Name:這個根據自己的項目進行命名
2.Server:這個就是遠程的服務器上的docker
3.Dockerfile:這個就是自己項目的Dockerfile文件
4.Image Tag:不能重複根據自己項目來定義
5.Container name:創建你自己生成容器的名字
6.Bindports:綁定服務器對外提供的端口和自己項目的端口(阿里雲的端口需要在後臺自行管理打開)
  格式爲[宿主機端口]:[容器內部端口]
7.Bind mounts:靜態資源存放路徑的映射,根據自己的項目自行映射
  格式爲[宿主機目錄]:[容器內部目錄]			
8.Command line options:這是docker內部的機制當某個容器需要其他運行容器的時候需要在這裏配置
  語法:--link 運行容器的名稱: 自己定義的名稱(多個的容器的話需要使用空格分隔)

6、將項目打成jar包

打包成功後,項目的target目錄跟docker目錄下都有一個jar包

7、運行docker來build鏡像

運行之前配置好的Dockerfile,打包鏡像,並將鏡像部署到遠程docker運行:

8、用瀏覽器訪問項目看效果

用瀏覽器訪問Linux主機IP+端口+項目名,效果如下:

部署期間遇到的問題

項目部署成功後訪問登錄頁面,調用後端接口生成的圖片驗證碼顯示不出來,看日誌在報空指針異常,如下圖:

產生原因:我開始用的jdk基礎鏡像是openjdk:8-jdk-alpine,這個版本的jdk相比於我們平時用的jdk是不完整的,有些包是沒有的,所以導致空指針異常的出現

解決方案:將基礎鏡像換成java:8

發佈了123 篇原創文章 · 獲贊 84 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章