09. 访问仓库
2025-02-17
简介
Docker 镜像仓库是用于存储和分发 Docker 镜像的服务。主要概念:
- 仓库(Repository): 存放镜像的地方
- 注册服务器(Registry): 管理仓库的服务器
- 标签(Tag): 标识镜像的版本
例如:对于仓库地址
dl.dockerpool.com/ubuntu
dl.dockerpool.com是注册服务器地址ubuntu是仓库名
Docker Hub
Docker Hub 是 Docker 官方维护的公共仓库,提供了超过 15,000 个镜像。它是最常用的镜像来源。
注册
访问 https://hub.docker.com 免费注册账号。
登录
# 登录
docker login
# 退出
docker logout拉取镜像
搜索镜像
docker search centos搜索结果说明:
- NAME: 镜像名称
- DESCRIPTION: 镜像描述
- STARS: 镜像的受欢迎程度
- OFFICIAL: 是否为官方镜像
- AUTOMATED: 是否自动构建
镜像类型:
- 官方镜像:如
centos,由 Docker 官方维护 - 用户镜像:如
username/centos,由用户创建维护
提示: 使用
--filter=stars=N可以过滤星级下载镜像
docker pull centos
推送镜像到自己的docker Hub上面
将镜像推送到自己的docker Hub上面需要进行登录到自己的账户上。 请使用
docker login,退出登录请使用docker logout,之后使用docker push进行上传 用户也可以在登录后通过docker push命令将自己的镜像推送到Docker Hub
下面命令中的username替换为自己的Docker账户用户名
登录账号
docker login标记镜像
docker tag centos:7 username/centos:7推送镜像
docker push username/centos:7
自动创建
Docker Hub 支持通过 GitHub 或 BitBucket 自动构建镜像:
- 创建并登录 Docker Hub
- 关联 GitHub/BitBucket 账号
- 配置自动构建
- 选择代码仓库和分支
- 指定 Dockerfile 位置
优点: 代码更新时自动构建新镜像,无需手动更新
私有仓库
1. 基本私有仓库
1.1 安装运行
# 启动私有仓库容器
docker run -d -p 5000:5000 --restart=always --name registry registry
# 将仓库数据持久化到主机
docker run -d -p 5000:5000 --restart=always --name registry \
-v /mnt/registry:/var/lib/registry \
registry1.2 使用私有仓库
标记下载启动镜像镜像
docker pull registry #启动容器 docker run -d -p 5000:5000 --restart always --name=registry -v /mnt/docker:/var/lib/ registry registry推送镜像
docker push localhost:5000/centos:7查看仓库镜像
当想让本网段的其他主机也能把镜像推送到私有仓库,就需要设置仓库地址为内网IP,但由于Docker默认不允许非HTTPS方式 推送镜像。
所以,需要通过Docker的配置选项来取消这个限制。或者配置能够通过HTTPS访问私有仓库。
Centos配置HTTP上传到私有仓库cat > /etc/docker/daemon.json <<EOF { "registry-mirror":[ "https://registry.docker-cn.com" ], "insecure-registries":[ "192.168.199.100:5000" ] } EOF curl http://localhost:5000/v2/_catalog
2. 配置安全认证
2.1 生成证书
# 创建证书目录
mkdir -p certs
# 生成证书
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout certs/domain.key -x509 -days 365 \
-out certs/domain.crt生成证书案例
当有一个域名,就可以使用
openssl自行签发证书。过程
# 创建CA私钥 openssl genrsa -out "root-ca.key" 4096 # 利用私钥创建CA根证书请求文件 openssl req -new -key "root-ca.key" \ -out "root-ca.csr" -sha256 \ -subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=Your Company Name Docker Registry CA' # -subj /C 表示国家; /ST 表示省 /L 表示城市 /O 表示组织名 /CN通用名称 # 配置CA根证书,新建root-ca.cnf vim root-ca.cnf [root-ca] basicConstraints = critical,CA:TRUE,pathlen:1 keyUsage = critical, nonRepudiation, cRLSign, keyCertSign subjectKeyIdentifier=hash # 签发根证书 openssl x509 -req -days 3650 -in "root-ca.csr" \ -signkey "root-ca.key" -sha256 -out "root-ca.crt" \ -extfile "root-ca.cnf" -extensions \ root_ca # 生成站点SSL私钥 openssl genrsa -out "www.wanglhdocker.com.key" 4096 # 使用私钥生成证书请求文件 openssl req -new -key "www.wanglhdocker.com.key" -out "site.csr" -sha256 \ -subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=www.wanglhdocker.com' # 配置证书,新建site.cnf文件 cat > site.cnf <<EOF [server] authorityKeyIdentifier=keyid,issuer basicConstraints = critical,CA:FALSE extendedKeyUsage=serverAuth keyUsage = critical, digitalSignature, keyEncipherment subjectAltName = DNS:docker.domain.com, IP:127.0.0.1 subjectKeyIdentifier=hash EOF # 签署站点SSL证书 openssl x509 -req -days 750 -in "site.csr" -sha256 \ -CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial \ -out "www.wanglhdocker.com.crt" -extfile "site.cnf" -extensions server # 自改 hosts,并启动 ##如此,就有了www.wanglhdocker.com的网站SSL私钥www.wanglhdocker.com.key和SSL证书www.wanglhdocker. com.crt及CA根证书 root-ca.crt将生成的三个文件 移动到一个文件,删除其他文件夹
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose mv /use/local/bin/docker-compose /usr/bin/docker-compose chmod +x /usr/bin/docker-compose
2.2 配置认证
# 创建认证文件
mkdir auth
docker run --rm \
--entrypoint htpasswd \
registry -Bbn username password > auth/htpasswd
# 启动带认证的仓库
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/auth:/auth \
-v `pwd`/certs:/certs \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry2.3 客户端配置
# 复制证书
mkdir -p /etc/docker/certs.d/myregistry:5000
cp domain.crt /etc/docker/certs.d/myregistry:5000/ca.crt