centos7下搭建docker私有仓库

本次用来做 docker 仓库的环境说明如下:
系统:CentOS 7.6
docker版本: 1.13.1
ip地址:
仓库: 192.168.56.99 hostname为centos7
本地:192.168.56.100 hostname为dockerrepository

运行 docker 仓库

拉取 docker registry 镜像

docker pull docker.io/registry

启动容器

启动前我们用 docker inspect 命令,看一下需要images需要挂载的盘:看到 Volumes 参参数

        "Volumes": {
            "/var/lib/registry": {}
        },

下面运行该镜像

 docker run -d -p 5000:5000 --restart=always --name=registry -v /soft/docker/repository:/var/lib/registry --privileged=true registry
  • -d:后台运行
    -p:将容器的5000端口映射到宿主机的5000端口
    –restart:docker服务重启后总是重启此容器
    –name:容器的名称
    -v:将容器内的 /var/lib/registry 映射到宿主机的 /soft/docker/repository 目录

上传 docker 镜像

先获取一个 hello-world 镜像

docker pull library/hello-world

查看镜像

# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/registry      latest              f32a97de94e1        2 weeks ago         25.8 MB
docker.io/hello-world   latest              fce289e99eb9        2 months ago        1.84 kB

镜像命名

镜像的名字由两部分组成:repository 和 tag。
[image name] = [repository]:[tag]

接下来我们对上面的 hello-world 进行重命名:docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

docker tag fce289e99eb9 192.168.56.99:5000/hello:v1.0

** 注意:这里不能用大写字母,不然会报错:xxx is not a valid repository/tag **

再次用 docker images发现是拷贝了一个 images 出来

