アプリケーションの共有¶
構築したイメージは共有できます。 Docker イメージを共有するには、 Docker
注釈
Docker ID
Docker Hub はコンテナ イメージの世界最大のライブラリかつコミュニティであり、 Docker ID でアクセスできます。まだ持っていなければ、無料で Docker ID を作りましょう。
リポジトリ作成¶
イメージを
Docker Hub に サインアップ 又はサインインします。
Create Repository (リポジトリ作成)ボタンをクリックします。
リポジトリ名には
getting-started
を使います。Visibility はPublic
(公開)を確認します。注釈
プライベート リポジトリ
特定のユーザやチームに対してのみ内容を制限するために、Docker は
プライベート リポジトリ を提供しています。御存じですか? 詳細は Docker pricing のページを御覧ください。
Create (作成)ボタンをクリックします。
下の図を見たら、 Docker コマンド例があります。このコマンドは、このリポジトリを送信します。
イメージを 送信 ¶
ヒント
(訳者注)この日本語訳では、イメージの「push」を「送信」として訳しています(コマンドを示す以外)。本来の push は「何かを押し出す」「何かを遠ざける」という意味です。ですが、そのまま訳したり"プッシュ"とカタカナ表記したりしても、抽象的な表現は日本語での理解が困難なため、 Docker の機能を表す「送信」と訳しています。
コマンドラインから、先ほど Docker Hub で見た push (送信)コマンドを実行します。注意点として、入力するコマンドでは自分の名前空間(Docker ユーザ ID)を指定する必要があります。「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
失敗しましたか? 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
docker tag
コマンドについて学ぶには docker tag を御覧ください。
これでもう一度 push コマンドを試します。Docker Hub から値をコピーしている場合でも、先ほどイメージにタグを付けていたように、
tagname
の文字を省略できます。タグを指定しなければ、 Docker はlatest
(最新)と呼ばれるタグを使います。$ docker push YOUR-USER-NAME/getting-started
新しいイメージを実行¶
現在、イメージは構築が終わり、レジストリに送信しました。まだコンテナイメージを扱っていない、真っさらなインスタンス(訳者注:Play widh Docker 環境上の仮想マシン)を使ってアプリを実行しましょう! ここでは、 Play with Docker を使います。
注釈
Play with Docker は amd64 プラットフォームを用いています。もしも Apple Silicon を使う 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 アカウントで接続します。
ログインしたら、左サイドバー上にある ADD NEW INSTANCE (新しいインスタンスの追加)をクリックします。もしも表示さなければ、ブラウザの表示幅を少し広くしてください。数秒しますと、ブラウザ内にターミナル画面が開きます。
ターミナル内で、先ほど送信したアプリを起動します。
$ docker run -dp 0.0.0.0:3000:3000 YOUR-USER-NAME/getting-started
画面ではイメージを取得して、最終的には起動するのが見えるでしょう!
Tip
このコマンドでは、ポートを割り当てて(ポートマッピング)バインドする 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 パイプラインと共通する部分です。パイプラインとはイメージを作成し、レジストリに送信し、プロダクション環境でイメージの最新版を利用できる場所です。
ここまで理解したところで、先ほどのセクションの最後で述べた部分に立ち戻りましょう。振り返れば、アプリの再起動時、todo リストのアイテムが全て消えました。これは明らかに良くないユーザ体験ですので、次は再起動してもデータが
参考
- Share the application