前言
通过本文你将学习到以下技能:
- 如何创建Docker本地私有镜像仓库
- 如何推送镜像到私有仓库
非认证方式
[root@k8s-master ~]$ docker run -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry --name registry registry:2.4.1
认证方式
# opt下创建文件夹
[root@k8s-master ~]$ cd /opt && mkdir registry && mkdir /opt/registry/auth
# 创建账号密码
[root@k8s-master ~]$ docker run --entrypoint htpasswd registry:2.4.1 -Bbn owater 123456 >> /opt/registry/auth/htpasswd
# 运行 [root@k8s-master ~]$ docker run -d -p 5000:5000 --restart=always \ --name registry \ -v /opt/registry/auth/:/auth/ \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v /opt/registry/:/var/lib/registry/ \ registry:2.4.1
配置信息
# 开启远程访问
[root@k8s-master ~]$ vi /usr/lib/systemd/system/docker.service
# 将以下内容
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 修改成如下 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock # 让Docker支持http上传镜像 [root@k8s-master ~]$ echo '{ "insecure-registries":["http://10.8.135.104:5000"] }' > /etc/docker/daemon.json # 使配置生效 [root@k8s-master ~]$ systemctl daemon-reload # 重新启动Docker服务 [root@k8s-master ~]$ systemctl restart docker # 开启防火墙的Docker构建端口 [root@k8s-master ~]$ firewall-cmd --zone=public --add-port=2375/tcp --permanent [root@k8s-master ~]$ firewall-cmd --reload
查看仓库镜像
非认证方式可以通过命令查看
[root@k8s-master ~]$ curl http://IP:5000/v2/_catalog
认证方式,需要界面登录 http://IP:5000/v2/_catalog
推送镜像到私有仓库
# 登录私有库
[root@k8s-master ~]$ docker login --username=[用户名] IP:5000
# 给镜像打标签,docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
[root@k8s-master ~]$ docker tag k8s-owater/kubedocker:0.0.1-SNAPSHOT 10.8.135.104:5000/k8s-owater/kubedocker:0.0.1-SNAPSHOT
# 推送私有镜像 [root@k8s-master ~]$ docker push k8s-owater/kubedocker:0.0.1-SNAPSHOT
删除镜像
# docker exec <Registry-容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>
[root@k8s-master ~]$ docker exec registry rm -rf /var/lib/registry/docker/registry/v2/repositories/k8s-owater/kubedocker
# docker exec <Registry-容器名> bin/registry garbage-collect /etc/docker/registry/config.yml
[root@k8s-master ~]$ docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
本文使用 tech.souyunku.com 排版