Docker搭建私有仓库

默认情况下,在执行docker pull命名时,docker是从官方的镜像源地址拉取下载镜像的,即registry.hub.docker.com这个地址。该地址是docker公司提供的公共仓库。

对于具有商业秘密的项目上传到官方的公共仓库是不安全的,如果在单位内部需要统一管理并共享单位内部使用的镜像,需要搭建私有仓库。

所谓的私有仓库,就是在本地(局域网)搭建类似公共仓库的镜像仓库,可以将镜像提交到私有仓库,实现镜像共享,也避免了商业安全相关的危险。

如何搭建私有仓库

docker官方通过容器的方式提供了私有仓库的部署服务,官方的私有仓库镜像是registry。

[root@jamza_vm_master_litepaas registry_test]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
registry                2.6.2               d1fd7d86a825        16 months ago       33.28 MB
registry                latest              d1fd7d86a825        16 months ago       33.28 MB

一般使用registry镜像创建容器就完成了私有仓库的部署,但是一般为了完成定制配置,需要使用定制化的配置文件。

配置文件config.yml仿真私有仓库容器的/etc/docker/registry/目录下。配置文件的典型内容如下:

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  secret: docker-registry
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Headers: ['*']
    Access-Control-Allow-Origin: ['*']
    Access-Control-Allow-Methods: ['GET,POST,PUT,DELETE']
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

注意,如果不设置http.secret,则会遇到如下的错误:No HTTP secret provided - generated random secret.

随后,创建私有仓库容器:

docker run -d -p 5000:5000 --restart=always \
 -v /var/lib/registry/:/var/lib/registry/ \
 -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml \
 --name test-registry \
 registry:2.6.1

假设容器所在主机的地址为192.168.1.200,则通过访问地址 http://192.168.1.200:5000/v2/ 来检查仓库是否正常运行,返回 { } 表示部署成功。

推送镜像到私有仓库

推送镜像到私有仓库,需要先根据私有仓库的地址标签来设置镜像的新标签,操作的范例如下:

# pull image from docker hub(从官方仓库拉取一个镜像)
docker pull alpine:3.6

# 根据私有仓库,设定标签(必须) 
# 为镜像 `alpine:3.6` 创建一个新标签 `192.168.1.200:5000/alpine:3.6`
docker tag alpine:3.6 192.168.1.200:5000/alpine:3.6

# 推送到私有仓库中
docker push 192.168.1.200:7000/alpine:3.6

其他问题

在向私有仓库推送镜像时,可能会遇到问题:http: server gave HTTP response to HTTPS client。

因为默认提交到https,但是私有仓库是使用http,此时或者创建一个https映射,或者将私有仓库地址加入到不安全的仓库列表中。

将私有仓库地址加入到不安全的仓库列表中的方法包括:

# 编辑 /etc/docker/daemon.json
vi /etc/docker/daemon.json

# 增加配置项
{
  ... # 其他配置项
  "insecure-registries":[ "192.168.1.200:5000"]
}

# 重启Docker服务
systemctl daemon-reload
service docker restart

或者另一种方法是:

# 编辑 /lib/systemd/system/docker.service
vi /lib/systemd/system/docker.service

# 增加配置项
...
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.1.200:5000
...

# 重启Docker服务
systemctl daemon-reload
service docker restart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值