Centos 7 安装 Docker | 菠萝焖鸭的日常分享 (wxhnyfy.site)
拉取私有仓库镜像
docker pull registry
修改 daemon.json 文件
vim /etc/docker/daemon.json
添加以下内容,用于让 Docker 信任私有仓库地址,保存退出。
{ "insecure-registries": ["192.168.102.131:5000"] }
重新加载配置信息及重启 Docker 服务。
# 重新加载某个服务的配置文件 sudo systemctl daemon-reload # 重新启动 docker sudo systemctl restart docker
创建私有仓库容器
mkdir /mydata mkdir /mydata/docker_registry docker run -di --name registry -p 5000:5000 -v /mydata/docker_registry:/var/lib/registry registry
-d:后台运行容器; --name:为创建的容器命名; -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射; -v:将容器内 /var/lib/registry 目录下的数据挂载至宿主机 /mydata/docker_registry 目录下;
打开浏览器输入:http://192.168.102.131:5000/v2/_catalog 看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空。
docker pull mysql:5.7.39 docker tag mysql:5.7.39 192.168.102.131:5000/mysql:5.7.39 docker images docker push 192.168.102.131:5000/mysql:5.7.39
由于我们做了目录挂载,因此可以在宿主机 /mydata/docker_registry/docker/registry/v2/repositories 目录下查看。
私有仓库已经搭建好了,要确保私有仓库的安全性,还需要一个安全认证证书,防止发生意想不到的事情。所以需要在搭建私有仓库的 Docker 主机上先生成自签名证书。
mkdir -p /usr/local/registry/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt
openssl req:创建证书签名请求等功能; -newkey:创建 CSR 证书签名文件和 RSA 私钥文件; rsa:2048:指定创建的 RSA 私钥长度为 2048; -nodes:对私钥不进行加密; -sha256:使用 SHA256 算法; -keyout:创建的私钥文件名称及位置; -x509:自签发证书格式; -days:证书有效期; -out:指定 CSR 输出文件名称及位置;
生成自签名证书
通过 openssl 先生成自签名证书,运行命令以后需要填写一些证书信息,里面最关键的部分是:Common Name (eg, your name or your server's hostname) []:192.168.102.131,这里填写的是私有仓库的地址。
# 创建存储鉴权密码文件目录 mkdir -p /usr/local/registry/auth # 如果没有 htpasswd 功能需要安装 httpd yum install -y httpd # 创建用户和密码 htpasswd -Bbn root 123456 > /usr/local/registry/auth/htpasswd
htpasswd 是 apache http 的基本认证文件,使用 htpasswd 命令可以生成用户及密码文件
docker run -di --name registry -p 5000:5000 \ -v /mydata/docker_registry:/var/lib/registry \ -v /usr/local/registry/certs:/certs \ -v /usr/local/registry/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/*.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/*.key \ registry
先给镜像设置标签 docker tag local-image:tagname new-repo:tagname;
再将镜像推送至私有仓库 docker push new-repo:tagname。
docker pull nginx docker tag nginx:latest 192.168.102.131:5000/nginx:latest docker images docker push 192.168.102.131:5000/nginx:latest
如果直接 push 镜像肯定会失败,并且出现 no basic auth credentials 的错误,这是因为我们没有进行登录认证。
通过 docker login 命令输入账号密码登录私有仓库
docker login 192.168.102.131:5000
再次 push 镜像,发现已经可以推送成功了
通过 docker logout 命令退出账号。
docker logout 192.168.102.131
本地需要域名访问,需要修改hosts文件
cat >> /etc/hosts << EOF 192.168.102.131 images.wxhntmy.com EOF modprobe br_netfilter
vim /etc/docker/daemon.json
{ "insecure-registries": [ "192.168.102.131:5000", "images.wxhntmy.com:5000" ] }
# 重新加载某个服务的配置文件 sudo systemctl daemon-reload # 重新启动 docker sudo systemctl restart docker
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/images.wxhntmy.com.key -x509 -days 365 -out /usr/local/registry/certs/images.wxhntmy.com.crt
docker rm -f registry docker run -di --name registry -p 5000:5000 \ -v /mydata/docker_registry:/var/lib/registry \ -v /usr/local/registry/certs:/certs \ -v /usr/local/registry/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/images.wxhntmy.com.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/images.wxhntmy.com.key \ registry
docker login images.wxhntmy.com:5000 docker tag nginx:latest images.wxhntmy.com:5000/nginx:latest docker images docker push images.wxhntmy.com:5000/nginx:latest
Windows在hosts文件加解析,就可以直接在浏览器通过域名访问了
打开浏览器输入:https://images.wxhntmy.com:5000/v2/_catalog,会提示输入用户名密码