您好,登錄后才能下訂單哦!
這篇文章主要講解了“Spring Boot打包上傳Docker倉(cāng)庫(kù)的詳細(xì)過(guò)程”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Spring Boot打包上傳Docker倉(cāng)庫(kù)的詳細(xì)過(guò)程”吧!
以下是完成標(biāo)題所述功能的大致步驟:
搭建docker鏡像倉(cāng)庫(kù)
修改Spring Boot 配置文件添加docker倉(cāng)庫(kù)配置,打包,上傳至docker 鏡像倉(cāng)庫(kù)
從自己搭的docker鏡像倉(cāng)庫(kù)拉取上傳的鏡像文件并運(yùn)行
搭建docker鏡像倉(cāng)庫(kù)我們需要依賴(lài)docker-registry工具 ,docker-registry是官方提供的工具,可以用于構(gòu)建私有的鏡像倉(cāng)庫(kù)。本文內(nèi)容基于 docker-registry v2.x 版本 官方地址:https://docs.docker.com/registry/
1.拉取registry 鏡像文件
docker pull registry
2.啟動(dòng)鏡像
$ docker run -d \ -p 5000:5000 \ -v /opt/data/registry:/var/lib/registry \ registry
-d:守護(hù)線程啟動(dòng)
-p:端口映射 宿主機(jī)的端口:容器的端口
-v:數(shù)據(jù)卷把容器內(nèi)的地址目錄映射到宿主機(jī)中/opt/data/registry就是宿主機(jī)中鏡像私有倉(cāng)庫(kù)存放鏡像的位置
registry 就是鏡像名
3.配置daemon.json文件加入,倉(cāng)庫(kù)配置
vim /etc/docker/daemon.json
添加配置如下:
{ "registry-mirrors": [ "https://registry.docker-cn.com" ], "insecure-registries": [ "yourip:5000" ] }
在原來(lái)的daemon.json 文件添加 insecure-registries 節(jié)點(diǎn)配置,yourip :填寫(xiě)你的虛擬機(jī)ip, 保存退出 重新加載配置文件和重新啟動(dòng)docker
systemctl daemon-reload systemctl restart docker
4.測(cè)試把鏡像上傳到自己的鏡像倉(cāng)庫(kù),我們標(biāo)記一個(gè)鏡像然后上傳的倉(cāng)庫(kù) 使用 docker tag 命令:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
(這里測(cè)試上傳的鏡像不必和文中相同,你可以pull 一個(gè) tomcat 鏡像然后上傳即可) 此時(shí)會(huì)生成一個(gè)標(biāo)記的鏡像
docker image ls REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB 127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB
push 到私有倉(cāng)庫(kù)
docker push 127.0.0.1:5000/ubuntu:latest
查看私有倉(cāng)庫(kù)的鏡像(其實(shí)可以去啟動(dòng)倉(cāng)庫(kù)時(shí)掛載的目錄下看,本文可以到宿主機(jī) /opt/data/registry 目錄下查看了上傳的鏡像文件)
curl 127.0.0.1:5000/v2/_catalog
把私有倉(cāng)庫(kù)的鏡像pull 下來(lái)
docker pull 127.0.0.1:5000/ubuntu:latest
pull 下來(lái)沒(méi)問(wèn)題那就說(shuō)明鏡像倉(cāng)庫(kù)已經(jīng)搭建好了
在配置SpringBoot項(xiàng)目之前,還需要對(duì)docker 容器做一些配置,才能把jar包上傳到倉(cāng)庫(kù)
開(kāi)啟docker遠(yuǎn)程api,修改文件,
vim /lib/systemd/system/docker.service
原來(lái)ExecStart :ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
添加**-H tcp://0.0.0.0:2375**
修改后:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
(如果你使用的是阿里云服務(wù)器記得去出入規(guī)則那里打開(kāi)2375這個(gè)端口哦!)
保存退出,重新加載配置和啟動(dòng)docker
systemctl daemon-reload systemctl restart docker
查看配置是否成功,
docker -H 127.0.0.1 info
輸出如下就是配置成功:
Client:
Debug Mode: falseServer:
Containers: 5
Running: 1
Paused: 0
Stopped: 4
Images: 6
Server Version: 19.03.3
Storage Driver: overlay2
.......
配置springboot 項(xiàng)目,pom文件添加打包配置如下
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>jenkins_test/${project.artifactId}:${project.version}</imageName> <dockerHost>http://yourip:2375</dockerHost> <baseImage>java:8</baseImage> <entryPoint>["java", "-jar","/${project.build.finalName}.jar"] </entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
executions.execution.phase:此處配置了在maven打包應(yīng)用時(shí)構(gòu)建docker鏡像;
imageName:用于指定鏡像名稱(chēng),jenkins_test是倉(cāng)庫(kù)名稱(chēng),{project.version}為鏡像版本號(hào);
dockerHost:打包后上傳到的docker服務(wù)器地址;
baseImage:該應(yīng)用所依賴(lài)的基礎(chǔ)鏡像,此處為java;
entryPoint:docker容器啟動(dòng)時(shí)執(zhí)行的命令;
resources.resource.targetPath:將打包后的資源文件復(fù)制到該目錄;
resources.resource.directory:需要復(fù)制的文件所在目錄,maven打包的應(yīng)用jar包保存在target目錄下面;
resources.resource.include:需要復(fù)制的文件,打包好的應(yīng)用jar包。
配置好以上內(nèi)容后就可以打包了,(正常的springboot maven 打包,或者idea mavenproject install 即可)
打包成功完成后,回到docker容器 查看鏡像倉(cāng)庫(kù)
curl 127.0.0.1:5000/v2/_catalog
確認(rèn)存在之后將上傳的鏡像拉取下來(lái),拉取成功后查看鏡像列表
docker iamges
顯示如圖:
這樣就說(shuō)明這一套操作成功了 ,首次打包可能比較慢 因?yàn)閐ocker 要拉去一下 java :8 基礎(chǔ)鏡像
我們來(lái)啟動(dòng)一下這個(gè)鏡像
docker run -p 8080:8080 imageid
-p:端口映射
啟動(dòng)成功如圖:
因?yàn)閟pringboot 項(xiàng)目的application.yml文件中配置的server.port 為8080.啟動(dòng)的時(shí)候需要映射 8080:8080 第一個(gè)8080 是宿柱機(jī)的端口 第二個(gè)8080 是容器的端口
到此本文的所需要實(shí)現(xiàn)的都已經(jīng)實(shí)現(xiàn)了,繼續(xù)閱讀有彩蛋哦?。。?!
在springboot 項(xiàng)目中有一個(gè)日志配置,如下
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--> <property name="LOG_HOME" value="/home/logs" /> <!-- 控制臺(tái)輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天數(shù)--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志輸出級(jí)別 --> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
我們要注意這個(gè)節(jié)點(diǎn)配置的logs 文件的保存地址
如果按照傳統(tǒng)的jar包部署方式,日志文件應(yīng)該就在宿主機(jī)的 /home/logs 里面了但是現(xiàn)在我們發(fā)現(xiàn)都沒(méi)有這個(gè)目錄了,那問(wèn)題出現(xiàn)在哪?日志文件輸出到哪了??我們進(jìn)入啟動(dòng)的springboot容器試一試,以交互形式進(jìn)入一個(gè)已經(jīng)在運(yùn)行的容器內(nèi)部
docker exec -it containerid bash
我們就看到里面有一個(gè) home目錄,依次進(jìn)入目錄我們會(huì)發(fā)現(xiàn)日志文件在這里了!
思考,我們前面不是使用到了數(shù)據(jù)卷的命令嘛,是否可以把容器內(nèi)的路徑映射到虛擬機(jī)上?試試吧!停掉啟動(dòng)的容器,(我們直接刪除吧)
docker stop containerid docker rm containerid
重新啟動(dòng)容器
docker run -d -p 8080:8080 -v /home/logs:/home/logs imageid
這次我們命令加了一個(gè) -d 意思是守護(hù)線程啟動(dòng) (后臺(tái)運(yùn)行) 使用如下命令 查看啟動(dòng)的容器日志
docker logs -f containerID
可以看到,啟動(dòng)成功了,那么 按理說(shuō) locback.xml 會(huì)在我們映射的宿主機(jī)的 /home/logs 目錄下輸出我們的日志文件,我們?nèi)タ纯?輸入一系列命令,可以看到日志文件真的在這里了!
感謝各位的閱讀,以上就是“Spring Boot打包上傳Docker倉(cāng)庫(kù)的詳細(xì)過(guò)程”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Spring Boot打包上傳Docker倉(cāng)庫(kù)的詳細(xì)過(guò)程這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。