安装harbor之前,需要安装好Python,Docker,DockerCompose。Python需要2.7以上的版本,Docker需要1.10以上的版本;Docker Compose 需要1.6.0以上的版本。

一:安装Docker Compose

https://docs.docker.com/compose/install/中介绍的各种安装方法,只有使用pip的方式才能安装成功。

使用pip安装,因为docker-compose的依赖包可能会与原有python环境的系统包冲突,因此文档中建议使用virtualenv。

首先安装virtualenv:

pip install virtualenv

然后为安装docker-compose创建虚拟环境:

mkdir -p /opt/testvenv
cd /opt/testvenv
virtualenv venv

激活虚拟环境,安装docker-compose:

source venv/bin/activate
pip install docker-compose

安装好的docker-compose在目录/opt/testvenv/venv/bin下,创建软链接:

ln -s /opt/testvenv/venv/bin/docker-compose /usr/local/bin/docker-compose

这样便安装好了docker-compose。

二:安装harbor

1:使用源码安装,通过git下载源码:

mkdir -p /opt/harbor/git
cd /opt/harbor/git
git clone https://github.com/vmware/harbor

2:配置harbor

在安装harbor之前,需要修改/opt/harbor/git/harbor/Deploy/harbor.cfg中的配置参数,然后执行prepare脚本来生成harbor所有容器的配置文件,最后运行docker compose启动harbor。

在文件harbor.cfg中,需要配置的参数如下:

hostname:私有仓库的主机名。可以是IP地址,也可以是域名。这里配置成192.168.1.104;

ui_url_protocol:用户访问私仓时使用的协议,默认时http,这里配置成https;

harbor_admin_password:harbor的管理员账户密码,默认密码是Harbor12345,用户名是admin;

其他配置参数可以参考:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

3:配置https访问

用户访问harbor默认的协议是http,但是registry目前默认支持https访问,如果使用http,需要在访问私仓的主机上,修改docker的配置文件,增加--insecure-registry选项。

要配置https访问,首先生成证书:

mkdir -p /opt/harbor/cert/
openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout \
/opt/harbor/cert/domain.key -out /opt/harbor/cert/domain.crt ...
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:192.168.1.104
Email Address []:

然后将生成的证书复制到nginx容器的特定目录下:

cp /opt/harbor/cert/domain.crt /opt/harbor/git/harbor/Deploy/config/nginx/cert/
cp /opt/harbor/cert/domain.key /opt/harbor/git/harbor/Deploy/config/nginx/cert/

然后修改/opt/harbor/git/harbor/Deploy/config/nginx目录下的配置文件:

mv nginx.conf  nginx.conf.bak
cp nginx.https.conf nginx.conf

修改nginx.conf文件内容:

  server {
listen 443 ssl;
server_name 192.168.1.104; # SSL
ssl_certificate /etc/nginx/cert/domain.crt;
ssl_certificate_key /etc/nginx/cert/domain.key;
...
}
server {
listen 80;
server_name 192.168.1.104;
...
}

4:生成修改harbor容器的配置文件:

cd /opt/harbor/git/harbor/Deploy
./prepare

运行prepare之后,需要修改/opt/harbor/git/harbor/Deploy/docker-compose.yml文件中,容器的数据卷目录,首先创建数据卷目录:

mkdir -p /opt/harbor/data
mkdir -p /opt/harbor/data/registry
mkdir -p /opt/harbor/data/log
mkdir -p /opt/harbor/data/database

然后修改docker-compose.yml文件内容:

version: '2'
services:
log:
build: ./log/
volumes:
- /opt/harbor/data/log/:/var/log/docker/
ports:
- 1514:514
registry:
image: library/registry:2.4.0
volumes:
- /opt/harbor/data/registry:/storage
- ./config/registry/:/etc/registry/
environment:
- GODEBUG=netdns=cgo
ports:
- 5001:5001
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
syslog-tag: "registry"
mysql:
build: ./db/
volumes:
- /opt/harbor/data/database:/var/lib/mysql
env_file:
- ./config/db/env
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
syslog-tag: "mysql"
ui:
build:
context: ../
dockerfile: Dockerfile.ui
env_file:
- ./config/ui/env
volumes:
- ./config/ui/app.conf:/etc/ui/app.conf
- ./config/ui/private_key.pem:/etc/ui/private_key.pem
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
syslog-tag: "ui"
proxy:
image: library/nginx:1.9
volumes:
- ./config/nginx:/etc/nginx
ports:
- 80:80
- 443:443
depends_on:
- mysql
- registry
- ui
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
syslog-tag: "proxy"

