CoreOSで、独自のDockerレジストリをセットアップする

私たちは皆、アプリケーションコンテナーを作成、管理、および複数のマシンに分散するプラットフォームであるDockerを知っています。Docker Inc.は、「Docker Registry」と呼ばれるgitリポジトリのように、ダウンロード(またはプル)されるオープンソースコンテナーをホストするサービスを提供します。DockerコンテナーのGitHubのようなものと考えてください。

しかし、公共のレジストリから分離された独自のレジストリをホストしたい場合はどうでしょうか?Docker Inc.は、GitHubでレジストリアプリケーションをオープンソース化しています。

このチュートリアルでは、新しいVPSでCoreOSを使用してプライベートDockerレジストリを設定するプロセスについて説明します。

CoreOS + Docker

このチュートリアルの範囲外であるため、DockerとCoreOSでできることを正確に説明するのに大量の時間を費やすことはありません。基本的に、CoreOSは大規模なサーバークラスター向けに設計されており、小型で高速で、定期的なセキュリティ更新を自動的に取得します。ルートファイルシステムも読み取り専用です。つまり、基本インストールに含まれていないあらゆる種類のソフトウェアを実行するには、Dockerを使用する必要があります。

これにより、Core OSはDockerの完璧なホストシステムになります。

最新のレジストリを取得して実行する

Docker Inc.はレジストリをトップレベルのイメージとして提供しています。これは、シンプルな方法でレジストリをプルダウンできることを意味します。

docker pull registry

接続速度によっては、数分かかる場合があります。

最上位の画像であることのプラスは、定期的なサポートと更新を受けることも意味します。

次に、レジストリをテストします。レジストリイメージを使用して新しいコンテナを作成できます。

docker run -p 5000:5000 -d --name=basic_registry registry

Dockerをあまり使用していない場合、-pフラグはをPORT意味します。つまり、コンテナーからポート5000をホストポート5000に公開しています。

-dフラグの略daemonこれはコンテナがバックグラウンドで実行し、現在のSSHセッションへの出力を印刷しないようになります、我々はまた、使用して、この基本的なテストコンテナの名前にしたい--name、我々は後で簡単に管理できるようにオプションを選択します。

基本レジストリコンテナがを使用して実行されていることを確認してくださいdocker ps。出力は次のようになります。

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
edfb54e4a8c4        registry:0.8.1      "/bin/sh -c 'exec do   7 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   basic_registry

また、http://YOUR_IP:5000Webブラウザーでにアクセスすると、次のようなメッセージが表示されます。

"docker-registry server (dev) (v0.8.1)"

dev括弧内の単語に注意してください。これは、サーバーが現在dev configを実行していることを意味します。近いうちに、さらに多くの設定を確認します。

これで、独自の(非常に基本的な)コンテナーレジストリが実行されます。しかし、まだ終わっていません。

多分あなたはこれを覗き見からプライベートにしたいかもしれません、あるいは多分ローカルストレージの代わりにAmazon S3にあなたのイメージを保存したいでしょう。次のセクションでは、さまざまな構成オプションについて説明します。

次に進む前に、競合するポートにぶつからないようにテストコンテナを強制終了します。

docker kill basic_registry

レジストリ構成

設定をDockerレジストリに渡すには2つの方法があります。1つは環境変数を新しいコンテナに渡す方法で、もう1つは構成ファイルを追加する方法です。

以下は、使用する一般的な構成オプションの一部です。

  • loglevel-コンソールに記録する情報の最小量。デフォルトはinfoです。
  • standalone-このレジストリは単独で機能する必要がありますか?(公開レジストリを照会しないでください。)デフォルトはtrueです。
  • index_endpoint-スタンドアロンでない場合、他にどのようなインデックスをクエリしますか?デフォルトindex.docker.io
  • cacheおよびcache_lru-小さなファイルのRedisキャッシュの使用に関するオプション。これについては後で触れます。
  • storage-このサーバーにはどのストレージバックエンドを使用する必要がありますか?(このチュートリアルでは、ローカルを使用します)。
  • storage_path -ローカルストレージを使用する場合、ファイルを保持するためにどのディレクトリを使用すればよいですか?

構成を操作する前に、操作するベースファイルが必要です。GitHubのDockerレジストリリポジトリからのファイルは問題なく動作します。

wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml

ファイルは次のような出力で正常に保存されるはずです。

2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]

すごい!これで、このファイルを必要に応じて変更できます。

Core OSに付属する唯一のテキストエディターはですがvim、これまでに使用したことがない場合でも心配はいりません。これにより、編集する内容とその方法が段階的に説明されます。

vim config_sample.yml

ファイルを開いたらI、を押すと右下隅が表示さ-- INSERT --れます。挿入モードの場合。矢印キーを使用してファイルの一番下までスクロールすると、というラベルの付いたセクションが表示されprodます。

2行を変更します。変更は以下のとおりです

prod:
    <<: *local
    storage_path: _env:STORAGE_PATH:/data

ここではprodlocalセクションではなくセクションから派生するように構成を変更していますs3。次に、新しいコンテナ内のstorage_pathパスを使用するようにを上書きしました/data

すべての変更が正しいことを確認したら、を押してESC挿入モードと入力を終了します:wq(つまり、変更をファイルに書き込み、vimを終了します)。

ファイルの名前をただに変更しましょう config.yml

mv config_sample.yml config.yml

Redisキャッシング(オプション)

