一,前提條件
1,如果沒(méi)有阿里云賬號(hào)請(qǐng)注冊(cè)阿里云賬號(hào),注冊(cè)完成后在產(chǎn)品---鏡像服務(wù)里創(chuàng)建鏡像,創(chuàng)建完成后如下圖所示:
2,本地(我這里是win10環(huán)境)已安裝docker,如果沒(méi)有可去官網(wǎng)下載,下載地址:https://docs.docker.com/docker-for-windows/install/
3,maven settings.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
? ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? ? xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
? <!--本地倉(cāng)庫(kù)位置-->
? <localRepository>D:\repository</localRepository>
? <pluginGroups>
? ? ? ? <pluginGroup>com.spotify</pluginGroup>
? ? </pluginGroups>
? <proxies/>
? <servers>
? ? <server>
? ? <!--maven的pom中可以根據(jù)這個(gè)id找到這個(gè)server節(jié)點(diǎn)的配置-->?
? ? <id>docker-aliyun</id>
? ? <!--這里是在阿里云注冊(cè)的賬號(hào)-->
? ? <username>abcd</username>
? ? <!--這里是在阿里云注冊(cè)的密碼-->
? ? <password>abcd123456</password>
? ? <configuration>
? ? ? <!--這是在阿里云注冊(cè)時(shí)填寫(xiě)的郵箱-->
? ? ? <email>adcd@qq.com</email>
? ? </configuration>
? </server>
? </servers>
? <mirrors>
? <!--阿里云的鏡像-->
? <mirror>
? ? <id>alimaven</id>
? ? <name>aliyun maven</name>
? ? <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
? ? <mirrorOf>central</mirrorOf>
? </mirror>
? <!--中央倉(cāng)庫(kù)在中國(guó)的位置-->
? <mirror>
? ? <id> maven-net-cn</id>
? ? <name> Maven China Mirror</name>
? ? <url> http://maven.net.cn/content/groups/public/</url>
? ? <mirrorOf>central</mirrorOf>
? </mirror>
? </mirrors>
? <profiles>
? ? <!--配置jdk的版本-->
? ? <profile>
? ? ? <id>jdk-1.8</id>
? ? ? <activation>
? ? ? ? <activeByDefault>true</activeByDefault>
? ? ? ? <jdk>1.8</jdk>
? ? ? </activation>
? ? ? <properties>
? ? ? ? <maven.compiler.source>1.8</maven.compiler.source>
? ? ? ? <maven.compiler.target>1.8</maven.compiler.target>
? ? ? ? <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
? ? ? </properties>
? ? </profile>
? </profiles>
</settings>
二,springboot項(xiàng)目配置
1,創(chuàng)建Dockerfile文件
在項(xiàng)目的源文件路徑下新建Dockerfile文件,Dockerfile文件是構(gòu)建docker鏡像的核心文件,配置如下:
#基于哪個(gè)鏡像
FROM java:8
#將本地文件夾掛載到當(dāng)前容器
VOLUME /tmp
#復(fù)制文件到容器
ADD gold-recycle-service.jar app.jar
#聲明需要暴露的端口
EXPOSE 8086
#配置容器啟動(dòng)后執(zhí)行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
2,pom.xml文件配置
pom.xml文件需要增加以下幾點(diǎn)節(jié)點(diǎn)配置:
<properties>
? <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
? <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
? <java.version>1.8</java.version>
? <!-- 監(jiān)聽(tīng)端口 -->
? <server.port>8086</server.port>
? <!-- 鏡像名稱(chēng) docker.repostory表示倉(cāng)庫(kù)地址,docker.registry.name表示倉(cāng)庫(kù)名稱(chēng)??梢酝ㄟ^(guò)阿里云鏡像查看-->
? <docker.repostory>registry.cn-shenzhen.aliyuncs.com</docker.repostory>
? <docker.registry.name>springios</docker.registry.name>
</properties>
<!--maven docker插件-->
<plugin>
? <groupId>com.spotify</groupId>
? <artifactId>docker-maven-plugin</artifactId>
? <version>0.4.14</version>
<configuration>
? ? ? <imageName>registry.cn-shenzhen.aliyuncs.com/springios/${project.artifactId}:${project.version}</imageName>
? ? ? <!--指定docker鏡像的版本號(hào)-->
? ? ?<imageTags>
? ? ? ? <!--使用maven項(xiàng)目的版本號(hào)-->
? ? ? ? <imageTag>${project.version}</imageTag>
? ? ? ? <imageTag>latest</imageTag>
? ? ? ?</imageTags>
? ? ? <!--Dockerfile文件位置-->
? ? ? <dockerDirectory>src/main/docker</dockerDirectory>
? ? ? <!--指定推送的鏡像-->
? ? ? <dockerHost>http://127.0.0.1:2375</dockerHost>
? ?<resources>
? ??<resource>
? ? ? ? ? ? <targetPath>/</targetPath>
? ? ? ? ? ? <!--用于指定需要復(fù)制的目錄-->
? ? ? ? ? ? <directory>${project.build.directory}</directory>
? ? ? ? ? ? <!--用于指定需要復(fù)制的文件-->
? ? ? ? ? ? <include>${project.build.finalName}.jar</include>
? ? ? ? ?</resource>
? ? ?</resources>
????????<!--推送阿里云相關(guān)-->
????????<serverId>docker-aliyun</serverId>
????????<!--表示阿里云的docker倉(cāng)庫(kù)地址。阿里云的容器鏡像服務(wù)地址-->
????????<registryUrl>registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service</registryUrl>
????????<!--表示推送鏡像到倉(cāng)庫(kù)。-->
????????<pushImage>true</pushImage>
? ? </configuration>
</plugin>
<plugin>
? <groupId>org.springframework.boot</groupId>
? <artifactId>spring-boot-maven-plugin</artifactId>
? <!--加入下面兩項(xiàng)配置-->
?<executions>
? ??<execution>
? ? ??<goals>
? ? ? ? ? ? <goal>repackage</goal>
? ? ? ?</goals>
</execution>
</executions>
<configuration>
? ? ? <includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
三,推送服務(wù)
完成了以上準(zhǔn)備工作后就可以使用命令:mvn -f pom.xml clean package -DskipTests docker:build 來(lái)推送服務(wù)了 ,推送成功如下:
aliyuncs.com/springios/gold-recycle-service:0.0.1-SNAPSHOT
[INFO] Tagging registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service:0.0.1-SNAPSHOT with 0.0.1-SNAPSHOT
[INFO] Tagging registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service:0.0.1-SNAPSHOT with latest
[INFO] Pushing registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service:0.0.1-SNAPSHOT
The push refers to repository [registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service]
203c86e211c3: Pushed
35c20f26d188: Pushed
c3fe59dd9556: Pushed
6ed1a81ba5b6: Pushed
a3483ce177ce: Pushed
ce6c8756685b: Pushed
30339f20ced0: Pushed
0eb22bfb707d: Pushed
a2ae92ffcd29: Pushed
0.0.1-SNAPSHOT: digest: sha256:f4994be046ce880eb41240dcd1c47a9d8f66730457c388609003205684b5a6b1 size: 2212
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:? 49.472 s
四,阿里云服務(wù)器使用鏡像
1,登錄服務(wù)器:sudo docker login --username=szandyye2018 registry.cn-shenzhen.aliyuncs.com,密碼為開(kāi)通服務(wù)時(shí)設(shè)置的密碼。
2,下載剛推送的鏡像:sudo docker pull registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service:[鏡像版本號(hào)]
3,使用docker images查看鏡像是否下載成功。
4,啟動(dòng)鏡像:docker run --name goldService -p 8086:8086 -t registry.cn-shenzhen.aliyuncs.com/springios/gold-recycle-service:0.0.1-SNAPSHOT? ? --name:重新指定鏡像的名稱(chēng),-p:端口映射? ?-t:前臺(tái)運(yùn)行,可以看到項(xiàng)目啟動(dòng)信息。
五,瀏覽器驗(yàn)證。
注意事項(xiàng):
如果鏡像需要訪問(wèn)數(shù)據(jù)庫(kù),在打包前需要查看阿里云服務(wù)器的內(nèi)網(wǎng)地址,查看命令:ip?add,顯示信息如下:
[root@izwz97rz0layh3rvnc50xaz ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
? ? link/ether 00:16:3e:12:4e:05 brd ff:ff:ff:ff:ff:ff
? ? inet 172.18.120.230/20 brd 172.18.127.255 scope global dynamic eth0
? ? ? valid_lft 314587579sec preferred_lft 314587579sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
? ? link/ether 02:42:00:23:2e:77 brd ff:ff:ff:ff:ff:ff
? ? inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
? ? ? valid_lft forever preferred_lft forever
15: vethcfac81a@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
? ? link/ether 3e:91:41:ea:87:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
27: veth121bed1@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
? ? link/ether 4e:13:6c:8a:a3:9e brd ff:ff:ff:ff:ff:ff link-netnsid 1
[root@izwz97rz0layh3rvnc50xaz ~]#
主要看第2和第3,第二點(diǎn)eth0表示服務(wù)器的內(nèi)網(wǎng)信息,其中172.18.120.230就是服務(wù)器的內(nèi)網(wǎng)地址,該地址在使用mvn命令打包前需要寫(xiě)到配置文件中。第三點(diǎn)表示docker容器的網(wǎng)絡(luò)配置信息。