Docker Hub 上でイメージを共有¶
はじめに¶
この時点で、自分のローカル開発マシン上で、 Part 2 で記述したコンテナ化アプリケーションの構築が完了しています。
コンテナ化アプリケーション開発の最後のステップとして、 Docker Hub のようなレジストリ(registry)上でイメージを共有します。これにより、あらゆるマシン上で簡単にダウンロードでき、実行可能になります。
Docker Hub アカウントのセットアップ¶
Docker ID を持っていなければ、以下のステップで Docker ID を作成します。Docker ID があれば Docker Hub 上でイメージを共有できます。
Docker Hub サインアップ ページを表示します。
フォームに入力し、送信すると、Docker を作成します。
登録手続きを完了するため、電子メールアドレスを確認します。
ツールバーもしくはシステムトレイ上の Docker アイコンをクリックし、 Sign in / Create Docker ID (サインイン / Docker ID の作成)をクリックします。
新しい Docker ID とパスワードを入力します。認証に成功すると、Docker Desktop メニューの 'Sign in' とあった場所に、 自分の Docker ID を表示します。
また、コマンドラインから Docker Hub にサインインするには docker login
を入力します。
Docker Hub リポジトリを作成し、イメージを送信¶
注釈
リポジトリを作成する前に、Docker Hub アカウントのセットアップ完了と、Docker Desktop からの接続が完了していることを確認します。
それでは、初めてのリポジトリを作成し、掲示板イメージを Docker Hub へアップロードしましょう。
メニューバーの Docker アイコンをクリックし、 Repositories > Create (リポジトリ・作成)を選びます。そうすると、 Docker Hub 上の Create Repository (リポジトリ作成)のページに転送されます。
リポジトリ名(repository name)を
bulletinboard
と入力し、ページの下にある Create (作成)ボタンをクリックします。現時点では他の項目は入力しないでください。
これで Docker Hub 上でイメージを共有する準備が整いました。しかし、もう1つ何よりも重要な作業があります。それは、イメージを Docker Hub 上で共有するため、 適切な名前空間 にすることです。イメージ名に対しては、
<自分の Docker ID>/<リポジトリ名>:<タグ>
のように明示する必要があります。
ターミナルあるいは PowerShell で node-bulletin-board/bulletin-board-app
ディレクトリ内にいることを確認し、次のコマンドを実行します。
docker tag bulletinboard:1.0 <自分の Docker ID>/bulletinboard:1.0
最後に、イメージを Docker Hub に送信(push)します。
docker push <自分の Docker ID>/bulletinboard:1.0
Docker Hub の自分のリポジトリ上で、新しいイメージが置かれたのを確認します。Docker Hub のリポジトリは、デフォルトでパブリック(誰でも利用できる一般公開状態)ですので、覚えておいてください。
注釈
push 時に問題が起きましたか? 覚えていますでしょうか。Docker Desktop やコマンドラインを通して Docker Hub にサインインする必要があります。また、先ほどのステップで見たとおり、イメージに対して正しい名前を付ける必要もあります。もし push が成功したように見えても Docker Hub で見えなければ、数分後にブラウザを再読み込みし、再び確認してください。
まとめ¶
これであなたの Docker イメージは Docker Hub で利用可能になり、どこでも実行できるようになりました。もしも新しいマシンで使おうとする場合、そこにイメージが無かったとしても、Docker は Docker Hub から自動的にダウンロードを試みます。以上の方法でイメージを移動できますので、ソフトウェアを実行したいマシン上では、Docker 以外全ての依存関係が不要です。コンテナ化アプリケーションの依存関係は、イメージの中に完全にカプセル化され、隔離されています。そして、このイメージは先ほど見た通り Docker Hub を使って共有できます。
もう1つ覚えておいてください。今のところイメージを Docker Hub に送信したにすぎません。つまり、 Dockerfile はどうしたらよいでしょうか。ベストプラクティスに不可欠なのは、バージョン管理をすることであり、可能であればアプリケーションの依存関係のソースコードと共に行うことです。Docker Hub リポジトリ説明には、どこでそれら Dockerfile を見つけられるかのリンクやメモを追加できます。記録できるのはイメージのビルドの仕方だけでなく、アプリケーションの依存関係の完全に実行する方法についても可能です。