Docker镜像仓库

原文: Docker镜像仓库

这里仅以一个场景: 自己制作的镜像如何分享, 主要说明私有镜像仓库Harbor的搭建使用

Docker Hub

首先介绍Docker Hub

推送&拉取镜像

推送自己的镜像到Docker Hub上, 因为网速... 这里用一个超小的镜像试验

[root@bogon ~]# docker images | grep busy
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
busybox                      latest              af2f74c517aa        6 days ago          1.2MB

1. 打标签

docker tag busybox:latest thank037/busybox:1.0
[root@bogon ~]# docker images | grep busy
busybox                      latest              af2f74c517aa        6 days ago          1.2MB
thank037/busybox             latest              af2f74c517aa        6 days ago          1.2MB

注意这里的thank037就是DockerHub中的username

2. 推送

docker push thank037/busybox:1.0

去自己的镜像仓库看下吧, 有了

如果推送过程中提示: denied: requested access to the resource is denied

登录一下即可: docker login

拉取镜像很常见

docker pull thank037/busybox:1.0


国内的镜像仓库

国内也有很多, 例如网易, DaoCloud, 阿里云等, 上传镜像和拉取镜像的姿势基本和Docker Hub一样

网易的这两天个人认证无法使用, 必须要企业认证, 所以这里实验阿里云的

首先需要在阿里云-容器镜像服务中创建一个命名空间

创建命名空间

可以设置仓库类型, 公有私有

推送和拉取

省略自己制作镜像的过程, 这里以一个我已经拉取好的官方镜像redis:latest为例

首先登录

$ sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
# tag
docker tag redis:latest registry.cn-hangzhou.aliyuncs.com/thank/redis:1.0

# push 
docker push registry.cn-hangzhou.aliyuncs.com/thank/redis:1.0

# pull
docker pull registry.cn-hangzhou.aliyuncs.com/thank/redis:1.0

去镜像仓库看看吧, 有了

镜像仓库

基于代码源构建

上面的方式是自己在docker环境中制作好镜像, 上传到仓库, 这里介绍一种基于代码源的构建方式

以GitHub为例, 代码源为: https://github.com/Thank037/spring-cloud-study2

  1. 创建镜像仓库: 写好仓库名称, 选择好命名空间即可

  2. 设置代码源: 选择github, 第一次使用需要绑定账号

  3. 构建设置

    • 构建设置: 例如可以开启代码变更自动构建镜像
    • 构建规则设置: 设置代码源的分支/tag, Dockerfile目录和名字, 需要构建的镜像版本
  4. 开始构建: 点击规则上的立即构建即可

每次的构建过程会输出到构建日志中, 可以进行查看

构建设置


私有仓库

出于安全和速度的考虑, 很多企业会选择搭建私有镜像仓库

registry

安装和使用

是一个官方提供的镜像仓库, 安装极其简单!

docker pull registry:2

拉取完成后启动registry: docker run -d -p 5000:5000

推送和拉取过程跟推送到公有仓库差不多

# 打标签
docker tag busybox:latest localhost:5000/busybox:1.0

# 推送
docker push localhost:5000/busybox:1.0

# 拉取
docker pull localhost:5000/busybox:1.0

需要注意的是

如果其它主机在推送到registry所在主机时可能出现安全错误, 也就是镜像仓库和docker客户端不在一台机器上

在Client端/etc/docker/daemon.json中加入:

{ "insecure-registries":["ip:5000"] }

然后重启docker即可 systemctl restart docker

除了推送和拉取镜像, registry还提供了一些API, 查看镜像信息, 删除等... 例如:

[root@bogon ~]# curl localhost:5000/v2/_catalog
{"repositories":["busybox"]}

可以看到registry很轻便, 具备了基础的镜像管理功能, 但是有以下两个缺点

  • 不具备授权认证功能, 需要自己去做一些认证方案
  • 虽有API, 但没有一个好看的界面


harbor

harbor意为港湾, 很贴合它的作用

github地址: https://github.com/goharbor/harbor

记得以前是在vmware下, 现在地址转到goharbor下了

官方的定义是企业级私有Registry服务器, 实际内部也是依靠docker registry

那么它与registry相比, 一定提供了很多企业级的特性, 例如:

  • 提供良好的Web界面
  • 提供良好的安全机制, 包括角色, 权限控制, 日志等
  • 支持水平扩展
  • 传输优化, 因为镜像的分层机制, 所以每次传输并非全量, 从而提升速度

搭建

环境准备

在安装harbor之前, 需要docker环境, 除此还需要docker-compose, 不说了

安装Harbor

github release中查看需要安装的版本, 这里我用当前最新的v1.7.5

文档中有两种安装方式: offline和online, 也就是在线和离线

  • online: 在线方式会下载一个很小的tar包, 里面只有docker-compose.yml和启动脚本, 会在启动安装时在线拉取镜像
  • offline: 下载一个大概500多M的tar包, 里面包括了镜像文件, 所以安装时会快

