linRichielinRichie
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
  • Ansible

    • Ansible: 基本操作
    • Ansible: 安装
    • Ansible: 简介
    • YAML: 文件格式
    • Playbook

      • Playbook: 介绍
      • Playbook: 操作
    • 模块

      • Yum模块常用参数
    • 实战

      • Ansible 实战
  • Anaconda

    • Anaconda命令
  • Iptables

    • Iptable: 防火墙
    • iptables 用法
  • Systemd

    • 系统服务配置
    • 系统服务启动文件
    • 性能优化

      • Linux 系统监控
      • Linux 系统性能优化
      • Linux 系统故障诊断
      • Linux 系统日志管理
  • Network

    • 用一张图解释 8 种流行的网络协议
    • 反子网掩码
    • 交换机端口模式
    • eNSP 软件
    • 华为交换机配置命令
    • eNSP静态路由实验
  • Commands

    • 命令别名:alias
    • 多类型资源统计工具: dstat
    • history配置
    • unzip命令
    • Linux用户到期登录时间和随机密码
    • 常用 Command
    • ssh

      • ssh-keygen
      • linux ssh命令
  • CI/CD

    • Jenkins CI/CD 管道
  • Kubernetes

    • Docker系列学习

      • 01. 什么是Docker
      • 02. Docker安装
      • 03. 使用Docker镜像
      • 04. 利用commit理解镜像构成
      • 05. 操作Docker容器
      • 06. 使用Dockerfile定制镜像
      • 07. Dockerfile指令详解
      • 08. Dockerfile多阶段创建
      • 09. 访问仓库
      • 10. 修改docker的启动项
      • 11. Nexus3.x的私有仓库
      • 12. docker-hub加速器
      • 13. 数据管理
      • 14. 使用网络
  • Shell编程

    • Shell 编程基础
    • Shell 脚本执行消耗的时间
    • Shell 自动生成简介

09. 访问仓库

  • 简介
  • Docker Hub
    • 注册
    • 登录
    • 拉取镜像
    • 推送镜像到自己的docker Hub上面
    • 自动创建
  • 私有仓库
    • 1. 基本私有仓库
    • 2. 配置安全认证

简介

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

拉取镜像

  1. 搜索镜像

    docker search centos
    

    搜索结果说明:

    • NAME: 镜像名称
    • DESCRIPTION: 镜像描述
    • STARS: 镜像的受欢迎程度
    • OFFICIAL: 是否为官方镜像
    • AUTOMATED: 是否自动构建

    镜像类型:

    • 官方镜像:如 centos,由 Docker 官方维护
    • 用户镜像:如 username/centos,由用户创建维护

    提示: 使用 --filter=stars=N 可以过滤星级

  2. 下载镜像

    docker pull centos
    

推送镜像到自己的docker Hub上面

将镜像推送到自己的docker Hub上面需要进行登录到自己的账户上。 请使用 docker login,退出登录请使用docker logout,之后使用docker push进行上传 用户也可以在登录后通过docker push命令将自己的镜像推送到Docker Hub
下面命令中的username替换为自己的Docker账户用户名

  1. 登录账号

    docker login
    
  2. 标记镜像

    docker tag centos:7 username/centos:7
    
  3. 推送镜像

    docker push username/centos:7
    

自动创建

Docker Hub 支持通过 GitHub 或 BitBucket 自动构建镜像:

  1. 创建并登录 Docker Hub
  2. 关联 GitHub/BitBucket 账号
  3. 配置自动构建
  4. 选择代码仓库和分支
  5. 指定 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 \
  registry

1.2 使用私有仓库

  1. 标记下载启动镜像镜像

    docker pull registry
    
    #启动容器
    docker run -d -p 5000:5000  --restart always --name=registry -v /mnt/docker:/var/lib/
    registry registry
    
  2. 推送镜像

    docker push localhost:5000/centos:7
    
  3. 查看仓库镜像

    当想让本网段的其他主机也能把镜像推送到私有仓库,就需要设置仓库地址为内网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 \
  registry

2.3 客户端配置

# 复制证书
mkdir -p /etc/docker/certs.d/myregistry:5000
cp domain.crt /etc/docker/certs.d/myregistry:5000/ca.crt
最近更新时间:
Prev
08. Dockerfile多阶段创建
Next
10. 修改docker的启动项