本文共 6690 字,大约阅读时间需要 22 分钟。
目录
市民赵铁柱在A公司担任开发工程师。
技术经理让赵铁柱找适合公司的Docker开源镜像仓库,并形成分析报告提交给经理。赵铁柱通过身边的人脉咨询和网上查找资料,最终选定了四款仓库。
1、Docker Registry
2、VMware Harbor
3、Sonatype Nexus
4、SUSE Portus
方案特性 | Docker Registry | VMware Harbor | Sonatype Nexus | SUSE Portus |
系统复杂度 | 简单 | 复杂 | 简单 | 一般 |
配置难易度 | 简单 | 复杂 | 一般 | 一般 |
Web UI管理界面 | 无 | 有 | 有 | 有 |
与外部LDAP/AD集成 | 无 | 有 | 有 | 有 |
访问权限控制 | 弱 | 强 | 弱 | 强 |
镜像复制 | 无 | 支持复制到另一个Harbor镜像库 | 支持Proxy代理到另一个镜像库 | 弱 |
镜像扫描 | 无 | 可集成Clair | 无 | 可集成Clair |
Docker Registry是最流行的开源私有镜像仓库,以镜像格式发布,在下载后运行一个Docker Registry容器即可启动一个私有镜像仓库服务。
Docker Registry的有点如下:
VMware Harbor(简称Harbor)项目是由VMware中国研发团队开发的开源容器镜像仓库系统,基于Docker Registry并对其进行了许多增强,主要特性包括:
Harbor相对于Docker Registry,提供了更好的用户管理、角色权限管理、审计日志,以及多个Harbor镜像仓库之间的镜像复制功能,可以用作企业私有镜像库的服务器。不过由于Harbor的组件较多,所以与外界的集成较为复杂。
Sonatype Nexus是一个软件仓库管理器,主要有2.X和3.X两个大版本。2.X版本主要支持Maven、P2、OBR、Yum等仓库软件;3.X版本主要支持Docker、NuGet、npm、Bower、PyPI、Ruby Gems、Apt、Conam、R、CPAN、Raw、Helm等仓库软件,也支持构建工具Maven。
Sonatype Nexus的特点如下:
SUSE Portus是另一个开源镜像库,其特点包括:
1、公司现在已经在使用Nexus当Maven私服,Nexus3又支持docker,到时用一套私服仓库就可以一举多得。
2、Harbor功能强大,但组件多,配置和运维的复杂度高,增加运维难度。
3、Docker Registry不满足公司需要,而且也没有图形界面管理;SUSE Portus跟Nexus有差不多的功能,最终公司还是选择Nexus3。
"Docker官方镜像仓库" 访问速度很慢,Sonatype Nexus允许搭建我们自己的镜像仓库,为实现镜像拉取、推送提供便利。
Sonatype Nexus是一个软件仓库管理器,主要有2.X和3.X两个大版本。2.X版本主要支持Maven、P2、OBR、Yum等仓库软件;3.X版本主要支持Docker、NuGet、npm、Bower、PyPI、Ruby Gems、Apt、Conam、R、CPAN、Raw、Helm等仓库软件,也支持构建工具Maven。
docker search nexus3
docker pull docker.io/sonatype/nexus3
指定数据卷,防止每次启动容器,容器里的数据丢失,实现容器和虚拟机数据共享
指定虚拟机与容器共享的文件夹mkdir /usr/local/docker/nexus/nexus-data
需要修改文件夹权限
chmod 777 /usr/local/docker/nexus/nexus-data
“8716903d1912 ”为nexus的镜像ID
docker run -p 8081:8081 --name nexus -v /usr/local/docker/nexus/nexus-data:/nexus-data 8716903d1912
报错:没有权限创建
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission deniedmkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission deniedOpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directoryWarning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.logWarning: Forcing option -XX:LogFile=/tmp/jvm.logjava.io.FileNotFoundException: ../sonatype-work/nexus3/tmp/i4j_ZTDnGON8hezynsMX2ZCYAVDtQog=.lock (No such file or directory) at java.io.RandomAccessFile.open0(Native Method) at java.io.RandomAccessFile.open(RandomAccessFile.java:316) at java.io.RandomAccessFile.(RandomAccessFile.java:243) at com.install4j.runtime.launcher.util.SingleInstance.check(SingleInstance.java:72) at com.install4j.runtime.launcher.util.SingleInstance.checkForCurrentLauncher(SingleInstance.java:31) at com.install4j.runtime.launcher.UnixLauncher.checkSingleInstance(UnixLauncher.java:88) at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:67)java.io.FileNotFoundException: /nexus-data/karaf.pid (Permission denied) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream. (FileOutputStream.java:213) at java.io.FileOutputStream. (FileOutputStream.java:101) at org.apache.karaf.main.InstanceHelper.writePid(InstanceHelper.java:127) at org.apache.karaf.main.Main.launch(Main.java:243) at org.sonatype.nexus.karaf.NexusMain.launch(NexusMain.java:113) at org.sonatype.nexus.karaf.NexusMain.main(NexusMain.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85) at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:69)java.lang.RuntimeException: /nexus-data/log/karaf.log (No such file or directory) at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlerInternal(BootstrapLogManager.java:102) at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlersInternal(BootstrapLogManager.java:137) at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlers(BootstrapLogManager.java:70) at org.apache.karaf.main.util.BootstrapLogManager.configureLogger(BootstrapLogManager.java:75) at org.apache.karaf.main.Main.launch(Main.java:244) at org.sonatype.nexus.karaf.NexusMain.launch(NexusMain.java:113) at org.sonatype.nexus.karaf.NexusMain.main(NexusMain.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85) at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:69)Caused by: java.io.FileNotFoundException: /nexus-data/log/karaf.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream. (FileOutputStream.java:213) at org.apache.karaf.main.util.BootstrapLogManager$SimpleFileHandler.open(BootstrapLogManager.java:193) at org.apache.karaf.main.util.BootstrapLogManager$SimpleFileHandler. (BootstrapLogManager.java:182) at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlerInternal(BootstrapLogManager.java:100) ... 12 moreError creating bundle cache.
先把容器删除
docker rm nexus
再运行启动新命令
在原先的命令基础上加了“--privileged=true”
docker run -p 8081:8081 --privileged=true --name nexus -v /usr/local/docker/nexus/nexus-data:/nexus-data 8716903d1912
注:--privileged,该参数可以设置是否给docker容器特权,如果该参数为true,使得docker容器内的root权限为宿主机的root权限,而非只是容器内的root权限
看下服务是否启动正常
docker ps
打开浏览器,访问 http://:8081/
注:有时启动会比较慢,要等会。。等不及的话,可以看下日志
docker logs nexus
出现这个界面,就说明启动成功了
管理员登录密码在 /usr/local/docker/nexus/nexus-data 中admin开头的文件中,将其拷贝输入即可
输入账号密码后,进入引导
设置新的密码
是否允许匿名访问
设置完成,这样我们就在服务器上安装了Docker私有镜像仓库Nexus
未完待续。。
参考:常见的几种开源镜像仓库介绍
转载地址:http://rrbg.baihongyu.com/