Docker 私服搭建记录
docker pull registry
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 –restart=always –privileged=true –name registry registry:latest
参数说明
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
–privileged=true 在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误
–name registry:创建容器命名为registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;测试是否成功: curl http://127.0.0.1:5000/v2/_catalog, 返回仓库的镜像列表
在中央仓库下载一个镜像: docker pull openjdk
更改这个镜像的标签: docker tag imageId domain:5000/openjdk 或者 docker tag imageName:tag domain:5000/openjdk
上传镜像到私服: docker push domain:5000/openjdk
报错: Get https://172.18.18.90:5000/v2/: http: server gave HTTP response to HTTPS client
解决: 需要https的方法才能上传,我们可以修改下daemon.json
vim /etc/docker/daemon.json
{
“insecure-registries”: [ “domain:5000”]
}
无网络搭建
- 在有网络的机器上
docker pull registry
docker save registry > registry.tar
保存到个 tar 包- 拷贝到服务器上,
docker load -i registry.tar
导入镜像 docker images
查看镜像- 再继续上面的操作
docker 开启 tcp 端口
vim /usr/lib/systemd/system/docker.service
修改
1 | ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \ |
重启即可,之后 idea 可输入 tcp://ip:2375 连接
允许跨域请求
1 | version: 0.1 |
head 添加
1 | Access-Control-Allow-Headers: ['Origin,Accept,Content-Type,Authorization'] |
之后保存到本地,再挂载到容器的 /etc/docker/registry/config.yml 中
Harbor 搭建 Docker 私服
上述方式搭建的 docker 私服,属于比较简单使用的方法,只能在命令行上操作,很不方便,比如不能直接删除镜像,无法添加用户,设置私有仓库
Harbor 是一个图形化的私服管理界面,安装使用更易于操作
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。
- 下载离线包: https://github.com/goharbor/harbor/releases
- 解压
- 更改配置文件
docker-compose.yml
私服的仓库端口我们默认设置为 5000,但是 docker-compose.yml 文件中并没有配置,我们需要添加一个 ports 配置
1 | registry: |
- Harbor 默认使用的是 80 端口,不想使用的话可切换其他端口, 配置在 docker-compose.yml 的最下方
1 | proxy: |
此处需要注意的是,如果更改了其他端口,则需要在 common/templates/registry/config.yml
文件中更改一个配置 realm 加上端口,否则登录会出现错误
1 | auth: |
- 修改配置文件
harbor.cfg
1 | hostname = 34.0.7.183 ## 改为 IP 或者 域名,不要写错 localhost 或者 127.0.0.1 |
./prepare
完成配置./install.sh
开始安装打开浏览器
创建一个项目
joylau
注意这个名称很重要,名称对不上的话,会造成 image push 不成功,还有就是若果这个项目的是公开的话,则所有人都可以 pull ,但是 push 的话是需要登录的,登录的用户名和密码在该项目的成员下.默认的 admin 用户就可以登录,退出命令
docker login 34.0.7.183:5000 ; docker logout 34.0.7.183:5000
之后的操作都是日常操作了
Docker Registry 添加认证
生成用户名密码
1 | docker run --rm --entrypoint htpasswd registry -Bbn username password > ./htpasswd |
假设将生成的文件放到 /registry/pwd/htpasswd
挂载用户名密码文件
-v /registry/pwd:/auth -e “REGISTRY_AUTH=htpasswd” -e “REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm” -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
至此,添加用户名密码完成,现在 pull 和 push 都需要登录
Docker login 密码存储
默认存储位置为: $HOME/.docker/config.json
很不安全, 使用 base64 解密即可看到用户名密码
将密码存储到钥匙串:
- 下载工具: https://github.com/docker/docker-credential-helpers/releases
- 将 docker-credential-osxkeychain 配置到 path 路径
- 配置 config.json
1 | { |