使用docker私有仓库

因为网速和大中华局域网效果,使得咱们在DockerHub下载镜像的速度很慢,甚至一些国内的镜像仓库,也感受速度不是很好。因此,颇有必要在本地或者一个咱们访问很快速的地方(本身的云服务器)搭建一套镜像仓库。有了这样一个仓库,不只能够提升下载速度,并且能够增长咱们个性化定制的镜像,以备后续使用。这篇将介绍怎样搭建本地镜像。mysql

一、运行docker仓库容器

环境准备 环境:两个装有Docker的Ubuntu虚拟机sql

  • 虚拟机一:192.168.112.132 用户开发机
  • 虚拟机二:192.168.112.136 用做私有仓库

备注:也可使用一台直接在开发机器上安装私有仓库docker

此处咱们准备了两个虚拟机,分别都安装了Docker,其中132机器用做开发机,136机器用做registry私有仓库机器。环境准备好以后接下来咱们就开始搭建私有镜像仓库。json

搭建私有仓库安全

首先在136机器上下载registry镜像,这里我指定了tag为2bash

$ docker pull registry:2
2: Pulling from 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 registry:2
docker.io/library/registry:2
复制代码

此过程会持续几分钟,视网络情况而定,请读者耐心等候。服务器

注意:笔者在pull的时候,指定了TAG,即为使用v2版本的registry,对于v1版本的registry,读者大可没必要在乎了,基本上是淘汰了。网络

下载完以后咱们经过该镜像启动一个容器curl

$ docker run -d -p 5000:5000 registry:2
facbef4cddad45676efd27385deb0cc1d7bfef378bee07993b926de8c97c3abb
复制代码

默认状况下,会将仓库存放于容器的/tmp/registry目录下,这样若是容器被删除,则存放于容器中的镜像也会丢失,因此咱们通常状况下会指定本地一个目录挂载到容器的/tmp/registry下,以下:tcp

$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry:2
复制代码

这是一条典型的run命令,不出意外的话,Registry就在5000端口启动了。使用下面命令查看

$ docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
facbef4cddad        registry:2                        "/entrypoint.sh /etc…"   53 seconds ago      Up 50 seconds       0.0.0.0:5000->5000/tcp   exciting_kalam
复制代码

能够看到咱们启动了一个容器,地址为:192.168.112.136:5000

接下来咱们就要操做把一个本地镜像push到私有仓库中 在132机器下pull一个比较小的镜像来测试(此处使用的是busybox)

$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
Digest: sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
Status: Image is up to date for busybox:latest
docker.io/library/busybox:latest
复制代码

接下来修改一下该镜像的tag

$ docker tag busybox 192.168.112.136:5000/busybox
复制代码

查看一下

$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
wordpress                  <none>              57d9b2fca364        6 days ago          501MB
mysql                      <none>              2151acc12881        6 days ago          445MB
192.168.112.136:5000/busybox     latest              db8ee88ad75f        10 days ago         1.22MB
busybox                    latest              db8ee88ad75f        10 days ago         1.22MB
复制代码

接下来把打了tag的镜像上传到私服

$ docker push 192.168.112.136:5000/busybox
The push refers to repository [127.0.0.1:5000/busybox]
0d315111b484: Pushed 
latest: digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 size: 527
复制代码

二、修改通讯方式为http

Registry官方镜像为了保证安全,缺省使用https进行通讯,毕竟在生产环境中若是使用了http,是很容易被中间人攻击的。 测试环境中咱们能够将通讯方式修改成http,生产环境强烈不建议这样作。 修改/etc/docker/daemon.json文件,没有则手动建立,在这个文件添加以下内容:

{
  "insecure-registries" : ["192.168.132.131:5000"]
}
复制代码

重启docker服务

$ systemctl daemon-reload
$ systemctl restart docker
复制代码

获取私有仓库列表

$ curl -XGET http://192.168.112.136:5000/v2/_catalog
# 获取httpd镜像列表
$ curl -XGET http://192.168.112.136:5000/v2/httpd/tags/list
复制代码
相关文章
相关标签/搜索