アプリケーションの共有¶
イメージを構築したので、共有しましょう! Docker イメージを共有するには、 Docker
注釈
Docker ID
Docker Hub はコンテナ イメージの世界最大のライブラリかつコミュニティであり、 Docker ID でアクセスできます。まだ持っていなければ、無料で Docker ID を作りましょう。
リポジトリ作成¶
イメージを
Docker Hub に サインアップ またはサインインします。
Create Repository (リポジトリ作成)ボタンをクリックします。
リポジトリ名には
getting-started
を使います。Visibility はPublic
(公開)を確認します。
Create (作成)ボタンをクリックします。
イメージを 送信 ¶
ヒント
(訳者注)この日本語訳では、イメージの「push」を「送信」として訳しています(コマンドを示す以外)。本来の push は「何かを押し出す」「何かを遠ざける」という意味です。ですが、そのまま訳したり"プッシュ"とカタカナ表記しても、抽象的な表現は日本語での理解が困難なため、 Docker の機能を表す「送信」と訳しています。
コマンドラインから、先ほど 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
を実行しても、該当するイメージは見つからないでしょう。修正するには、現在の構築済みイメージに付いている「
タグ 」に、別の名前を付ける必要があります。
コマンド
docker login -u 自分のユーザ名
で Docker Hub へログインします。
docker tag
コマンドを使い、getting-started
イメージに新しい名前を追加します。注意点として、YOUR-USER-NAME
は自分の Docker ID に置き換えます。
$ docker tag getting-started YOUR-USER-NAME/getting-started
これでもう一度 push コマンドを試します。Docker Hub から値をコピーしている場合でも、先ほどイメージにタグを付けていたように、
tagname
の文字を省略できます。タグを指定しなければ、 Docker はlatest
(最新)と呼ばれるタグを使います。
$ docker push YOUR-USER-NAME/getting-started
新しいインスタンスでイメージを実行¶
現在、イメージは構築が終わり、レジストリに送信しました。このコンテナ イメージを使っていない、真っ新なインスタンス上でアプリを実行しましょう! それには、 Play with Docker を使います。
ブラウザで Play with Docker を開きます。
Login をクリックし、ドロップダウン リストから docker を選びます。
自分の Docker Hub アカウントで接続します。
ログインしたら、左サイドバー上にある ADD NEW INSTANCE (新しいインスタンスの追加)をクリックします。もしも表示さなければ、ブラウザの表示幅を少し広くしてください。数秒すると、ブラウザ内にターミナル画面が開きます。
ターミナル内で、先ほど送信したアプリを起動します。
$ docker run -dp 3000:3000 YOUR-USER-NAME/getting-started
.. You should see the image get pulled down and eventually start up!
イメージを取得し、最終的には起動するのが見えるでしょう!
起動したら 3000 バッジをクリックすると、変更を加えたアプリが表示されるでしょう! もし 3000 バッジが表示されなければ、「Open Port」(ポートを開く)ボタンをクリックし、 3000 と入力します。
まとめ¶
このセクションでは、イメージを共有するために、レジストリにイメージを送信する方法を学びました。それから真っ新なインスタンスに移動し、送信したばかりのイメージを実行できました。これがまさに CI パイプラインと共通する部分です。パイプラインとはイメージを作成し、レジストリに送信し、プロダクション環境でイメージの最新版を利用できるところです。
ここまで理解したところで、先ほどのセクションの最後で述べた部分に立ち戻りましょう。思い出してみると、アプリの再起動時、todo リストのアイテムが全て消えました。これは明らかに良くないユーザ体験ですので、再起動してもデータが
参考
- Share the application