Docker学習ノート:Centos 7インストールdockerおよびregistry登録サービス

7910 ワード

通常モード


1.サーバーにインストールされているdockerコンテナの表示
[root@rabbit1 images]# yum list installed |grep docker
containerd.io.x86_64                 1.2.10-3.2.el7             @docker-ce-stable
docker-ce.x86_64                     3:19.03.5-3.el7            @docker-ce-stable
docker-ce-cli.x86_64                 1:19.03.5-3.el7            @docker-ce-stable


説明:docker-ce-cli.x86_64はdockerクライアントプログラム、docker-ce.x86_64はdockerサービス側プログラムであり、
2.dockerコンテナをアンインストールします(必要なバージョンでない場合はアンインストールして再インストールします.そうでない場合は無視できます).
docker remove containerd.io.x86_64
yum remove docker-ce-cli.x86_64


3.最新版のdockerをインストールする
yum install docker-ce

次のコマンドでdockerコンテナのすべてのバージョンを表示し、必要に応じて指定したバージョンをインストールすることもできます.
yum search docker-ce --showduplicates

-showduplicatesはすべてのバージョンをリストします
4.dockerコンテナサービスの起動
systemctl start docker

5.registryミラーの作成
  • 通常registryミラーモード
  • docker run -d -p 5000:5000 --restart=always --name registry \
    	-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
    	-v /home/images:/var/lib/registry \
    	registry:2.7.1
    
  • -dバックグラウンド実行プロセス
  • -p 5000:5000シンクホストとdockerコンテナポート番号マッピング、前の5000はシンクホストポート番号、後の1はdockerコンテナポート番号
  • を表す
  • –restart=alwaysはdockerコンテナが再起動するとコンテナが自動的に起動することを示す
  • -e REGISTRY_HTTP_ADDR=0.0.0.0:5000環境変数、コンテナリスニング用ポート番号
  • を変更
  • -v/home/images:/var/lib/registryカスタムミラー格納場所、/var/lib/registryコンテナ内のデフォルト格納ミラーの場所、/home/imagesカスタムファイルシステムのパス
  • registry:2.7.1 registryはミラー名、2.7.1はミラーバージョン番号
  • 注意:この例はテスト環境にのみ使用され、本番環境のregistryはTLSで検証する必要があります.理想的にはアクセス制御メカニズムを使用する必要があります.
    6.registry私服ミラーアップロード、プル、削除操作例
  • unbuntuの最新バージョンのミラー
  • を引き出します.
    docker pull ubuntu
    
  • は、ミラーtagをxxとする.xx.xx.xx:5000/ubuntu.これにより、既存のミラーに追加のtagが作成されます.ミラーの最初の部分はホストIPとポート番号であり、Dockerはプッシュ時にregistryの位置として解釈します.
  • docker tag ubuntu xxx.xxx.xxx.xxx:5000/ubuntu
    
  • は、ミラーをローカルで実行するregistry xxxにプッシュする.xxx.xxx.xxx:5000
  • docker push xxx.xxx.xxx.xxx:5000/ubuntu
    

    プッシュ操作を実行すると、次のような異常が発生する可能性があります.
    [root@rabbit1 images]# docker push xx.xx.xx.xxx:5000/ubuntu
    The push refers to repository [xx.xx.xx.xxx:5000/ubuntu]
    Get https://xx.xx.xx.xx:5000/v2/: http: server gave HTTP response to HTTPS client
    
    

    この時私たちは/etc/docker/daemon.jsonファイルに不安全なregistryレジストリアドレスを追加します(このスキームはテスト環境でのみ使用できます.本番環境ではTLS証明書を使用する方法は、次のセクションを参照してください).
    { "insecure-registries":["xx.xx.xx.xxx:5000"] }
    

    次にdockerを再起動します.
    systemctl restart docker
    
  • まずローカルubuntuとxxを削除する.xx.xx.xx:5000/ubuntuミラー、ソフト後ローカル私服からミラーをローカル
  • に引き出す
    docker image remove ubuntu
    docker image remove xx.xx.xx.xx:5000/ubuntu
    

    以下も使用できます.
    docker rmi    
    

    私服のミラーをローカルに引き出します.
    docker pull xx.xx.xx.xx:5000/ubuntu
    

    7.地元のレジストリ私服
  • ローカルregistry私服
  • を停止
    docker container stop registry
    
  • ローカルregistry私服
  • を起動
    docker container start registry
    
  • コンテナregistry私服を削除docker container rm
  • を使用
    docker container stop registry & docker container rm -v registry
    

    自己発行証明書登録モード(TLS)


    1.次の3つのフォルダを作成
    ##  registry      
    /home/docker-registry/images
    ##     TLS  
    /home/docker-registry/certs
    ##        
    /home/docker-registry/auth
    

    2.TLS証明書の生成
    openssl req \
      -newkey rsa:4096 -nodes -sha256 -keyout /home/docker-registry/certs/registry.key \
      -x509 -days 3650 -out /home/docker-registry/certs/registry.crt
    

    3.TLS証明書署名付きregistryレジストリサービスの作成
    docker run -d -p 5000:5000 --restart=always --name registry \
    	-v /home/docker-registry/images:/var/lib/registry \
    	-v /home/docker-registry/certs:/certs \
      	-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
      	-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
    	registry:2
    

    4.docker clientでpullまたはpushをregistryにミラーできる
    $ docker pull ubuntu
    $ docker tag ubuntu myregistry.domain.com/my-ubuntu
    $ docker push myregistry.domain.com/my-ubuntu
    $ docker pull myregistry.domain.com/my-ubuntu
    

    ローカル基本認証(ユーザー名パスワードモード)


    アクセス制限を実現する最も簡単な方法は、基本認証です(これは他のウェブサーバの基本認証メカニズムと非常に似ています).
    注意:基本認証は、ユーザー認証を明示的に送信する認証スキームとともに使用することはできません.ローカル基本認証を使用するには、TLSを構成する必要があります.
    1.ファイルディレクトリの作成
    ##  registry      
    /home/docker-registry/images
    ##     TLS  
    /home/docker-registry/certs
    ##        
    /home/docker-registry/auth
    

    2.ユーザー名とパスワード証明書の生成
    ##        ,  >     ,  >>             
    docker run --rm\
      --entrypoint htpasswd \
      registry:2 -Bbn admin2 admin2 >> /home/docker-registry/auth/htpasswd
    
  • –rm:パスワード生成後に生成されたコンテナ
  • を削除
  • -B:強制パスワード暗号化
  • -b:プロンプトではなくコマンドラインのパスワードを使用してパスワード
  • を入力します.
  • -n:暗号化ファイルを更新せず、暗号化されたユーザー名とパスワードのみを画面上に明示的に表示する
  • 3.TLS証明書の生成
    openssl req \
      -newkey rsa:4096 -nodes -sha256 -keyout /home/docker-registry/certs/registry.key \
      -x509 -days 3650 -out /home/docker-registry/certs/registry.crt
    

    4.以上のステップで生成した証明書およびアカウントパスワードに基づいてregistry登録サービスを作成する
    docker run -d -p 9527:5000 --restart=always --name registry \
    	-v /home/docker-registry/images:/var/lib/registry \
    	-v /home/docker-registry/certs:/certs \
    	-v /home/docker-registry/auth:/auth \
        -e "REGISTRY_AUTH=htpasswd" \
      	-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
      	-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
      	-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
      	-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
      	-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
      	-e REGISTRY_STORAGE_DELETE_ENABLED=true \
    	registry:2
    
  • -e REGISTRY_HTTP_ADDR倉庫ホストアドレス極端スローガン
  • -e REGISTRY_HTTP_TLS_CERTIFICATE設定環境変数がコンテナ公開鍵の位置を教える
  • -e REGISTRY_HTTP_TLS_KEY設定環境変数がコンテナ秘密鍵の位置を教える
  • 5.registryレジストリへのログイン
    docker login xx.xx.xx.xx:5000
    

    ログインすると、次のように異常が表示されます.
    Error response from daemon: Get https://xx.xx.xx.com:5000/v2/: x509: certificate signed by unknown authority
    

    これは、クライアントが証明書をインストールしていないためです.
    linuxシステム:registry.crtをファイルにコピー/etc/docker/certs.d/ドメイン名またはホスト名:5000/ca.crt、dockerを再起動する必要はありません(ホスト名は/etc/hostsファイルでマッピングする必要があります)
    Windows版クライアント:直接右クリックでインストールできます.インストール後dockerを再起動します.
    Mac版クライアント:registry.crt証明書を/.にコピーdocker/certs.d/ドメイン名またはホスト名:5000/ca.crt、linuxシステムクライアントインストール証明書方式と同様
    次のエラーが発生した場合は、クライアントがログインしていないことを示します.
    Error response from daemon: Get https://xx.xx.xx:5000/v2/mycentos7/manifests/latest: no basic auth credentials
    

    6.registry基礎認証ログインを終了する
    docker logout xx.xx.xx.xx:5000
    

    7.registryコンテナの削除
    docker container stop registry && docker container rm -v registry
    

    8.registry内のすべてのミラー名を問い合わせる
    curl -XGET http://xxxx.xx.xx.xx:5000/v2/_catalog
    

    9.ミラー名に基づいてミラーバージョンを問い合わせる
    curl -XGET http://xxxx.xx.xx.xx:5000/v2/    /tags/list
    

    Docker Registry Web UI


    成功:
    docker run -it -p 9528:8080 --name registry-web --link registry \
               -e REGISTRY_URL=https://registry:5000/v2 \
               -e REGISTRY_TRUST_ANY_SSL=true \
               -e REGISTRY_BASIC_AUTH="YWRtaW46YWRtaW4=" \
               -e REGISTRY_NAME=emisdockerhub.eastmoney.com:9027 \
               -e REGISTRY_READONLY=false \
               hyper/docker-registry-web
    

    参考1:https://hub.docker.com/_/registry
    参考2:https://docs.docker.com/registry/deploying/
    APIリファレンス:https://docs.docker.com/registry/spec/api/
    insecure registryリファレンス:https://docs.docker.com/registry/insecure/