コンテナーレジストリを高速化するた���にredisを使用したい場合は、パブリックレジストリから新しいコンテナーをプルし、数行の構成を追加するだけです。

まず、Redisの最上位の画像を取得します。

docker pull redis

イメージが正常にプルされたら、テストレジストリで行ったように、イメージを実行して名前を付けることができます。

docker run -d --name registry-redis redis

redisはメモリ内にあるため、後の手順でレジストリコンテナーにリンクするため、redisを構成する必要はありません。

もう一度、次を使用して実行されていることを確認しdocker psます。

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
54f65641eccf        redis:2.8           "redis-server"      2 seconds ago       Up 1 seconds        6379/tcp            registry-redis

今すぐ再オープンconfig.ymlvimし、ちょうど我々はそれを編集した初めてのように、挿入モードに入ります。

prodセクションの下に次の行を追加し、適切にインデントするようにします。今回はとのみを追加cachecache_lruます。

cache:
    host: _env:REDIS_PORT_6379_TCP_ADDR
    port: _env:REDIS_PORT_6379_TCP_PORT
    db: 0

cache_lru:
    host: _env:REDIS_PORT_6379_TCP_ADDR
    port: _env:REDIS_PORT_6379_TCP_PORT
    db: 1

環境変数REDIS_PORT_6379_TCP_ADDRREDIS_PORT_6379_TCP_PORTRedisのコンテナとの連携時にレジストリコンテナに渡されます。

これで、レジストリコンテナーと連携して機能するRedisコンテナーがセットアップされました。今度はレジストリを構築します!

コンテナを構築する

すべての設定が完了し、準備が整ったので、実際のレジストリコンテナを構築する必要があります。

起動vim Dockerfileして、新しいDockerfileを作成します。挿入モードに入り、以下の編集に従います。

FROM registry:latest

# Add the custom configuration file we made 
ADD ./config.yml /docker-registry/config/config.yml

# Create the data directory
RUN mkdir /data

# Set the configuration file to config.yml
env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml

# Make sure we use the prod configuration settings 
env SETTINGS_FLAVOR prod

上記で行ったことは、基本的にレジストリイメージを拡張して、構成ファイルと設定を使用することです。Dockerfileは、Dockerが読み取ってビルドするための一連のビルド手順です。Dockerfileとその構文の詳細については、Dockerサイトの公式ドキュメントをご覧ください。

次に、使用するコンテナを構築する必要があります。

docker build -t my_registry .


Sending build context to Docker daemon 13.82 kB
Sending build context to Docker daemon 
Step 0 : FROM registry
 ---> e42d15ec8417
Step 1 : ADD ./config.yml /docker-registry/config/config.yml
 ---> 4339f026d459
Removing intermediate container 2d5138fbcd34
Step 2 : RUN mkdir /data
 ---> Running in a090f0bdbfd1
 ---> 8eb27ba6e12a
Removing intermediate container a090f0bdbfd1
Step 3 : env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml
 ---> Running in 565b5bfb2b22
 ---> 914462e46dc0
Removing intermediate container 565b5bfb2b22
Step 4 : env SETTINGS_FLAVOR prod
 ---> Running in 31a92847b851
 ---> b5949575c374
Removing intermediate container 31a92847b851
Successfully built b5949575c374

これで実行の準備ができました!

ホストシステムにディレクトリを作成し、/dataボリュームとしてコンテナにマウントします。

mkdir registry-data

これで、新しいコンテナを起動できます。Redisキャッシュを使用する場合は、以下の2番目のコマンドを使用します。

# For a non-Redis cache registry
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg my_registry

# For a Redis cached registry (Must have followed Redis Caching section above)
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg --link registry-redis:redis my_registry

サーバーが正しく実行されていることを確認するには、にアクセスしてくださいhttp://YOUR_IP:5000。次のメッセージが表示されます。

"docker-registry server (prod) (v0.8.1)"

(prod)設定の変更が成功したという意味に注意してください!

ローカルのDockerクライアントを構成する

これで、独自の実行レジストリが作成されたので、ローカルマシンのDockerクライアントがそれを使用できるようにします。通常は次のコマンドを使用しますがdocker login、ここでは、ログインコマンドに引数を1つ追加する必要があります。

docker login YOUR_IP:5000

ユーザー名とパスワードを入力し(新しいアカウントを作成する場合など)、アクティブ化する必要があることを示すメッセージは無視してください。

次に、ストックイメージをプルして、独自のリポジトリにプッシュします。

# Pull the busybox image from the public registry
docker pull busybox

# Tag it with our IP/URL
docker tag busybox YOUR_IP:5000/busybox

# Push it to our newly made registry
docker push YOUR_IP:5000/busybox

すべてが正しくプッシュされた場合、最終的なメッセージは次のようになります。

Pushing tag for rev [a9eb17255234] on 

おめでとう!独自のDockerリポジトリをセットアップしました。

次は何ですか?

ここでは、新しいプライベートレジストリを改善する方法に関するいくつかのアイデアを示します。

  • NginxまたはApacheを使用してリバースプロキシを配置し、単純なHTTP認証などの追加のセキュリティをその前に配置します。
  • サーバーのドメインを取得してセットアップし、registry.mysite.comのようなものでレジストリにアクセスできるようにします。
  • コンテナーに機密情報が含まれている場合は、SSL証明書を購入(または自己署名)してさらに保護を強化します。


Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。