Skip to content
Dockerワークショップパート3: アプリケーションを共有する

アプリケーションを共有する

イメージをビルドしたので、それを共有できます。Dockerイメージを共有するには、Dockerレジストリを使用する必要があります。デフォルトのレジストリはDocker Hubであり、これまで使用してきたすべてのイメージはここから取得されています。

Docker ID

Docker IDを使用すると、Docker Hubにアクセスできます。Docker Hubは、世界最大のコンテナイメージのライブラリおよびコミュニティです。まだDocker IDを持っていない場合は、Docker ID を無料で作成してください。

リポジトリを作成する

イメージをプッシュするには、まずDocker Hubでリポジトリを作成する必要があります。

  1. サインアップ または Docker Hubにサインイン します。

  2. Create Repository ボタンを選択します。

  3. リポジトリ名には getting-started を使用します。VisibilityPublic になっていることを確認します。

  4. Create を選択します。

以下の画像では、Docker HubからのDockerコマンドの例が表示されています。このコマンドでこのリポジトリにプッシュします。

Docker command with push example

イメージをプッシュする

  1. コマンドラインで、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 を実行しても、同様に見つからないはずです。

    この問題を解決するために、ビルドした既存のイメージに新しい名前を付けてタグ付けする必要があります。

  2. docker login -u YOUR-USER-NAME コマンドを使用してDocker Hubにサインインします。

  3. docker tag コマンドを使用して、getting-started イメージに新しい名前を付けます。YOUR-USER-NAME を自分のDocker IDに置き換えます。

    $ docker tag getting-started YOUR-USER-NAME/getting-started
  4. 次に、もう一度 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もマルチプラットフォームのイメージビルドをサポートしています。詳細は、マルチプラットフォームイメージ を参照してください。

  1. ブラウザで Play with Docker を開きます。

  2. Login を選択し、ドロップダウンリストから docker を選択します。

  3. Docker Hubアカウントでサインインし、Start を選択します。

  4. 左側のサイドバーで ADD NEW INSTANCE オプションを選択します。これが見つからない場合、ブラウザの幅を少し広げてください。数秒後、ブラウザ内にターミナルウィンドウが表示されます。

    Play with Docker add new instance

  5. ターミナルで、プッシュしたばかりのアプリを起動します。

    $ 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 にバインドすると、コンテナのポートがホストのすべてのインターフェースに公開され、外部からもアクセス可能になります。

    ポートマッピングの仕組みについての詳細は、ネットワーキング を参照してください。

  6. 3000バッジが表示されたら、それを選択します。

    もし3000バッジが表示されない場合は、Open Port を選択して 3000 を指定してください。

まとめ

このセクションでは、イメージをレジストリにプッシュして共有する方法を学びました。次に、新しいインスタンスにアクセスし、プッシュしたばかりのイメージを実行することができました。これはCIパイプラインではよくある手順で、パイプラインがイメージを作成してレジストリにプッシュし、プロダクション環境がそのイメージの最新バージョンを使用するという流れになります。

関連情報:

次のステップ

次のセクションでは、コンテナ化されたアプリケーションでデータを永続化する方法を学びます。