[root@centos7 ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
test-docker                latest              4348eee9a514        23 hours ago        121 MB
docker.io/openjdk          8-jdk-alpine        e9ea51023687        2 weeks ago         105 MB
192.168.56.99:5000/hello   v1.0                fce289e99eb9        2 months ago        1.84 kB
docker.io/hello-world      latest              fce289e99eb9        2 months ago        1.84 kB

推送镜像到私有仓库

[root@centos7 docker]# docker push 192.168.56.99:5000/hello:v1.0
The push refers to a repository [192.168.56.99:5000/hello]
af0b15c8625b: Pushed 
v1.0: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524

查看仓库

[root@dockerrepository soft]# curl 192.168.56.99:5000/v2/_catalog
{"repositories":["hello"]}

推送成功~

拉取私有库的镜像

先删除本地的私有镜像

[root@centos7 docker]# docker rmi 192.168.56.99:5000/hello:v1.0
Untagged: 192.168.56.99:5000/hello:v1.0
Untagged: 192.168.56.99:5000/hello@sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a

再拉取该镜像:

Trying to pull repository 192.168.56.99:5000/hello ... 
v1.0: Pulling from 192.168.56.99:5000/hello
Digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
Status: Downloaded newer image for 192.168.56.99:5000/hello:v1.0

再运行一次的话,会获得最新版本的镜像

[root@centos7 docker]# docker pull 192.168.56.99:5000/hello:v1.0
Trying to pull repository 192.168.56.99:5000/hello ... 
v1.0: Pulling from 192.168.56.99:5000/hello
Digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
Status: Image is up to date for 192.168.56.99:5000/hello:v1.0

具体的api得查看官方文档:
https://docs.docker.com/registry/spec/api/

搭建 web 服务

为了方便管理,我们需给其搭建一个 web 后台界面来访问

错误集锦

推送报错

The push refers to a repository [192.168.56.99:5000/hello]
An image does not exist locally with the tag: 192.168.56.99:5000/hello

原因:
重名名的时候要指定好其对应的仓库,不然就是默认的docker仓库(DockerHub)
正确格式应该为:

docker tag imageId 仓库地址/新的名称:tag

还是推送报错(没错,我就是这么皮!) http: server gave HTTP response to HTTPS client

The push refers to a repository [192.168.56.99:5000/hello]
Get https://192.168.56.99:5000/v1/_ping: http: server gave HTTP response to HTTPS client

解决办法: 修改 /etc/docker/deamon.json 文件配置私有仓库。

  1. 要先去配置私有仓库,按照前面的配置。仓库的地址为 192.168.56.99:5000
vi /etc/docker/daemon.json

加入insecure-registries配置:

{
  "registry-mirrors": ["https://registry.dockercn.com","https://docker.mirrors.ustc.edu.cn","https://docker.mirrors.ustc.edu.cn"],
  "insecure-registries": ["192.168.56.99:5000"]
} 

重启docker

systemctl restart docker 

仍旧是推送报错(没想到吧~)

The push refers to a repository [192.168.56.99:5000/hello]
af0b15c8625b: Retrying in 1 second 

到192.168.56.99上看一下docker日志。-f 代表持续输出文件内容。registry是我们仓库容器的命名

docker logs -f registry

看到下面的内容,

time="2019-03-22T08:25:42.217991747Z" level=error msg="response completed with error" err.code=unknown err.detail="filesystem: mkdir /var/lib/registry/docker: permission denied" err.message="unknown error" go.version=go1.11.2 http.request.host="192.168.56.99:5000" http.request.id=750b0e5a-c508-4e9c-89b9-8b4dbbecdca4 http.request.method=POST http.request.remoteaddr="192.168.56.100:47320" http.request.uri="/v2/hello/blobs/uploads/" http.request.useragent="docker/1.13.1 go/go1.10.3 kernel/3.10.0-957.10.1.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/1.13.1 \(linux\))" http.response.contenttype="application/json; charset=utf-8" http.response.duration=1.348042ms http.response.status=500 http.response.written=164 vars.name=hello 

注意这一句:filesystem: mkdir /var/lib/registry/docker: permission denied

是因为CentOS7中的安全模块selinux把权限禁掉了。我们在启动 registry 的时候要给 registry 添加 --privileged=true 参数

启动仓库的时候用下面命令:

 docker run -d -p 5000:5000 --restart=always  -v /soft/docker/repository:/var/lib/registry --privileged=true registry

注意这个时候就不要加上 --name 属性了,因为名为registry 的容器已经存在了

参考文章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在CentOS 7上安装Docker私有仓库的步骤如下: 1. 首先,确保已经安装了Docker。如果没有安装,请使用以下命令安装: ``` sudo yum install docker ``` 2. 接下来,创建一个目录来存储私有仓库的镜像和数据: ``` sudo mkdir /opt/docker-registry ``` 3. 使用以下命令启动私有仓库容器: ``` sudo docker run -d -p 5000:5000 --name registry \ -v /opt/docker-registry:/var/lib/registry \ registry:2 ``` 此命令将从Docker Hub下载最新版本的Registry镜像,并将其启动在名为“registry”的容器中。容器将在本地端口5000上监听传入的连接,并将所有的镜像和数据存储在“/opt/docker-registry”目录中。 4. 配置Docker客户端以使用私有仓库。在需要使用私有仓库的机器上,编辑或创建“/etc/docker/daemon.json”文件,将以下内容添加到其中: ``` { "insecure-registries": ["myregistrydomain.com:5000"] } ``` 将“myregistrydomain.com”替换为私有仓库的主机名或IP地址。此配置告诉Docker客户端,可以信任指定的私有仓库,允许从该仓库拉取镜像。 5. 重新启动Docker守护程序: ``` sudo systemctl restart docker ``` 现在,您可以将镜像推送到私有仓库中,并从该仓库拉取镜像。例如,要将名为“myimage”的镜像推送到私有仓库,请执行以下命令: ``` sudo docker tag myimage myregistrydomain.com:5000/myimage sudo docker push myregistrydomain.com:5000/myimage ``` 要从私有仓库中拉取该镜像,请使用以下命令: ``` sudo docker pull myregistrydomain.com:5000/myimage ``` ### 回答2: 在CentOS7中安装Docker私有仓库可以按照以下步骤进行: 步骤1:安装Docker 首先,你需要在CentOS7上安装Docker。可以通过执行以下命令来安装最新版本的Docker: ``` sudo yum install docker ``` 步骤2:启动Docker服务 安装完成后,启动Docker服务: ``` sudo systemctl start docker ``` 步骤3:下载Docker私有仓库镜像 接下来,我们需要下载Docker私有仓库镜像。可以通过运行以下命令来下载最新版本的Docker仓库镜像: ``` sudo docker pull registry ``` 步骤4:创建Docker私有仓库容器 下载完镜像后,我们需要创建Docker私有仓库容器。可以运行以下命令: ``` sudo docker run -d -p 5000:5000 --restart=always --name registry registry ``` 这样就创建了一个名为“registry”的Docker私有仓库容器,并将其映射到主机的5000端口。 步骤5:测试私有仓库 现在,我们可以测试私有仓库是否正常工作。可以通过运行以下命令在私有仓库中创建一个映像: ``` sudo docker tag <镜像名> localhost:5000/<镜像名> sudo docker push localhost:5000/<镜像名> ``` 然后,从私有仓库中拉取这个映像: ``` sudo docker pull localhost:5000/<镜像名> ``` 如果能够成功创建和拉取映像,说明Docker私有仓库已经安装并运行成功。 步骤6:设置Docker客户端使用私有仓库 如果你希望在其他机器上访问私有仓库,需要在每个Docker客户端上修改Docker配置文件。打开配置文件`/etc/docker/daemon.json`,添加以下内容: ``` { "insecure-registries" : ["<私有仓库地址>:5000"] } ``` 保存并关闭文件后,重新启动Docker服务: ``` sudo systemctl restart docker ``` 现在,你可以在其他Docker客户端上使用私有仓库了。 这就是在CentOS7中安装Docker私有仓库的步骤。希望对你有所帮助。 ### 回答3: 在CentOS 7中安装Docker私有仓库需要以下步骤: 1. 安装Docker:首先,需要安装Docker Engine,可以使用以下命令进行安装: ``` sudo yum install docker -y ``` 2. 启动Docker服务:安装完成后,启动并激活Docker服务: ``` sudo systemctl start docker sudo systemctl enable docker ``` 3. 创建Docker私有仓库容器:使用以下命令创建并启动Docker私有仓库容器: ``` sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 这将在本地主机的5000端口上启动私有仓库容器,并设置自动启动。 4. 配置Docker客户端:为了让Docker客户端能够与私有仓库通信,需要在客户端的Docker配置文件中添加以下内容: ``` sudo vi /etc/docker/daemon.json ``` 在打开的文件中添加以下内容保存并退出: ``` { "insecure-registries" : ["your-registry-domain:5000"] } ``` 将"your-registry-domain"替换为您的主机名或IP地址。 5. 重启Docker服务:在修改Docker配置文件后,重启Docker服务使其生效: ``` sudo systemctl restart docker ``` 至此,在CentOS 7中安装和配置了Docker私有仓库。您可以通过使用Docker命令将镜像推送到私有仓库,并在其他主机上使用该仓库进行拉取和部署镜像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值