Jenkins+Docker自動化部署Spring boot專案 (二)搭建docker私庫Harbor
前言
docker映象的push、pull都需要映象庫。現在不少大廠提供免費的映象庫,如docker hub,163 hub,也可以自己搭建一個私有映象庫。我用了vmware公司開源的harbor作為docker私有庫,相比docker官方提供的私有庫registry,harbor提供了管理介面,還可以分配使用者許可權,適合企業級使用。這是harbor的地址.
harbor不是一個映象,而是有多個映象支撐,所以需要去官方手動下載一個installer,再在installker中的原始配置檔案中配置好相應引數,再執行指令碼生成映象所需要的配置檔案,最後通過docker-compose啟動。
前置條件
OS: ubuntu 16
docker版本: 17
docker-compose版本: 1.21
搭建過程
下載installer
去這裡 下載最新版本的harbor安裝器,它分線上和離線兩種包,我下載的時候,最新版本是1.5.1,還未提供線上包,所以下載了離線包。
下載成功後,在linux任意目錄解壓
tar xvf harbor-offline-installer-<version>.tgz
配置
解壓出來後就是一個同名資料夾,裡面有很多檔案和資料夾,我們只需要配置兩個檔案harbor.cfg和docker-compose.yml。
harbor.cfg只要配置如下一個地方
#The IP address or hostname to access admin UI and registry service.
#DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname = 192.168.1.100:8090
harbor支援域名和ip兩種方式,我用了簡單的ip方式,還可以配置https訪問。harbor.cfg中的ui_url_protocol屬性設定為https。當然,https證書要自己做。具體可參考官網
docker-compose.yml主要是改下容器對映的埠,預設是把容器內的80埠對映到宿主機的80埠,現在改成對映宿主機的8090埠(我把容器其它往外對映的埠也改到宿主機上不常用埠上了)
然後執行install.sh,沒問題的話,會生成配置檔案和啟動映象。如果映象未啟動,則使用命令docker-compose up啟動。
注意:如果後面想改harbor.cfg的內容並生效,單獨重啟容器是沒用的,需要重新執行prepare後再啟動容器,命令如下:
$ sudo docker-compose down -v
$ vim harbor.cfg
$ sudo prepare
$ sudo docker-compose up -d
啟動成功後,harbor會啟動八個docker容器,看著有點多,但資源佔的都不多。
然後瀏覽器開啟http://ip:8090進入管理平臺,預設密碼是admin/Harbor12345。在管理平臺,可以管理映象和使用者許可權控制。
推送拉取映象
推送
首先有一個spring boot專案,pom.xml檔案新增如下內容:
<properties>
<docker.image.prefix>192.168.1.100:8090</docker.image.prefix>
<docker.project.name>demo</docker.project.name>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<repository>${docker.image.prefix}/${docker.project.name}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
在專案主目錄下寫Dockerfile檔案,內容如下:
FROM java:8
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN bash -c 'touch /app.jar'
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
EXPOSE 7882
CMD ["-jar", "/app.jar"]
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xms256m", "-Xmx512m", "-XX:PermSize=64m", "-XX:MaxPermSize=128m", "-Xss512k"]
我在ENTRYPOINT中設定了JVM堆記憶體引數是為了控制容器佔記憶體太大。
執行mvn打包和打成映象命令
mvn clean package -DskipTests dockerfile:build
dockerfile:build命令需要在安裝docker的環境下執行
執行完畢後,當前機器通過sudo docker images就可以看到剛才打好的映象,映象名字是192.168.1.100:8090/demo/專案名。
先登入再執行映象推送命令:
sudo docker login --u admin -p Harbor12345 192.168.1.100:8090
sudo docker push 192.168.1.100:8090/demo/專案名
拉取映象
拉取映象很簡單
sudo docker login --u admin -p Harbor12345 192.168.1.100:8090
sudo docker pull 192.168.1.100:8090/demo/專案名
harbor就這樣搭建配置完成了。
遇到的問題
在docker login的時候會報這個錯:http: server gave HTTP response to HTTPS client,這是因為Haror設定了http,docker客戶端預設是https,需要改下本地docker環境
在/etc/docker/daemon.json(如果沒有就新建)中新增以下程式碼:
{ "insecure-registries":["xx.xx.xx.xx:8090"] }
再重啟即可