前言
最近开发微服务项目越来越多,各种头疼的环境问题接踵而至,打算把一些相对固定的模块打成Docker镜像独立发布,跟业务模块分开维护。原来只是用 Docker Hub 来发布一些自己的镜像,是时候考虑建个自己的 Docker 私服了,不管因为网络的原因,还是出于代码安全考虑,都有必要这样做。刚好Nexus3可以创建 Docker 仓库,还可以跟 Maven 仓库共用,一举两得,就它了。
从网上找了很多安装步骤,发现总有各种问题,所以记录下,送有缘人 ^
环境
CentOS 7.5
sonatype/nexus3
Docker 18.06.1-ce
Oracle JDK8
安装配置
先大概说下安装步骤,用docker运行nexus3,然后再在nexus3里面创建docker仓库。
启动 Nexus 容器
docker run -d --name nexus3 --restart=always \
-p 8081:8081 \
-p 8082:8082 \
-p 8083:8083 \
--mount src=nexus-data,target=/nexus-data \
sonatype/nexus3
用浏览器打开 http://10.108.26.122:8081/
,出现 nexus 管理界面则说明启动成功,默认用户名:admin
,密码:admin123
配置 Docker 仓库
使用 admin 用户登录管理界面,点击上面的小齿轮按钮进入配置界面。
创建私有仓库
创建一个新的 Docker (hosted) 仓库
建议给每个仓库创建新的 Blob store
,这样每个仓库在 /nexus-data
下面都会有不同的文件夹,但并不是强制的,可以选择默认。
创建指向 Docker Hub 的代理仓库
创建一个新的 Docker (proxy) 仓库
创建仓库组对外提供统一的 URL
创建一个新的 Docker (group) 仓库
注意:
默认情况下 Docker client 使用 HTTPS 协议和仓库通信,需要配置 SSL 证书,这里就不介绍了,直接使用 HTTP 协议;
Docker 仓库需要两个不同的端口,其中 8082 从代理仓库上拉取镜像、 8083 推送镜像到私服;
Docker 主机访问私服镜像仓库
配置客户端和项目使用 Nexus 仓库
上面我们配置的是 http 协议,与私服通信,首先要配置 Docker daemon 客户端使用 http 协议代替 https 协议。
操作系统不一样配置也有差异,这里介绍 CentOS 的配置,其他的参照 docker 文档。
# vi /etc/docker/daemon.json
{
"insecure-registries": [
"10.108.26.122:8082",
"10.108.26.122:8083"
],
"disable-legacy-registry": true
}
重启 docker
sudo systemctl restart docker
docker client 身份认证
docker login -u admin -p admin123 10.108.26.122:8082
docker login -u admin -p admin123 10.108.26.122:8083
执行以后会生成认证文件 ~/.docker/config.json
,有兴趣的可以自己去看看,这里就不列出来了。
仓库已经搭建好了,现在来体验下成果:
pull 镜像
现在可以通过私服拉镜像了(注意使用的是 8082 端口)
# docker pull 10.108.26.122:8082/httpd:2.4-alpine
打开 Nexus 管理页面可以看 Docker 仓库里面已经有了 httpd:2.4-alpine 这个镜像了。
拉取自定义镜像类似
# docker pull 10.108.26.122:8082/test:1.0
push 镜像
创建定制的容器镜像
-
首先编写一个定制容器镜像脚本
# vim Dockerfile
FROM debian MAINTAINER test <test@example.com> CMD ["echo", "hello world"]
-
创建镜像
# docker build -t="test" .
-
运行容器测试
# docker run test
可以看到控制台打印出 hello world
了,证明我们自制的镜像成功。
推送自己的镜像到私服时候需要注意,必需要给镜像打 tag (注意使用 8083 端口)
# docker tag test 10.108.26.122:8083/test:1.0
# docker push 10.108.26.122:8083/test:1.0
搜索镜像
# docker search 10.108.26.122:8083/test
总结
大功告成,终于可以不用担心网络和安全问题了,跟 Maven 仓库使用一样方便,公司内部使用私服是个很好的选择。
参考:
https://blog.sonatype.com/using-nexus-3-as-your-repository-part-3-docker-images