一、搭建私有鏡像倉庫
說明:
1、 這里是通過阿里云,搭建Docker私有鏡像倉庫。
2、 這里打包的鏡像是從官網(wǎng)拉下來的,并不是自己項目創(chuàng)建的新鏡像,主要測試
首先進入阿里云創(chuàng)建鏡像倉庫: https://dev.aliyun.com/search.html-->點擊管理中心(初次使用會提示開通,然后設置密碼)
然后創(chuàng)建命名空間和鏡像倉庫:

1、登錄阿里云
docker login --username=xxxx@qq.com registry.cn-hangzhou.aliyuncs.com
用于登錄的用戶名為阿里云賬號全名,密碼為上面開通開通服務時設置的密碼。
2、將鏡像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/binron/xx_repertory:[鏡像版本號]
docker push registry.cn-hangzhou.aliyuncs.com/binron/xx_repertory:[鏡像版本號]
3、從Registry中拉取鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/binron/xx_repertory:[鏡像版本號]
二、案例演示
1、推送到阿里云鏡像倉庫
(1) 先登陸阿里云鏡像倉庫
docker login --username=xxxx@qq.com registry.cn-hangzhou.aliyuncs.com
(2) 把本地鏡像打包,推送到阿里云鏡像倉庫
docker tag dbfc48660aeb registry.cn-hangzhou.aliyuncs.com/binron/xx_repertory:xxiaonginx
docker push registry.cn-hangzhou.aliyuncs.com/binron/xx_repertory:xxiaonginx
(3) 在鏡像倉庫查看
我們可以看到 鏡像倉庫已經(jīng)存在該倉庫,說明推送成功
2、從阿里云鏡像倉庫拉取
docker pull registry.cn-hangzhou.aliyuncs.com/binron/xx_repertory:xxiaonginx
#拉取完成后
docker image

三、微服務應用Docker鏡像
1、啟動類
@SpringBootApplication
@RestController
public class DockerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(DockerDemoApplication.class, args);
}
//用來測試 是否鏡像容器是否成功
@RequestMapping("/user")
public Object findUser(){
Map<String, String > map = new HashMap<>();
map.put("name", "xuxiaoxiao");
map.put("age","2");
return map;
}
}
2、dockerfile-maven-plugin插件 pom.xml配置
<properties>
<docker.image.prefix>xdclass</docker.image.prefix>
</properties>
<build>
<finalName>docker-demo</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
##Spotify 的 docker-maven-plugin 插件是用maven插件方式構(gòu)建docker鏡像的。
${project.build.finalName} 產(chǎn)出物名稱,缺省為${project.artifactId}-${project.version}
3、配置Dockerfile (默認是項目根目錄)
Dockerfile : 由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應用于基礎鏡像, 最終創(chuàng)建一個新的鏡像
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
參數(shù)講解:
FROM <image>:<tag> 需要一個基礎鏡像,可以是公共的或者是私有的, 后續(xù)構(gòu)建會基于此鏡像,如果同一個Dockerfile中建立多個鏡像時,可以使用多個FROM指令
VOLUME 配置一個具有持久化功能的目錄,主機 /var/lib/docker 目錄下(docker安裝目錄)創(chuàng)建了一個臨時文件,并鏈接到容器的/tmp。該步驟是可選的,如果涉及到文件系統(tǒng)的應用就很有必要了。/tmp目錄用來持久化到 Docker 數(shù)據(jù)文件夾,因為 Spring Boot 使用的內(nèi)嵌 Tomcat 容器默認使用/tmp作為工作目錄
ARG 設置編譯鏡像時加入的參數(shù),JAR_FILE是pom文件中的值 ENV 是設置容器的環(huán)境變量
COPY : 只支持將本地文件復制到容器 ,還有個ADD更強大但復雜點
ENTRYPOINT 容器啟動時執(zhí)行的命令
EXPOSE 8080 暴露鏡像端口
4、執(zhí)行打包命令
mvn install dockerfile:build
#maven打包構(gòu)建,會觸發(fā)單元測試,部分情況可以跳過,
# mvn install -Dmaven.test.skip=true dockerfile:build
5、啟動鏡像
docker run -d --name "start" -p 8080:8080 鏡像ID
然后訪問應用,測試是否成功返回
6、查看日志
docker logs -f 容器ID
7、生產(chǎn)環(huán)境常見問題之配置中心訪問
配置中心訪問出錯,路徑不對
#解決:修改所有的注冊中心,增加下面配置
eureka:
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
prefer-ip-address: true