アプリケーションの共有

イメージを構築したので、共有しましょう! Docker イメージを共有するには、 Docker レジストリ(registry) を使う必要があります。デフォルトのレジストリは Docker Hub で、そこにこれまでに使った全てのイメージがあります。

注釈

Docker ID

Docker Hub はコンテナ イメージの世界最大のライブラリかつコミュニティであり、 Docker ID でアクセスできます。まだ持っていなければ、無料で Docker ID を作りましょう。

リポジトリ作成

イメージを 送信(push) するには、まず Docker Hub にレポジトリを作成する必要があります。

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

  1. Create Repository (リポジトリ作成)ボタンをクリックします。

  1. リポジトリ名には getting-started を使います。Visibility は Public (公開)を確認します。

  1. Create (作成)ボタンをクリックします。

Docker コマンドの push 例

イメージを 送信(push)

ヒント

(訳者注)この日本語訳では、イメージの「push」を「送信」として訳しています(コマンドを示す以外)。本来の push は「何かを押し出す」「何かを遠ざける」という意味です。ですが、そのまま訳したり"プッシュ"とカタカナ表記しても、抽象的な表現は日本語での理解が困難なため、 Docker の機能を表す「送信」と訳しています。

  1. コマンドラインから、先ほど Docker Hub で見た push (送信)コマンドを実行します。注意点として、入力するコマンドでは「docker」ではなく、自分の名前空間(Docker ユーザ ID)を指定する必要があります。

    $ 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 を実行しても、該当するイメージは見つからないでしょう。

    修正するには、現在の構築済みイメージに付いている「 タグ(tag) 」に、別の名前を付ける必要があります。

  1. コマンド docker login -u 自分のユーザ名 で Docker Hub へログインします。

  1. docker tag コマンドを使い、 getting-started イメージに新しい名前を追加します。注意点として、 YOUR-USER-NAME は自分の Docker ID に置き換えます。

$ docker tag getting-started YOUR-USER-NAME/getting-started
  1. これでもう一度 push コマンドを試します。Docker Hub から値をコピーしている場合でも、先ほどイメージにタグを付けていたように、 tagname の文字を省略できます。タグを指定しなければ、 Docker は latest (最新)と呼ばれるタグを使います。

$ docker push YOUR-USER-NAME/getting-started

新しいインスタンスでイメージを実行

現在、イメージは構築が終わり、レジストリに送信しました。このコンテナ イメージを使っていない、真っ新なインスタンス上でアプリを実行しましょう! それには、 Play with Docker を使います。

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

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

  1. 自分の Docker Hub アカウントで接続します。

  1. ログインしたら、左サイドバー上にある ADD NEW INSTANCE (新しいインスタンスの追加)をクリックします。もしも表示さなければ、ブラウザの表示幅を少し広くしてください。数秒すると、ブラウザ内にターミナル画面が開きます。

Play with Docker と新しいインスタンス
  1. ターミナル内で、先ほど送信したアプリを起動します。

$ docker run -dp 3000:3000 YOUR-USER-NAME/getting-started

..    You should see the image get pulled down and eventually start up!

イメージを取得し、最終的には起動するのが見えるでしょう!
  1. 起動したら 3000 バッジをクリックすると、変更を加えたアプリが表示されるでしょう! もし 3000 バッジが表示されなければ、「Open Port」(ポートを開く)ボタンをクリックし、 3000 と入力します。

まとめ

このセクションでは、イメージを共有するために、レジストリにイメージを送信する方法を学びました。それから真っ新なインスタンスに移動し、送信したばかりのイメージを実行できました。これがまさに CI パイプラインと共通する部分です。パイプラインとはイメージを作成し、レジストリに送信し、プロダクション環境でイメージの最新版を利用できるところです。

ここまで理解したところで、先ほどのセクションの最後で述べた部分に立ち戻りましょう。思い出してみると、アプリの再起動時、todo リストのアイテムが全て消えました。これは明らかに良くないユーザ体験ですので、再起動してもデータが 保持(persist) できる方法を学びましょう。