从零开始配置 docker 私有仓库

483 阅读1分钟

本篇文章安装 docker 和 docker 仓库的环境都是在 Centos 7.6 上

安装 Docker

  • 通过下面的命令确认是否已经安装了 docker,如已安装,所有 docker 安装步骤忽略。
docker -v
  • 安装 yum 软件源

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

$ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
  • 安装 docker

$ sudo yum install docker-ce docker-ce-cli containerd.io
  • CentOS8 额外设置

由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables: 更改 /etc/firewalld/firewalld.conf

# FirewallBackend=nftables
FirewallBackend=iptables

Docker 启动

$ sudo systemctl enable docker
$ sudo systemctl start docker

验证 docker 是否安装成功

docker run --rm hello-world

搭建 docker 私有仓库

通过 -v 参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录。

$ docker run -d \
    -p 5000:5000 \
    -v /opt/data/registry:/var/lib/registry \
    registry

查看仓库镜像列表

这个时候还没有任何上传过的镜像,所以应该会返回一个空的数组

curl 127.0.0.1:5000/v2/_catalog

准备推送

1. 先给本地的镜像打 tag

因为我司 docker 仓库部署在内网,且不需要外网访问,所以不期望对外网暴露,所以我此处用的是 ip 而非域名,假如你想用域名,参考私有仓库高级配置

docker tag my-test-image:latest {docker 仓库 ip}:5000/my-test-image:latest

2. 配置 http 推送

由于 docker 默认使用的是 https 的请求去推送和拉取镜像,但是假如你跟我情况一样,无需使用 https 的话,那么需要在你在执行 push 和 pull 的机器上配置以下操作,而不是 在 docker 仓库的机器上!不是在 docker 仓库的机器上!不是在 docker 仓库的机器上!重要的事情说 3 遍。

  • Mac 参考 Mac 配置

  • Ubuntu 16.04+, Debian 8+, centos 对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirror": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [
    "{docker 仓库 ip}:5000"
  ]
}

注意:该文件必须符合 json 规范,否则 Docker 将不能启动。 配置结束需要重启 docker 让配置生效,举例 centos 7.6 是: 其中 docker info 是验证配置是否生效,假如生效会在其中展示

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ docker info

3. 推送

docker push {远端仓库 ip}:5000/my-test-image:latest

4. 检验是否推送成功

curl {远端仓库 ip}:5000/v2/_catalog