一、pull registry镜像

docker pull registry

二、启动registry容器

docker run -d -p 5000:5000 --name docker-registry --restart=always registry

docker run命令:创建一个新的容器并运行一个命令
语法:

docker run [OPTIONS] IMAGE

解释一下上面启动容器命令的OPTIONS参数含义:
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--ame: 为容器指定一个名称;
--restart=always:重启docker后会自动启动容器

运行完上面的docker run命令之后,可以使用docker ps查看运行中的容器,也可以使用curl http://10.192.10.168:5000/v2/_catalog来查看该私有仓库中的镜像列表,当然容器刚创建起来的时候仓库里面是没有镜像的,只会返回{“repositories”:[]}。

三、配置参数(两种方式二选一)

此时如果直接使用docker push去推送镜像,会报错http: server gave HTTP response to HTTPS client,因此需要配置信任私有仓库。
以下两种方式请二选一,不可以两处都配,否则重启docker服务会失败。

方式一

这种方式不用去修改主文件 docker.service的参数,通过daemon.json配置文件来管理,更为安全、合理。

vi /etc/docker/daemon.json

如果该文件不存在,则会被自动创建,在文件中添加以下内容:

{
    "insecure-registries": ["10.192.10.168:5000"]
}

如果该文件原先就存在,例如:

{
  "registry-mirrors": [
    "http://10.192.10.168:5000"
],
  "data-root":"/var/lib/docker"
}

更改方式如下(其实还是一样的):

{
  "registry-mirrors": [
    "http://10.192.10.168:5000"
],
  "insecure-registries":
        ["10.192.10.168:5000"],
  "data-root":"/var/lib/docker"
}

方式二

1、修改/etc/default/docker文件
在docker配置文件/etc/default/docker中新增以下内容:

DOCKER_OPTS="--insecure-registry=10.192.10.168:5000"

2、修改/lib/systemd/system/docker.service文件
在[Service]下面更改
①新增以下内容:

EnvironmentFile=-/etc/default/docker

②修改ExecStart值为如下:(建议注释掉原来的,再在下面新增一句,以免之后需要恢复)

ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

四、重启docker服务

service docker restart

注意此时可能会提示:docker.service changed on disk. Run ‘systemctl daemon-reload’ to reload units
那么按照提示执行systemctl daemon-reload,再service docker restart即可。

如果在第三步中方式一和二都做了,那么重启服务的时候会报如下错误:

Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.

此时参照提示使用systemctl status docker.service命令,可以看到详情,其中部分错误提示:

Dec 14 16:24:02 master systemd[1]: Starting Docker Application Container Engine...
Dec 14 16:24:03 master dockerd[9389]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: insecure-registries: (from flag: [xx.xx.xx.xx:50... [xx.xx.xx.xx:xxxx])

如果是这样,删除/恢复daemon.json或docker.service文件其中一处的配置,再重启容器即可。

五、尝试推送镜像

之前写过一篇docker上传镜像的文章,在此不再赘述,有需要可以参考。

docker push 10.192.10.168:5000/test/xxxx:Vx.x.x

此时如果你之前创建容器的时候没有设置–restart=always,就会发现报错connect: connection refused,是因为容器没有启动,手动再启动下容器就可以了。
手动启动容器命令:

docker start 容器ID

如果此时你找不到容器ID了,使用docker ps -a命令,可以显示所有的容器信息(包括未启动的),container id一栏就是容器ID

docker ps -a

推送成功后,再使用curl http://10.192.10.168:5000/v2/_catalog命令,就可以验证是否push成功了。

六、Docker Registry WebUI 工具

使用WebUI工具管理镜像会更方便,可以直观地看到registry 中的资源情况。(此步我并没有做,放上来仅供参考)
Docker Registry WebUI 工具: docker-registry-web
1、下载 docker-registry-web 镜像

docker pull hyper/docker-registry-web

2、启动 registry-web

docker run -d -p 8080:8080 --name registry-web --link registry -e REGISTRY_URL=http://10.192.10.168:5000/v2 -e REGISTRY_NAME=10.192.10.168:5000 hyper/docker-registry-web

3、访问web界面
浏览器输入10.192.10.168:8080,即可查看registry仓库中的镜像信息。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