Skip to content
seo

Docker技术知识:Docker Hub容器仓库

Docker技术知识:Docker Hub容器仓库
1.Docker Hub
仓库是集中存放镜像的地方。

目前Docker官方仓库维护了一个公共仓库https://hub.docker.com,其中已经包括15000多个的镜像。

大部分需求都可以通过在Docker Hub中直接下来镜像来实现。

登陆:

可以通过执行docker login命令来输入用户名、密码和邮箱来完成注册登录。

基本操作

用户无需登录可以通过 docker search命令来查找官方仓库中的镜像,并利用docker pull 下载到本地,可以通过docker push 命令将本地镜像推送到docker hub。

先tag一下复制一个镜像,然后把镜像push到服务器上。

2.创建和使用私有仓库
使用registry镜像创建私有仓库

可以通过docker官方提供的registry镜像来搭建一套本地私有仓库。

镜像地址:https://hub.docker.com/_/registry/

命令:

docker run -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////tmp/docker-registry.db -d --name registry -p 5000:5000 registry

命令参数:

-e设定环境变量

-d从后台启动的方式镜像启动

-name 启动的容器起个名字

-p 暴露端口,容器内部的5000绑定到宿主机的5000端口上。

registry镜像本身

SEARCH_BACKEND=sqlalchemy默认索引是可以查询的

参考地址:

https://github.com/docker/docker-registry#search-engine-options

https://hub.docker.com/_/registry/

# 1. 先配置,提前解决后续出现的问题:http: server gave HTTP response to HTTPS client
[sandu@bogon ~]$ sudo vim /etc/doker/daemon.json # 没有该文件的话就创建一个
{ "insecure-registries":["192.168.0.192:5000"] } # ip为本机的ip,5000端口为后续使用的端口
# 重启docker服务
[sandu@bogon ~]$ sudo systemctl daemon-reload
[sandu@bogon ~]$ sudo systemctl restart docker.service
# 2. 登陆docker
[sandu@bogon ~]$ sudo docker login
# 3.拉取私有仓库镜像
[sandu@bogon ~]$ sudo docker run -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////tmp/docker-registry.db -d --name registry -p 5000:5000 registry
[sudo] password for sandu:
Unable to find image 'registry:latest' locally
Trying to pull repository docker.io/library/registry ...
latest: Pulling from docker.io/library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for docker.io/registry:latest
1cec256c7e63bb6b29cbeb7ae1b3b25fc53fbb86122b950eee788f553ce14619

# 查看当前运行的容器
[sandu@bogon ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
630bf936586d registry "/entrypoint.sh /e..." 9 minutes ago Up 9 minutes 0.0.0.0:5000->5000/tcp registry

# 查看现有镜像
[sandu@bogon ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 9f38484d220f 4 months ago 202 MB
docker.io/registry latest f32a97de94e1 5 months ago 25.8 MB

# 4.拉取一个公共镜像,修改后打算上传到私有仓库,需要给该镜像重新赋值一个tag
[sandu@bogon ~]$ sudo docker tag docker.io/centos 192.168.0.192:5000/sanduzxcvbnm/test2_registry
# 注意:前面的参数是打算上传到私有仓库的镜像,后面那个是重新赋值的tag,最前面的是私有仓库地址,中间的是在docker官网注册的用户名,后者是镜像名

[sandu@bogon ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.0.192:5000/sanduzxcvbnm/test2_registry latest 9f38484d220f 5 months ago 202 MB
docker.io/centos latest 9f38484d220f 5 months ago 202 MB
docker.io/registry latest f32a97de94e1 5 months ago 25.8 MB

# 5.上传镜像到私有仓库
[sandu@bogon ~]$ sudo docker push 192.168.0.192:5000/sanduzxcvbnm/test2_registry

3.仓库加速服务
加速下载官方镜像。

推荐服务:https://dashboard.daocloud.io/

点击加速器:https://dashboard.daocloud.io/mirror

4.仓库管理
Registry Web UI 用于镜像的查询,删除。

镜像地址:https://hub.docker.com/r/atcol/docker-registry-ui/

# 拉取管理仓库的web镜像,把私有仓库绑定到管理仓库web并启动
[sandu@bogon ~]$ sudo docker run -d --name registry_ui -p 8080:8080 -e REG1=http://192.168.0.192:5000/v1/ atcol/docker-registry-ui

# 问题
界面上虽然能看到自己创建的私有仓库信息,但是界面提示:ping faild
查看日志:docker logs -f registry_ui,报错信息如下:
2019-08-12 03:24:00,187 [http-nio-8080-exec-5] ERROR web.RepositoryService - Failed to ping http://192.168.0.192:5000/v1/_ping: 404 : Not Found
此问题留待以后解决,初步判断是需要给私有仓库添加认证信息