アプリケーションの共有

ここまでにイメージをビルドしたので、これを共有しましょう。 Docker イメージを共有するには Docker レジストリを使うことになります。 デフォルトのレジストリは Docker Hub です。 これまで利用してきたイメージはすべて Docker Hub から取得したものでした。

Docker ID

Docker ID を利用すれば Docker Hub にアクセスすることができます。 Docker Hub は世界規模のコンテナーイメージライブラリおよびコミュニティです。 まだ Docker ID を取得していない場合は、無料入手してください。

リポジトリの生成

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

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

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

  3. リポジトリ名をgetting-startedとします。 Visibility はPublicとしてください。

    プライベートリポジトリ

    Docker ではプライベートリポジトリが提供されていて、特定のユーザーやチームにのみアクセスを制限できることをご存じですか? 詳しくは Docker 料金体系 のページを確認してください。

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

イメージの下を見てみると、例として Docker command が表示されています。 このコマンドはそのリポジトリへのプッシュを行います。

Docker command に示されるプッシュ例

イメージのプッシュ

  1. コマンドラインから Docker Hub 上に示されていたプッシュコマンドを実行してみます。 なお実行コマンドでは、名前空間は「docker」ではなく、あなた自身のものを利用することになります。

     $ 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
    

    失敗したのはなぜでしょう。 上のプッシュコマンドは 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 Hub からコピーしていた場合、tagname部分がないことになります。 イメージ名にはタグを追加しなかったからです。 タグ指定がない場合 Docker はlatestというタグを利用します。

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

新たなインスタンス上でのイメージの実行

イメージをビルドしてレジストリにプッシュするところまでできました。 そこでこのコンテナーイメージをまだ一度も参照したことがない新たなインスタンスを起動することにします。 これを行うためにここでは Play with Docker を利用します。

  1. ブラウザーを開いて Play with Docker にアクセスします。

  2. login をクリックしてドロップダウンリストから docker を選びます。

  3. Docker Hub アカウントに接続します。

  4. ログインを行ったら、左サイドバーにある ADD NEW INSTANCE(新たなインスタンス追加)オプションをクリックします。 (このリンクが見えなかったらブラウザー画面をもう少し広げてください。) 数秒してブラウザーの中にターミナル画面が開きます。

    Play with Docker から新たなインスタンス追加

  5. ターミナルからプッシュした新しいアプリを起動します。

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

    イメージがプルされた後に起動されます。

  6. アプリが起動したら 3000 badge をクリックします。 変更を加えたアプリが起動されたことがわかります。 やりました。 3000 badge が表示されなかった場合は、「Open Port」ボタンをクリックして 3000 を入力してください。

まとめ

本節では、レジストリにイメージをプッシュしてこれを共有する方法を学びました。 また新たなインスタンスを実行させ、プッシュした新たなイメージの起動に成功しました。 CI パイプラインとしてこれはいたって普通のことです。 このパイプラインによってイメージを生成しレジストリにイメージをプッシュします。 そして本番環境ではイメージの最新バージョンを用いることができます。

ここでのことは明らかになったので、前節の終わりに示していた気がかりな点に戻ることにします。 もう一度言うと、アプリを再起動すると、それまでの Todo リストアイテムが消えてしまっていたということです。 これは明らかに正しい形ではありません。 そこで再起動してもデータが残るような方法を学んでいきましょう。

get started, setup, orientation, quickstart, intro, concepts, containers, docker desktop, docker hub, sharing