仓库名经常以两段式路径形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。国内的有些厂商可能比较慢,这个时候要借助 Docker Hub 公开服务,例如 时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库 等。
用户还可以在本地搭建私有 Docker Registry。
Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。
(但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能)。
运行 docker-registry
通过官方获取镜像,然后运行:
1 | $ docker run -d -p 5000:5000 --restart=always --name registry registry |
默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。
例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录:
1 | $ docker run -d \ |
私有仓库操作
创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。
例如私有仓库地址为 127.0.0.1:5000 , 此时的标记指令为:
1 | docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] |
大致操作如下:
1 | $ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest |
也就是说,仓库的名字要额外添加 [REGISTRY_HOST[:REGISTRY_PORT]/]
。
推送使用指令 docker push
,例如:
1 | $ docker push 127.0.0.1:5000/ubuntu:latest |
获取的指令 docker pull
,例如:
1 | $ docker pull 127.0.0.1:5000/ubuntu:latest |
HTTPS 选项
如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。
这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。
Ubuntu
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
1 | { |
Mac
编辑的 json 代码一样,但是要在 docker gui 中操作。
对于 Docker for Windows 、 Docker for Mac 在设置中编辑 daemon.json 增加和上边一样的字符串即可。
Merlin 2018.2