我的浏览器设置了代理, 所以选择offline的离线包, 再上传放到docker环境的主机上

大致看下解压后的目录

[root@localhost opt]# tree harbor -CL 2
harbor                                 
├── common                             
│   ├── config                         
│   └── templates                      
├── docker-compose.chartmuseum.yml     
├── docker-compose.clair.yml           
├── docker-compose.notary.yml          
├── docker-compose.yml                 
├── harbor.cfg                         
├── harbor.v1.7.5.tar.gz               
├── install.sh                         
├── LICENSE                            
├── open_source_license                
└── prepare                            

接下来对harbor.cfg几个配置做修改, 我修改了如下:

# 注释中也说了, 不要设置成localhost和127.0.0.1阿
hostname = hub.thank.com

# 邮箱相关的设置
email_server = smtp.163.com
email_server_port = 25
email_username = coderthank@163.com
email_password = ******
email_from = thank <coderthank@163.com>

# 修改admin默认的登录密码
harbor_admin_password = 123123

更多详细的设置可参考官方文档和配置文件的注释

然后执行install.sh即可

[Step 0]: checking installation environment ...

Note: docker version: 1.13.1

Note: docker-compose version: 1.16.1

[Step 1]: loading Harbor images ...
...略

[Step 2]: preparing environment ...
...略

[Step 3]: checking existing instance of Harbor ...


[Step 4]: starting Harbor ...
...略

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://hub.thank.com.
For more details, please visit https://github.com/goharbor/harbor .

从Step可以看到这个一键脚本帮我们做了傻瓜式的安装

docker-compose帮我们完成了Harbor所需要的多个容器服务

来看一眼

  • 镜像

    [root@localhost harbor]# docker images --format "table {{.Repository}}\t{{.Size}}" | grep harbor
    goharbor/chartmuseum-photon     113 MB
    goharbor/harbor-migrator        679 MB
    goharbor/redis-photon           101 MB
    goharbor/clair-photon           164 MB
    goharbor/notary-server-photon   135 MB
    goharbor/notary-signer-photon   132 MB
    goharbor/harbor-registryctl     102 MB
    goharbor/registry-photon        86.7 MB
    goharbor/nginx-photon           35.9 MB
    goharbor/harbor-log             81.4 MB
    goharbor/harbor-jobservice      84.1 MB
    goharbor/harbor-core            95.6 MB
    goharbor/harbor-portal          40.6 MB
    goharbor/harbor-adminserver     72.3 MB
    goharbor/harbor-db              138 MB
    
  • 容器

    [root@localhost harbor]# docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}" | grep harbor
    c517af1cff6a        goharbor/nginx-photon:v1.7.5             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp
    7bb6eac57291        goharbor/harbor-jobservice:v1.7.5
    723cb4c96a0d        goharbor/harbor-portal:v1.7.5            80/tcp
    1425f64756d1        goharbor/harbor-core:v1.7.5
    f19a00ce693b        goharbor/registry-photon:v2.6.2-v1.7.5   5000/tcp
    4d3f0f8929c7        goharbor/harbor-adminserver:v1.7.5
    23df470d2b0d        goharbor/harbor-db:v1.7.5                5432/tcp
    e7d6d1cc3b1b        goharbor/harbor-registryctl:v1.7.5
    6e2912ec566e        goharbor/redis-photon:v1.7.5             6379/tcp
    ee8685192041        goharbor/harbor-log:v1.7.5               127.0.0.1:1514->10514/tcp
    

界面使用

因为刚才在配置文件赔了一个假域名, 这里我修改下hosts

192.168.118.143 hub.thank.com

访问http://hub.thank.com, 可以看到Harbor的登录页面

直接访问IP也可, 默认80端口

登录后的主页面

harbor主页

测试: 创建用户thank, 创建项目cloudlink-base和项目中添加用户thank, 角色为项目管理员

其它功能就不做介绍了, 中文简体点一点就好啦

运维管理

从前面的一键启动脚本也能看出, 我们可以用docker-compose统一完成harbor服务的运维管理

  • 停止: docker-comose stop
  • etc...

image管理

这里测试一下镜像的拉取和上传

方法跟其它仓库的没什么不一样, 不说了

# login
docker login hub.thank.com

# image tag 
docker tag redis:latest hub.thank.com/cloudlink-base/thank-redis:latest

# push 
docker push hub.thank.com/cloudlink-base/thank-redis:latest

# pull
docker pull

https问题

刚才在配置文件harbor.cfg中可以看到默认配置了http协议访问

这里在其它主机上传镜像时, docker客户端默认都是https访问Harbor, 所以会出现connection refused的错误

有两种解决办法:

  1. 前面提到过, 在/etc/docker/daemon.json加入
{
  "insecure-registries" : ["hub.thank.com"]
}
  1. 修改harbor配置文件为https方式: ui_url_protocol = https, 除此之外还需要配置证书

不是很复杂, 可以参照搭建Harbor企业级docker仓库#五、Harbor配置TLS证书

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容