アプリケーションの共有
ここまでにイメージをビルドしたので、これを共有しましょう。 Docker イメージを共有するには Docker レジストリを使うことになります。 デフォルトのレジストリは Docker Hub です。 これまで利用してきたイメージはすべて Docker Hub から取得したものでした。
Docker ID
Docker ID を利用すれば Docker Hub にアクセスすることができます。 Docker Hub は世界規模のコンテナーイメージライブラリおよびコミュニティです。 まだ Docker ID を取得していない場合は、無料入手してください。
リポジトリの生成
イメージをプッシュするには、まず Docker Hub 上にリポジトリを生成する必要があります。
-
Docker Hub に サインアップ またはサインインします。
-
Create Repository(リポジトリの生成)ボタンをクリックします。
-
リポジトリ名を
getting-started
とします。 Visibility はPublic
としてください。プライベートリポジトリ
Docker ではプライベートリポジトリが提供されていて、特定のユーザーやチームにのみアクセスを制限できることをご存じですか? 詳しくは Docker 料金体系 のページを確認してください。
-
Create(生成)ボタンをクリックします。
イメージの下を見てみると、例として Docker command が表示されています。 このコマンドはそのリポジトリへのプッシュを行います。
イメージのプッシュ
-
コマンドラインから 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
を実行しても、そのイメージはありません。これを解決するには、作り出したイメージに対して別の名前をつける必要があります。
-
docker login -u YOUR-USER-NAME
コマンドを実行して Docker Hub にログインします。 -
docker tag
コマンドを実行してgetting-started
イメージに新たな名前をつけます。YOUR-USER-NAME
の部分は自分の Docker ID に書き換えてください。$ docker tag getting-started YOUR-USER-NAME/getting-started
-
そこでもう一度プッシュコマンドを実行します。 コマンドを 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
イメージがプルされた後に起動されます。
-
アプリが起動したら 3000 badge をクリックします。 変更を加えたアプリが起動されたことがわかります。 やりました。 3000 badge が表示されなかった場合は、「Open Port」ボタンをクリックして 3000 を入力してください。
まとめ
本節では、レジストリにイメージをプッシュしてこれを共有する方法を学びました。 また新たなインスタンスを実行させ、プッシュした新たなイメージの起動に成功しました。 CI パイプラインとしてこれはいたって普通のことです。 このパイプラインによってイメージを生成しレジストリにイメージをプッシュします。 そして本番環境ではイメージの最新バージョンを用いることができます。
ここでのことは明らかになったので、前節の終わりに示していた気がかりな点に戻ることにします。 もう一度言うと、アプリを再起動すると、それまでの Todo リストアイテムが消えてしまっていたということです。 これは明らかに正しい形ではありません。 そこで再起動してもデータが残るような方法を学んでいきましょう。
get started, setup, orientation, quickstart, intro, concepts, containers, docker desktop, docker hub, sharing