目录
由于默认情况下,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.youkuaiyun.com/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