Dockerレジストリとは?
Dockerはコンテナ型アプリケーション実行環境です。Dockerによって、OSの内部に独立したアプリケーション実行環境(コンテナ)を生成でき、いつでもその環境を立ち上げられるようになります。Dockerはソフトウェアをパッケージ化して、どこでも同じ動きをするようにするツールです。
Dockerは従来のホスト型仮想化とは異なり、コンテナ型仮想化を提供しています。Dockerレジストリは同じ名前のDockerイメージの集合体であり、イメージはそれぞれのタグによって識別されます。
【参考】:Docker レジストリ の理解 | Docker-docs-ja 1.9.0b ドキュメント
Docker Hubとは
Docker Hubは、Docker社がクラウド上で提供しているDockerイメージ(コンテナ)の共有サービスです。 Docker HubではさまざまなDockerイメージが公開されており、ユーザはDocker Hubから任意のイメージを取得して、コンテナ化してすぐに様々なアプリケーションを利用できます。
また、Docker Hubには公開リポジトリの他に非公開のプライベートリポジトリも存在し、ユーザは自分で作成したイメージをそれらリポジトリにアップロードして他のユーザと共有することもできます。
Docker Hubは、開発者やオープンソースのコントリビューターにとって大変便利なツールであり、Dockerイメージの検索、使用、共有を簡単に行えます。
【参考】:Docker Hub Container Image Library | App Containerization
Docker HubとDockerレジストリ
Docker HubとDockerレジストリは似ており、同一のものだと思いがちですが、同一ではありません。Docker Hubはレジストリとして公開されたパブリックなイメージの基地であり、Dockerレジストリはローカルのプライベートなイメージのための場所です。
Docker Hubでは、Dockerイメージは「レジストリ」と呼ばれるデータベースに登録されます。(Docker公式では、Docker Hubを「クラウド上のレジストリサービス」と称しています。)
以下、それぞれをまとめると、次のようになります。
■ Docker Hub 公開されたDockerイメージのレジストリです。ユーザはDocker Hubからイメージをダウンロードできます。イメージを共有したり、他のユーザと協力したりするために使用されます。
■ Dockerレジストリ プライベートなDockerイメージのレジストリです。組織内でのみアクセス可能です。セキュリティやプライバシーの観点から重要です。
Docker HubとDockerコンテナ
Docker HubはDockerイメージ(コンテナ)の共有サービスだと分かりました。次にDockerコンテナについて確認しておきましょう。DockerコンテナはDockerイメージから作成され、アプリケーションの実行環境として利用されます。この関係を図で示すと次のようになります。
【参考】:What is a Container? | Docker
Dockerレジストリの特徴とメリット
ここでは、Dockerレジストリの特徴とメリットについて見ていきます。さまざまな優れた特徴やメリットが、世界中の開発者たちが利用する理由です。
特徴
Dockerレジストリは、Dockerイメージ(コンテナ)を保存・配信するためのシステムであり、異なるタグを持つバージョンのDockerイメージを保持します。Dockerレジストリには以下のような特徴があります。
1.ストレージとコンテンツ配信システム Dockerイメージの名前を異なるタグで保持します。ユーザはdocker pushとdocker pullコマンドを使ってレジストリと通信できます。
2.ストレージのバックエンド デフォルトのストレージドライバーはローカルのPOSIXファイルシステムであり、開発や小規模環境で扱いやすいです。クラウドベースのストレージ(S3、Microsoft Azure、Ceph Rados、OpenStack Swift、Aliyun OSSなど)もサポートしています。
【参考】:POSIX - Linux技術者認定 LinuC | LPI-Japan
3.セキュリティと通知 TLSと基本認証をネイティブにサポートしています。通知システムを提供し、Webフック呼び出しやログ記録、メトリック収集が簡単にできます。Dockerレジストリは、Dockerイメージの共有と管理に重要な役割を果たしています。
【参考】:SSL と TLS の比較 - 通信プロトコルの違い |AWS
メリット
Dockerレジストリは、イメージの効率的な管理とセキュリティを提供する重要なツールです。では、Dockerレジストリを利用することで、ユーザはどのようなメリットを得られるのかを見ていきましょう。
1. イメージの管理とバージョン管理 Dockerレジストリは、タグ付けされたバージョン管理が可能なイメージを保持します。必要に応じてイメージを取得したり、アップロードしたりできます。
2. アクセス制御とセキュリティ レジストリはTLSと基本認証をネイティブにサポートしており、保管されているイメージに対するアクセスのセキュリティを確保しています。また高度な認証や認証手法を使うことで、大規模なデプロイなどへの拡張も期待できます。
3. 通知システム レジストリは堅牢な通知システムを提供しており、Webフックの呼び出しやログ記録、レポートの拡張、メトリックの収集を簡単にします。
4. ストレージの柔軟性 デフォルトのストレージドライバはローカルPOSIXファイルシステムであり、開発や小さな環境で扱いやすいです。また、クラウドベースのストレージ(S3、Microsoft Azure、Ceph Rados)をサポートしています。
Dockerレジストリの基本操作
Dockerレジストリの基本的な操作について紹介します。Dockerレジストリは、Dockerイメージを保存し、異なるタグを持つバージョンを管理するストレージとコンテンツ配信システムでした。
ここでは、Dockerでオープンソースの高機能サーバとして知られるnginx(エンジンエックス)を動かし始めるまでの操作手順を紹介します。
Docker Desktopのインストール
まず、Docker Desktopのホームページにアクセスして、Windows用のDocker Desktopをダウンロードします。ダウンロードが完了したら、ダブルクリックしてインストールします。Dockerアカウントがない方は、[Sign up]からアカウント作成を行ってからインストールします。
インストールが済み、PCを再起動すると自動的にプロンプト画面が表示されてにWSL2(Windows Subsystem for Linux 2)がインストールされ、Docker Desktopの使用許諾確認画面が表示されますので、[Accept]を選択してクリックします。これで、Dockerレジストリの利用が可能になります。
【参考】:Docker Hub Container Image Library | App Containerization 【参考】:Get Started | Docker
nginxイメージの取得
Docker Hubから公式のnginxイメージを取得します。ターミナルを管理者モードで起動し、以下のコマンドを実行してください。取得したイメージは"Docker images"コマンドでイメージ一覧を表示できます。
>docker image pull nginx
次のように処理が実行されれば、nginxのイメージが取得できています。
nginxコンテナの起動
nginxのコンテナを起動するには、以下のコマンドを入力します。
>docker container run -d -p 8080:80 --name nginx nginx
次のように処理が実行されれば、nginxコンテナは起動しています。
「-p 8080:80」 オプションは、ホスト側のポート番号(8080)とDocker側のポート番号(80)を紐づけています。
-d オプションは、Dockerコンテナをバックグラウンドで実行するためのものです。
--name nginx オプションは、コンテナに名前を付与しています。
nginxサーバの起動を確認
ブラウザで「http://localhost:8080/」にアクセスすると、nginxのデフォルトページが表示されます。
コンテナを停止する場合は次のように入力します。
>docker container stop nginx
コンテナを起動する場合は次のように入力します。
>docker container stop nginx
自作HTMLの表示
nginxデフォルトのhtmlファイルを自作のhtmlファイルに変更して表示してみましょう。
nginxのデフォルトのHTMLを編集して、自分のHTMLに変更できます。以下の手順で行います。
① コンテナ内にアクセス
>docker container exec -it nginx bash
② nginx設定ファイルの内容の確認
>cat /etc/nginx/conf.d/default.conf
以下はnginxコンテナに入り、設定内容を確認した際の表示です。
③ htmlファイルの場所を確認 表示された設定ファイルを確認すると、デフォルトのhtmlは「/usr/share/nginx/html」にあることが分かりました。
④ htmlファイルの編集 以下のコマンドを実行し、「index.html」を編集しましょう。
>apt-get update
コマンド実行で、次のように表示されます。
まず編集用のコマンド(vi)をインストールします。処理中の質問に対しては「Y」を入力します。
>apt-get install vim
次のように表示されます。
「vi」コマンドでhtmlファイルを編集します。「i」キーで編集、編集終了後は「Esc」キーで編集モードを終了し、「:wq」+ [Enter]で上書き保存し、「Exit」で終了します。
>vi /usr/share/nginx/html/index.html
以下、html編集画面です。
編集が完了したら、ブラウザで再度「http://127.0.0.1:8080」にアクセスして確認してください。Hello world !と表示されていればDockerコンテナが正しく起動されています。
Dockerレジストリを活用しよう
ここまでDockerHubやDockerレジストリの概要、Dockerレジストリの特徴やメリット、Dockerレジストリの基本操作について紹介しました。 Docker Hubからnginxのイメージを取得し、nginxコンテナを起動して設定内容を確認し、nginxサーバでWebファイルの確認操作までを実行しました。
Dockerレジストリはチームで開発に利用すると、さまざまなメリットが得られます。ぜひ開発作業で利用してみましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから