目錄
由於默認情況下,Docker 並不對鏡像做認證和校驗,從任何渠道獲取的鏡像都可以直接運行。如果無法保證鏡像的發佈者是可信的,並且鏡像在傳遞的過程中內容沒有被篡改,那麼就存在着鏡像內容被惡意植入的風險。Docker 並不對鏡像做認證和校驗,從任何渠道獲取的鏡像都可以直接運行。如果無法保證鏡像的發佈者是可信的,並且鏡像在傳遞的過程中內容沒有被篡改,那麼就存在着鏡像內容被惡意植入的風險。
因此,自建私有鏡像倉庫,自己使用基礎鏡像打包成自己想要的鏡像是企業中經常使用的手段,很好的避免了外來人員向鏡像中注入惡意程序,保證鏡像的安全性。
一、What is Harbor?
Harbor是一個開源雲原生倉庫,用於存儲,簽名和掃描容器映像中的漏洞。
Harbor通過提供信任,合規性,性能和互操作性來解決常見的挑戰。它爲無法使用公共或基於雲的容器倉庫或希望在雲間獲得一致體驗的組織和應用程序填補了空白。
簡單來說,Harbor 就是一個用於存儲和分發 Docker 容器鏡像的企業級私有鏡像倉庫。
Harbor 是 VMware 公司開源的企業級 Docker Registry 項目,項目地址爲 https://github.com/vmware/harbor。其目標是幫助用戶迅速搭建一個企業級的 Docker registry 服務。它以 Docker 公司開源的 registry 爲基礎,提供了管理UI,基於角色的訪問控制(Role Based Access Control),AD/LDAP集成、以及審計日誌(Auditlogging) 等企業用戶需求的功能,同時還原生支持中文。Harbor 的每個組件都是以 Docker 容器的形式構建的,使用 Docker Compose 來對它進行部署。
二、環境準備
1. VMware Centos7 虛擬機
- 運行內存2G
- 處理器2核
- 能夠ping通互聯網
- 內網ip:192.168.100.10 ;外網ip:192.168.200.10(外網必須有)
2. Docker版本:17.03.2-ce
3. Docker-compose版本:1.17.1
4. Harbor版本:1.1.2
三、安裝指定版本Docker
前文有做詳細講解,可參考 Centos 7指定版本安裝Docker
https://blog.csdn.net/qq_40791253/article/details/84251998
四、安裝Dcoker-compose
參考文檔:http://www.dockerinfo.net/docker-compose-%e9%a1%b9%e7%9b%ae
兩種安裝方式,任選其一即可
1. 命令安裝
下載指定版本
# curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
對二進制文件賦予可執行權限
# chmod +x /usr/local/bin/docker-compose
測試下docker-compose是否安裝成功
# docker-compose --version
顯示出docker-compose版本即安裝成功
docker-compose version 1.17.1, build 6d101fb
提示:這種方法雖然簡單,但是安裝速度極慢
2. 通過 Python 的 pip 安裝
安裝pip
# yum install -y wget
# wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
# tar -vxf setuptools-1.4.2.tar.gz
# cd setuptools-1.4.2
# python2.7 setup.py install //因爲centos鏡像自帶 Python
# easy_install-2.7 pip
安裝docker compose
# sudo pip install -U docker-compose
# docker-compose --version //測試安裝是否成功
五、安裝Harbor
1. 下載Harbor安裝包
# yum install -y wget
# wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
# tar -zxvf harbor-offline-installer-v1.1.2.tgz
提示:安裝包有點大,建議將鏈接複製至迅雷或其他下載器進行下載,再上傳至服務器
# cd harbor
// 將harbor.cfg進行備份
# cp harbor.cfg harbor.cfg.bak
2. 修改Harbor相應配置文件
harbor.cfg爲harbor的配置文件,對此進行相對於的修改
# vi harbor.cfg
hostname =192.168.200.10
注:這裏我只修改了 hostname 若有其他需求請參考官方文檔
啓動 harbor,修改完配置文件後,在的當前目錄執行./install.sh,Harbor服務就會根據當期目錄下的docker-compose.yml開始下載依賴的鏡像,檢測並按照順序依次啓動各個服務。
啓動完成後,我們訪問剛設置的 hostname 即可,http://192.168.200.10/,默認是80端口,如果端口占用,我們可以去修改docker-compose.yml文件中,對應服務的端口映射。
# ./install.sh
3. 登錄 Harbor
登錄 Web Harbor
輸入用戶名 admin,默認密碼Harbor12345(或已修改密碼)登錄系統。
- 項目:新增/刪除項目,查看鏡像倉庫,給項目添加成員、查看操作日誌、複製項目等
- 日誌:倉庫各個鏡像create、push、pull等操作日誌
- 系統管理
- 用戶管理:新增/刪除用戶、設置管理員等
- 複製管理:新增/刪除從庫目標、新建/刪除/啓停複製規則等
- 配置管理:認證模式、複製、郵箱設置、系統設置等
- 其他設置
- 用戶設置:修改用戶名、郵箱、名稱信息
- 修改密碼:修改用戶密碼
注意:非系統管理員用戶登錄,只能看到有權限的項目和日誌,其他模塊不可見。
我們要嘗試下能不能把自己 Docker 裏面的鏡像 push 到 Harbor 的 library 裏來(默認這個 library 項目是公開的,所有人都可以有讀的權限,都不需要 docker login 進來,就可以拉取裏面的鏡像)。
將 "insecure-registries": [ "192.168.200.10"] 添加至 /etc/docker/daemon.json 文件中
注:不要忘加逗號,不然Docker將重啓失敗
# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://tc3xfheh.mirror.aliyuncs.com"],
"insecure-registries": [ "192.168.200.10"]
}
//更新配置、重啓docker
# sudo systemctl daemon-reload
# sudo systemctl restart docker
//查看docker配置信息
# docker info
Containers: 7
Running: 7
Paused: 0
Stopped: 0
Images: 22
Server Version: 17.03.2-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.782 GiB
Name: zh-master
ID: OJG2:6R5U:PKAK:72ZT:FVG6:CAT2:XYWA:TIWP:XCAN:334N:7D4S:BKII
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries: //鏡像倉庫地址
192.168.200.10
127.0.0.0/8
Registry Mirrors: //鏡像加速器
https://tc3xfheh.mirror.aliyuncs.com
Live Restore Enabled: false
WARNING: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavio
Reformat the filesystem with ftype=1 to enable d_type support.
Running without d_type support will not be supported in future releases.
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
說明一下:
"registry-mirrors": ["https://tc3xfheh.mirror.aliyuncs.com"] 這是我之前所配置得鏡像加速器,可用於外網,較爲方便
"insecure-registries": [ "192.168.200.10"] 這是我們自己所搭建得鏡像倉庫,用於內網的鏡像上傳與下載,更加符合企業要求,滿足安全性與保密性
登錄 Linux Harbor
# docker login 192.168.200.10
Username: admin
Password: //默認密碼爲 Harbor12345,此時輸入密碼是看不見得
Login Succeeded
六、測試Harbor平臺
# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
7c9d20b9b6cd: Pull complete
Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
Status: Downloaded newer image for busybox:latest
# docker tag busybox:latest 192.168.200.10/library/busybox:v1
# docker login 192.168.200.10 (需重新登錄一下)
Username (admin):
Password:
Login Succeeded
# docker push 192.168.200.10/library/busybox:v1
The push refers to a repository [192.168.200.10/library/busybox]
6c0ea40aef9d: Pushed
v1: digest: sha256:a2209c2117f9a1f1a165ac37ccc1e45baf7e5d99dcef7df0a1c35d3858c35c0c size: 527