因为当前主机访问外网时需要设置http代理,因此,在生成ui容器时也需要设置代理,因此需要修改/opt/harbor/git/harbor/Dockerfile.ui文件,在需要访问外网的apt-get和go get命令之前,设置代理地址:

FROM golang:1.6.2

MAINTAINER jiangd@vmware.com

RUN export https_proxy=http://192.168.1.22:1888 \
&& export http_proxy=http://192.168.1.22:8000 \
&& apt-get update \
&& apt-get install -y libldap2-dev \
&& rm -r /var/lib/apt/lists/* COPY . /go/src/github.com/vmware/harbor
#golang.org is blocked in China
COPY ./vendor/golang.org /go/src/golang.org
WORKDIR /go/src/github.com/vmware/harbor/ui RUN export https_proxy=http://192.168.1.22:1888 \
&& export http_proxy=http://192.168.1.22:8000 \
&& go get -d github.com/docker/distribution \
&& go get -d github.com/docker/libtrust \
&& go get -d github.com/go-sql-driver/mysql \
&& go build -v -a -o /go/bin/harbor_ui ENV MYSQL_USR root \
MYSQL_PWD root \
REGISTRY_URL localhost:5000 COPY views /go/bin/views
COPY static /go/bin/static
COPY favicon.ico /go/bin/favicon.ico RUN chmod u+x /go/bin/harbor_ui \
&& sed -i 's/TLS_CACERT/#TLS_CAERT/g' /etc/ldap/ldap.conf \
&& sed -i '$a\TLS_REQCERT allow' /etc/ldap/ldap.conf WORKDIR /go/bin/
ENTRYPOINT ["/go/bin/harbor_ui"] EXPOSE 80

5:启动harbor

cd /opt/harbor/git/harbor/Deploy
docker-compose up -d

此时,就会启动几个docker容器:

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                      NAMES
d4ee5bb2f8f6 library/nginx:1.9 "nginx -g 'daemon off" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp deploy_proxy_1
1cf7fd095f7a deploy_mysql "docker-entrypoint.sh" 3 hours ago Up 3 hours 3306/tcp deploy_mysql_1
10ed70671b2e library/registry:2.4.0 "/bin/registry serve " 3 hours ago Up 3 hours 5000/tcp, 0.0.0.0:5001->5001/tcp deploy_registry_1
6ac4be116f4e deploy_ui "/go/bin/harbor_ui" 3 hours ago Up 3 hours 80/tcp deploy_ui_1
c42937c4362c deploy_log "/bin/sh -c 'cron && " 3 hours ago Up 3 hours 0.0.0.0:1514->514/tcp deploy_log_1

三:访问harbor私仓

需要访问私仓的客户端,需要复制刚生成的证书:将harbor主机上的/opt/harbor/cert/domain.crt文件,复制到客户端宿主机上的:

/etc/docker/certs.d/192.168.1.104/ca.crt

上传镜像:

docker tag hello-world 192.168.1.104/library/hello-world
docker push 192.168.1.104/library/hello-world

此时,在浏览器中访问192.168.1.104,就可以看见hello-world镜像:

下载镜像:

docker pull 192.168.1.104/library/hello-world

ps:

1:在私仓上删除镜像操作较麻烦,未研究;

2:mirror模式配置了很长时间都不成功;

参考:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

https://github.com/vmware/harbor/blob/master/docs/configure_https.md

https://www.ustack.com/blog/docker/

04使用harbor配置私仓的更多相关文章

  1. 纯净CentOS搭建harbor镜像私仓

    物理宿主机IP:  192.168.1.4 在官网下载 CentOS-7-x86_64-DVD-1810 用Hyper-v建立一代虚机,安装时遇分辨率问题无法继续,需要在选择启动界面按TAB键以编辑启 ...

  2. kubernetes配置secret拉取私仓镜像

    2017.05.10 19:48* 字数 390 阅读 5216评论 0喜欢 8 对于公司内部的项目, 我们不可能使用公有开放的镜像仓库, 一般情况可能会花钱买docker私仓服务, 或者说自己在服务 ...

  3. Maven私仓配置

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  4. 如何搭建自己的Maven远程私仓

    1.首先,配置好Maven,jdk等必备环境 2.配置好环境后,下载最新版本的nexus 下载地址:http://www.sonatype.org/nexus/go 3.打开目录nexus-***\b ...

  5. Maven deploy部署jar包到远程私仓

    Maven deploy部署jar包到远程私仓 maven deploy介绍 maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的 ...

  6. 不一样的go语言-athens私仓安装

    前言   本系列文章曾多次提及go的依赖管理,提到了私仓,构件系统等概念,也曾提及当前流行的go构件系统,如athens,jfrog artifactory.鉴于jfrog的收费特性,本文只选择ath ...

  7. maven私仓搭建——nexus3

    maven私仓搭建——nexus3本文主要介绍maven私仓在windows下的搭建.本文主要参考:http://www.cnblogs.com/bingyeh/p/5913486.html好,下面上 ...

  8. [转]ubuntu 10.04下的配置tftp服务器

    [转]ubuntu 10.04下的配置tftp服务器 http://www.cnblogs.com/geneil/archive/2011/11/24/2261653.html 第1步:安装tftp所 ...

  9. Ubuntu 12.04环境下配置Postgresql和phppgadmin

    Ubuntu 12.04环境下配置Postgresql 9.1 和phppgadmin 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/zjianb ...

随机推荐

  1. selenium自动化方式爬取豆瓣热门电影

    爬取的代码如下: from selenium import webdriver from bs4 import BeautifulSoup import time #发送请求,获取响应 def get ...

  2. java并发系列(七)-----ConcurrentHashMap原理分析(JDK1.8)

    JDK1.8的实现已经摒弃了Segment的概念,而是直接用Node数组+链表+红黑树的数据结构来实现,并发控制使用Synchronized和CAS来操作,整个看起来就像是优化过且线程安全的HashM ...

  3. 关于网上大量对Vue双向绑定的错误理解

    对于Vue的双向绑定,现在基本是个前端都听说过,面试官也喜欢问这个问题.但对于Vue双向绑定的原理,掘金.博客园和segmentfault等技术社区充斥着大量的错误文章.这些文章的题目基本样子如下 “ ...

  4. [jnhs]hibernate只能创建一张/表不创建表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'kaihu.t_client_info' doesn't exist和org.hibernate.exception.SQLGrammarException: could not execute statement

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'kaihu.t_client_info' doesn't exist ...

  5. GIT → 02:Git和Svn比较

    2.1 SVN介绍 2.1.1 SVN简介 SVN 属于集中式版本管理控制系统,服务器中保存了所有文件的不同版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新.Subversio ...

  6. Neo4j系列-简介及应用场景

    1.什么是Neo4j? Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储 ...

  7. Nginx 扫盲

    layout: post title: Nginx-扫盲 category: Nginx tags: [代理] Nginx 基本安装和配置文件讲解 简介 轻量级web服务器.反向代理服务 负载均衡策略 ...

  8. 助力深度学习!阿里开源可插拔 GPU 共享调度工具

    根据 Gartner 对全球 CIO 的调查结果显示,人工智能将成为 2019 年组织革命的颠覆性力量.对于人工智能来说,算力即正义,成本即能力,利用 Docker 和 Kubernetes 代表云原 ...

  9. HTML input type=file文件选择表单的汇总(一)

    HTML input type=file 在onchange上传文件的过程中,遇到同一个文件二次上传无效的问题. 最近在做项目过程中,遇到同一文件上传的时候,二次上传没有效果,找了资料,找到了原因: ...

  10. python中bisect模块的使用

    一般用于二分查找, 当然列表应该是有序表 参考于: http://blog.csdn.net/xiaocaiju/article/details/6975714