1. 程式人生 > >Jenkins+Docker自動化部署Spring boot專案 (二)搭建docker私庫Harbor

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"] }

再重啟即可