Nexus作为私库管理最为流行的工具之一,用于包的管理和Docker镜像管理的私库管理场景中非常常用。Easypack利用最新版本的oss版Nexus作为基础镜像用于提供类似服务。本文将同时给出具体步骤结合最新发行的Docker-CE版本实现镜像私库的管理。
Why Nexus 3
这里整理了为什么使用Nexus 3的一些理由,在做选型的时候可以做一个简单参照。
项目 | 详细 |
---|---|
为什么使用Nexus 3 | http://blog.csdn.net/liumiaocn/article/details/62050525 |
docker版本
本次使用的docker的版本为17.03.0-ce,但是应该并不限于此版本,其他版本未作验证。
[root@liumiaocn ~]# docker versionClient: Version: 17.03.0-ce API version: 1.26 Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 08:10:07 2017 OS/Arch: linux/amd64Server: Version: 17.03.0-ce API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 08:10:07 2017 OS/Arch: linux/amd64 Experimental: false[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
下载镜像
[root@liumiaocn ~]# docker pull liumiaocn/nexusUsing default tag: latestlatest: Pulling from liumiaocn/nexusDigest: sha256:b93f9a6bba2b35ada33c324cd06bd2c732fc1bed352df186af1a013e228af8d8Status: Image is up to date for liumiaocn/nexus:latest[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
启动Nexus
项目 | 详细 |
---|---|
Nexus UI | 8081 |
private repo | 8082 |
proxy repo | 8083 |
URL | http://192.168.32.123:8081/ |
[root@liumiaocn ~]# docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus liumiaocn/nexus222abae47fcf9d32c821bff6426edd03f6757a3dd4cbe07517dada5d800e173f[root@liumiaocn ~]#
- 1
- 2
- 3
logon
项目 | 详细 |
---|---|
URL | http://192.168.32.123:8081/ |
用户名称 | admin |
用户密码 | admin123 |
登陆之后
仓库类型
具体仓库类型主要分为hosted/proxy/group三种。具体含义如下:
项目 | 详细说明 |
---|---|
hosted | 本地存储,像官方仓库一样提供本地私库功能 |
proxy | 提供代理其他仓库的类型 |
group | 组类型,可以组合多个仓库为一个地址提供服务 |
创建priavete仓库
创建一个Hosted的仓库作为private仓库,具体设定信息如下:
项目 | 详细说明 |
---|---|
类型 | docker (hosted) |
Name | docker-repo-private |
HTTP Port | 8082 |
Blob store | docker-repo-private |
Deployment policy | Allow redeploy |
创建proxy仓库
创建一个proxy仓库,具体设定信息如下:
项目 | 详细说明 |
---|---|
类型 | docker (proxy) |
Name | docker-repo-proxy |
Location of the remote repository being proxied | https://registry-1.docker.io |
Docker Index | Use Docker Hub |
Blob store | docker-repo-proxy |
创建group仓库
创建一个group仓库,具体设定信息如下:
项目 | 详细说明 |
---|---|
类型 | docker (group) |
Name | docker-repo-group |
HTTP Port | 8083 |
Blob store | docker-repo-group |
Member repositories | docker-repo-private |
Member repositories | docker-repo-proxy |
docker设定
Docker的私库可以使用HTTP或者HTTPS,Nexus 3都予以支持,本文的方式采用HTTP方式,因此需要设定docker,在docker启动前设定如下信息是需要的
项目 | 详细说明 |
---|---|
设定对象文件 | /etc/docker/daemon.json |
设定内容 | insecure-registries |
设定详细内容,如下所示:
[root@liumiaocn ~]# cat /etc/docker/daemon.json{ "insecure-registries": [ "192.168.32.123:8082", "192.168.32.123:8083" ], "disable-legacy-registry": true}[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
重启docker
[root@liumiaocn docker]# systemctl restart docker[root@liumiaocn docker]#
- 1
- 2
启动nexus
随着docker的重启,nexus的容器也需要启动,详细如下所示:
[root@liumiaocn docker]# docker start nexusnexus[root@liumiaocn docker]#
- 1
- 2
- 3
确认
至此,Nexus的设定准备基本就绪,可以确认结果了。
docker login
为了进行操作,需要事先进行docker login的操作
项目 | 详细说明 |
---|---|
private仓库 | docker login -u admin -p admin123 192.168.32.123:8082 |
proxy仓库 | docker login -u admin -p admin123 192.168.32.123:8083 |
执行确认
[root@liumiaocn ~]# docker login -u admin -p admin123 192.168.32.123:8082Login Succeeded[root@liumiaocn ~]# docker login -u admin -p admin123 192.168.32.123:8083Login Succeeded[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
proxy仓库确认
从remote仓库pull下来镜像,然后确认是否在proxy仓库中存在
[root@liumiaocn ~]# docker pull 192.168.32.123:8083/alpine:3.53.5: Pulling from alpine627beaf3eaaf: Downloadingunknown blob[root@liumiaocn docker]#
- 1
- 2
- 3
- 4
- 5
查了一下nexus的一些issue,发现有不少都是跟blob相关,看起来相关的小的问题还有一些在不断的收拾中,但是不影响结果。
确认proxy仓库,发现pull的alpine的3.5版本已然在proxy仓库中保存完毕,所以上面的unknown blob也确实没有影响结果。
private仓库确认
事前镜像确认
[root@liumiaocn ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 00f017a8c2a6 2 days ago 1.11 MBliumiaocn/maven latest 833b66f10ce6 5 days ago 160 MBliumiaocn/nexus latest 932d715eb7e1 5 days ago 460 MBliumiaocn/gitlab latest 2462fb291203 5 days ago 1.21 GBliumiaocn/jenkins latest 6668ecd39e4f 5 days ago 293 MB[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
tag busybox镜像
[root@liumiaocn ~]# docker tag busybox 192.168.32.123:8082/busybox:latest[root@liumiaocn ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE192.168.32.123:8082/busybox latest 00f017a8c2a6 2 days ago 1.11 MBbusybox latest 00f017a8c2a6 2 days ago 1.11 MBliumiaocn/maven latest 833b66f10ce6 5 days ago 160 MBliumiaocn/nexus latest 932d715eb7e1 5 days ago 460 MBliumiaocn/gitlab latest 2462fb291203 5 days ago 1.21 GBliumiaocn/jenkins latest 6668ecd39e4f 5 days ago 293 MB[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
docker push
[root@liumiaocn ~]# docker push 192.168.32.123:8082/busybox:latestThe push refers to a repository [192.168.32.123:8082/busybox]c0de73ac9968: Pushedlatest: digest: sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5 size: 527[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
结果确认:busybox镜像已经被正常地push到了private仓库中
docker pull
为了确认docker pull的动作,事前先将之前的busybox先行删除,以确认确实下载了新的busybox镜像到本地。
[root@liumiaocn ~]# docker rmi busyboxUntagged: busybox:latestUntagged: busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f[root@liumiaocn ~]# docker rmi 192.168.32.123:8082/busyboxUntagged: 192.168.32.123:8082/busybox:latestUntagged: 192.168.32.123:8082/busybox@sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5Deleted: sha256:00f017a8c2a6e1fe2ffd05c281f27d069d2a99323a8cd514dd35f228ba26d2ffDeleted: sha256:c0de73ac99683640bc8f8de5cda9e0e2fc97fe53d78c9fd60ea69b31303efbc9[root@liumiaocn ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEliumiaocn/maven latest 833b66f10ce6 5 days ago 160 MBliumiaocn/nexus latest 932d715eb7e1 5 days ago 460 MBliumiaocn/gitlab latest 2462fb291203 5 days ago 1.21 GBliumiaocn/jenkins latest 6668ecd39e4f 5 days ago 293 MB[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
docker pull操作:可以看到确实是从private仓库下载下来了镜像,而且速度也明显快了非常之多。
[root@liumiaocn ~]# docker pull 192.168.32.123:8082/busyboxUsing default tag: latestlatest: Pulling from busybox04176c8b224a: Pull completeDigest: sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5Status: Downloaded newer image for 192.168.32.123:8082/busybox:latest[root@liumiaocn ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE192.168.32.123:8082/busybox latest 00f017a8c2a6 2 days ago 1.11 MBliumiaocn/maven latest 833b66f10ce6 5 days ago 160 MBliumiaocn/nexus latest 932d715eb7e1 5 days ago 460 MBliumiaocn/gitlab latest 2462fb291203 5 days ago 1.21 GBliumiaocn/jenkins latest 6668ecd39e4f 5 days ago 293 MB[root@liumiaocn ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
总结
至此,如何使用Nexus管理Docker镜像已然十分清楚,但是如何很好的管理镜像,备份机制/版本控制/差分管理/定期cache/及时清理等方面还有很多问题需要考虑,需要在实际的工作中不断实践总结。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow