Docker Hubでイメージをシェアする
Part 4ではSwarmにアプリをデプロイした.
最後のPart 5ではイメージのシェアを行う.
Get Started, Part 5: Sharing Images on Docker Hub
https://docs.docker.com/get-started/part5/
もくじ
- Prerequisites
- Introduction
- Setting Up Your Docker Hub Account
- Creating and Pushing to a Docker Hub Repository
- Conclusion
Prerequisites
https://docs.docker.com/get-started/part5/#prerequisites
- Part 2でのアプリのコンテナ化ができていること.
Introduction
https://docs.docker.com/get-started/part5/#introduction
ここまでのパートではDocker Desktop
を利用してアプリのコンテナ化(Part 2), Kubernetes
でのデプロイ(Part 3), Swarm
でのデプロイ(Part 4)を行ってきた.
このパートではコンテナアプリ開発の最後のステップであるimage
のシェアを行う.Docker Hub
のようなレジストリを利用することで, image
のダウンロードと実行がどこでも簡単にできるようになる.
Setting Up Your Docker Hub Account
https://docs.docker.com/get-started/part5/#setting-up-your-docker-hub-account
まだDocker ID
を持っていない場合は以下の手順に従うことでDocker Hub
を利用したimage
のシェアが可能になる.
1: ブラウザでDocker Hub
の新規登録ページ https://hub.docker.com/signup を開く.
2: フォームを埋めて送信し, Docker ID
を取得する.
3: ツールバーのDocker
アイコンを押し, プルダウンメニューからSign In / Create Docker ID
をクリックする.
取得したDocker ID
とパスワードを入力してログインする.
ログインに成功するとプルダウンメニューにusername: Sign out
が表示される.
また, この手順の代わりにdocker login
でも同じことができる.
# Dockerレジストリにログイン
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: uzimihsr
Password:
Login Succeeded
[追加]ログアウトはdocker logout
でできる.
# Dockerレジストリからログアウト
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Creating and Pushing to a Docker Hub Repository
https://docs.docker.com/get-started/part5/#creating-and-pushing-to-a-docker-hub-repositoryDocker Hub
のアカウントをDocker Desktop
に紐付けることができたので, さっそくリポジトリを作成して掲示板アプリをシェアする.
1: ツールバーのDocker
アイコンを押し, Repositories -> Create...
と進む.
デフォルトブラウザでリポジトリ作成画面が開かれる.
2: Name
(リポジトリ名)にbulletinboardと入力し, 他の内容は初期状態のまま下部のCreate
を押す.
リポジトリが作成され, bulletinboardリポジトリの画面に遷移する.
3: image
をDocker Hub
でシェアするためには, アップロードする前にDocker Hub
上で管理するための名前をつける必要がある.Docker Hub
上でimage
を識別する名前は基本的に<Docker Hub ID>/<Repository Name>:<tag>
の形式を取る.
今回の掲示板アプリのimage
であれば次のように名前をつける.
# imageを確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
bulletinboard 1.0 06f7fe6f1ca0 2 days ago 681MB
# ローカルにあるimage(bulletinboard:1.0)にDocker Hub用のタグ(uzimihsr/bulletinboard:1.0)を付け直す
$ docker image tag bulletinboard:1.0 uzimihsr/bulletinboard:1.0
# imageを再確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
bulletinboard 1.0 06f7fe6f1ca0 2 days ago 681MB
uzimihsr/bulletinboard 1.0 06f7fe6f1ca0 2 days ago 681MB
4: タグを付け直したimage
をDocker Hub
にアップロード(push)する.
# image(uzimihsr/bulletinboard:1.0)をpush
$ docker image push uzimihsr/bulletinboard:1.0
The push refers to repository [docker.io/uzimihsr/bulletinboard]
0b4750593321: Pushed
3896ce266caf: Pushed
439a7da7954e: Pushed
f7d0b1f86348: Pushed
dd883cbb0cf7: Mounted from library/node
a3a3f69aebe8: Mounted from library/node
0da372da714b: Mounted from library/node
bf3841becf9d: Mounted from library/node
63866df00998: Mounted from library/node
2f9128310b77: Mounted from library/node
d9a5f9b8d5c2: Mounted from library/node
c01c63c6823d: Mounted from library/node
1.0: digest: sha256:339f47f51b574edbd94c981e8a58b0e019ba7451a8e83f44cca1cc32d3748d8b size: 2841
先程のbulletinboardリポジトリの画面をリロードするか, https://hub.docker.com/r/uzimihsr/bulletinboard/tags を開くと確かにimage
がpushされていることを確認できる. また, デフォルトではリポジトリがpublicになっていることに注意.
[追加]レジストリのimage
を利用する例は旧記事にあるので, 今回は省略する.
Conclusion
https://docs.docker.com/get-started/part5/#conclusion
以上の手順によりDocker Hub
上にimage
をpushできたため, どこからでもこのimage
を使えるようになった.
このimage
(bulletinboard:1.0)をローカルに持っていないクラスタから今回作成したリポジトリのimage
を指定すると, Docker
はこれを自動でダウンロードして使用してくれる.
このようにimage
はどこでも利用することができ, さらにアプリに必要な依存関係はimage
の中で完結するため,
マシンにDocker
とオーケストレーター(kubernetes
またはSwarm
)さえインストールすればどんなコンテナアプリでも動かすことができる.
また, 今回はimage
をDocker Hub
にpushしただけだが, image
の作成に使用したDockerfile
やオーケストレーターでのコンテナの起動に使用するKubernetes
YAMLファイル, Stack
ファイルについてはどうすれば良いのか?
それらのファイルはバージョン管理システム(Gitなど)でソースコードと一緒に管理し, そのリポジトリが簡単に参照できるようDocker Hub
リポジトリの説明欄にリンクを貼り, image
のビルド手順を残し, アプリ利用方法がわかるようにしておくのがベストプラクティスである.
感想
ここまで5つのパートを読んでみて, なんとなくで済ませていたDocker
コンテナの扱いについてちょっとは理解が深まった気がする.
特にレジストリを使ってimage
が共有できるのは素晴らしいと思った.Kubernetes
についても(ほんとに一部のリソースだけだが)触れられて良かった.Swarm
についてはなんか公式でもKubernetes
に切り替えている感がドキュメントからも伝わってきたけど,
旧Get Startedでも触ったように実際のマシンでも簡単にクラスタ構築ができるのは便利だとは思う…
でも最近はKubernetes
も環境構築が簡単になってきているみたいなので, やっぱりお察し.
というわけで次はKubernetes
の公式ドキュメントで入門に良さそうなものがあったらまた読んでみたい.