本篇文章安装 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