アプリケーションを共有する
イメージをビルドしたので、それを共有できます。Dockerイメージを共有するには、Dockerレジストリを使用する必要があります。デフォルトのレジストリはDocker Hubであり、これまで使用してきたすべてのイメージはここから取得されています。
Docker ID
Docker IDを使用すると、Docker Hubにアクセスできます。Docker Hubは、世界最大のコンテナイメージのライブラリおよびコミュニティです。まだDocker IDを持っていない場合は、Docker ID を無料で作成してください。
リポジトリを作成する
イメージをプッシュするには、まずDocker Hubでリポジトリを作成する必要があります。
-
サインアップ または Docker Hubにサインイン します。
-
Create Repository ボタンを選択します。
-
リポジトリ名には
getting-started
を使用します。Visibility が Public になっていることを確認します。 -
Create を選択します。
以下の画像では、Docker HubからのDockerコマンドの例が表示されています。このコマンドでこのリポジトリにプッシュします。
イメージをプッシュする
-
コマンドラインで、Docker Hubに表示されている
docker push
コマンドを実行します。このコマンドには「docker」ではなく、自分のDocker IDが入っているはずです。たとえば、docker push YOUR-USER-NAME/getting-started
のようになります。$ docker push docker/getting-started The push refers to repository [docker.io/docker/getting-started] An image does not exist locally with the tag: docker/getting-started
なぜ失敗したのでしょうか?
push
コマンドはdocker/getting-started
という名前のイメージを探しましたが、見つけられませんでした。docker image ls
を実行しても、同様に見つからないはずです。この問題を解決するために、ビルドした既存のイメージに新しい名前を付けてタグ付けする必要があります。
-
docker login -u YOUR-USER-NAME
コマンドを使用してDocker Hubにサインインします。 -
docker tag
コマンドを使用して、getting-started
イメージに新しい名前を付けます。YOUR-USER-NAME
を自分のDocker IDに置き換えます。$ docker tag getting-started YOUR-USER-NAME/getting-started
-
次に、もう一度
docker push
コマンドを実行します。Docker Hubからコマンドをコピーしている場合、イメージ名にタグを追加しなかったので、tagname
部分を省略できます。タグを指定しない場合、Dockerはlatest
というタグを使用します。$ docker push YOUR-USER-NAME/getting-started
新しいインスタンスでイメージを実行する
イメージがビルドされ、レジストリにプッシュされたので、このコンテナイメージを見たことがない新しいインスタンスでアプリを実行してみましょう。これを行うには、Play with Dockerを使用します。
Play with Dockerはamd64プラットフォームを使用します。Appleシリコンを搭載したARMベースのMacを使用している場合は、Play with Dockerと互換性のあるイメージに再ビルドし、新しいイメージをリポジトリにプッシュする必要があります。
amd64プラットフォーム用のイメージをビルドするには、--platform
フラグを使用します。
$ docker build --platform linux/amd64 -t YOUR-USER-NAME/getting-started .
Docker buildxもマルチプラットフォームのイメージビルドをサポートしています。詳細は、マルチプラットフォームイメージ を参照してください。
-
ブラウザで Play with Docker を開きます。
-
Login を選択し、ドロップダウンリストから docker を選択します。
-
Docker Hubアカウントでサインインし、Start を選択します。
-
左側のサイドバーで ADD NEW INSTANCE オプションを選択します。これが見つからない場合、ブラウザの幅を少し広げてください。数秒後、ブラウザ内にターミナルウィンドウが表示されます。
-
ターミナルで、プッシュしたばかりのアプリを起動します。
$ docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started
イメージがプルされ、最終的に起動するはずです。
ヒント
このコマンドが異なるIPアドレスにポートマッピングをバインドしていることに気づいたかもしれません。以前の
docker run
コマンドは、ホストの127.0.0.1:3000
にポートを公開していましたが、今回は0.0.0.0
を使用しています。127.0.0.1
にバインドすると、コンテナのポートがループバックインターフェースにのみ公開されます。一方、0.0.0.0
にバインドすると、コンテナのポートがホストのすべてのインターフェースに公開され、外部からもアクセス可能になります。ポートマッピングの仕組みについての詳細は、ネットワーキング を参照してください。
-
3000バッジが表示されたら、それを選択します。
もし3000バッジが表示されない場合は、Open Port を選択して
3000
を指定してください。
まとめ
このセクションでは、イメージをレジストリにプッシュして共有する方法を学びました。次に、新しいインスタンスにアクセスし、プッシュしたばかりのイメージを実行することができました。これはCIパイプラインではよくある手順で、パイプラインがイメージを作成してレジストリにプッシュし、プロダクション環境がそのイメージの最新バージョンを使用するという流れになります。
関連情報:
次のステップ
次のセクションでは、コンテナ化されたアプリケーションでデータを永続化する方法を学びます。