一:基礎准備
1.首先在linux服務器安裝Docker環境,具體安裝步驟及Docker使用參考官網或網絡資料(這里重點是快速部署項目到Docker環境)
2.配置Docker遠程連接端口
1.vim /usr/lib/systemd/system/docker.service
2.找到ExecStar 在后面添加 -H tcp://0.0.0.0:2375
3.重啟Docker
systemctl daemon-reload
systemctl start docker
4.如果防火牆已經打開則需要開放2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
5.Idea安裝Docker插件並配置連接Docker
6.連接成功會列出遠程的容器和鏡像,並且可以直接右鍵快速啟動、關閉、刪除容器或鏡像
二:構建Springboot項目
1.pom文件在plugin添加docker-maven-plugin、maven-antrun-plugin插件
<build> <finalName>study-demo</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>application.properties</include> <include>**/*.xml</include> <include>**/*.json</include> </includes> </resource> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <includes> <include>**/*.xml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <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> <executions> <execution> <phase>package</phase> <configuration> <tasks> <copy todir="src/main/docker" file="target/${project.build.finalName}.${project.packaging}"></copy> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2.在src/main目錄下創建docker目錄,並創建Dockerfile文件
這里給出了一個Dockerfile幾個重要指令比較詳細的參考說明
FROM java:8 #維護者信息 MAINTAINER boris@email.com #添加元數據到鏡像,LABEL是以鍵值對形式 LABEL maintainer="bo.zou <boris@email.com>" LABEL copyright="2015 ~ 2020 www.boris.com Inc. All rights reserved." LABEL version="1.0.0" LABEL declaration="Boris Test Dockerfile" #ENV設置環境變量 timezone ENV TIMEZONE Asia/Shanghai #設置容器的工作目錄 # WORKDIR #RUN指令:用於指定 docker build 過程中要運行的命令 RUN mkdir /usr/local/boris WORKDIR /usr/local/boris #復制指令,從上下文目錄中復制文件或者目錄到容器里指定路徑 #ADD 指令和 COPY 的使用格式一致(同樣需求下,官方推薦使用 COPY) #將jar包添加到容器中並更名為app.jar COPY *.jar /usr/local/boris/app.jar #定義匿名數據卷。在啟動容器時忘記掛載數據卷,會自動掛載到匿名卷。 #可以在鏡像中創建掛載點,只要通過該鏡像創建的容器都有了掛載點 #作用是和docker run命令的-v是一樣,將宿主機和容器的目錄做映射 #區別是:通過 VOLUME 指令創建的掛載點,無法指定宿主機上對應的目錄,是自動生成的。可以通過查看容器的信息查看到,例:docker inspect 容器ID #VOLUME ["/usr/local/boris/dockerlog"] ###聲明啟動端口號 EXPOSE 8080 #CMD 和 ENTRYPOINT 在docker run 時運行(啟動容器時執行),主要用來指定容器默認執行的命令. #CMD作用:當Docker鏡像被啟動后Docker容器將會默認執行的命令,CMD 指令指定的程序會被 docker run 命令行參數中指定要運行的程序所覆蓋 #ENTRYPOINT作用:類似於 CMD 指令,區別在於不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序 #一個Dockerfile中只能有一個CMD或ENTRYPOINT命令,多個僅最后一個生效。多數情況下它們應該是單獨使用的。 #配合使用時: #• 如果 ENTRYPOINT 使用了 shell 模式,CMD 指令會被忽略。 #• 如果 ENTRYPOINT 使用了 exec 模式,CMD 指定的內容被追加為 ENTRYPOINT 指定命令的參數。 #• 如果 ENTRYPOINT 使用了 exec 模式,CMD 也應該使用 exec 模式。 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
3.創建springboot項目controller和啟動類做測試
4.增加配置
說明:
Dockerfile:指定你的Dockerfile文件
Image tag : 指定鏡像名稱和tag,冒號分隔
Bind ports : 綁定宿主機端口到容器內部端口。格式為[宿主機端口]:[容器內部端口]
Bind mounts : 將宿主機目錄掛到到容器內部目錄中。格式為[宿主機目錄]:[容器內部目錄]
Contaner name:取一個容器名稱,不填默認會隨機生成一個名稱
5.打包並運行
6.成功,可以看到創建的容器和鏡像並且運行成功
結束,EDN。