dockerに入門してみる(その4)

しばらく前に、「次の新卒に教えたい、入社前に勉強しておくと良いこととかありますか?」という質問を人事から受けましたが、今なら声を大にしてDocker!と言いたい。そんな日々を過ごしています。

前回の記事はこちら↓ ren-opdev.hatenablog.com

リポジトリを作成する。

コンテナイメージを共有するには、Docker HubのようなDocker registryを使う必要があります。

まず、https://hub.docker.com/へログインし、Create Repositoryボタンをクリックします。
次に、リポジトリの名前をgetting-startedとし、公開範囲がPublicであることを確認したらCreateボタンをクリックします。

これだけでリポジトリが作れました。 f:id:renkataoka:20201218195449p:plain 右側にあるDocker commandsに書いてあるコマンドを使えば、このリポジトリにpushできるようです。

リポジトリにpushする。

では、このコマンドを使ってpushしてみます。

PS C:\Users\530lo\Documents\docker\tutorial\app\app> docker push 530lotus/getting-started
Using default tag: latest
The push refers to repository [docker.io/530lotus/getting-started]
An image does not exist locally with the tag: 530lotus/getting-started

失敗した…と思いきや、またTutorialの方にも「失敗したよね?」と書いてありますね。。
僕の場合ですと530lotus/getting-startedが見つからないと言われているので、タグ付けをして解決していきます。

まずは、Docker Hubにログインします。

PS C:\Users\530lo\Documents\docker\tutorial\app\app> docker login -u 530lotus
Password:
Login Succeeded

そして、イメージにタグ付けをします。今回はタグ付けというより、ローカルの'getting-started'を530lotus/getting-startedに名称変更する操作といった感じですね。

docker tag getting-started 530lotus/getting-started

もう一度pushしてみます。

PS C:\Users\530lo\Documents\docker\tutorial\app\app> docker push 530lotus/getting-started
Using default tag: latest
The push refers to repository [docker.io/530lotus/getting-started]
e7c0df786fa9: Pushed                                                                                                                                                                                                                                                           a0063b632c32: Pushed                                                                                                                                                                                                                                                           164df51f3404: Pushed                                                                                                                                                                                                                                                           7df30886016b: Mounted from library/node                                                                                                                                                                                                                                        f2253cc2dbde: Mounted from library/node                                                                                                                                                                                                                                        996fa7c6680b: Mounted from library/node                                                                                                                                                                                                                                        3e207b409db3: Mounted from library/node                                                                                                                                                                                                                                        latest: digest: sha256:af721457dd7adc13203207ee664d44f70e68498b029d009092faba6a69e8b63d size: 1788

成功しました!リポジトリにも追加されていますね。おー f:id:renkataoka:20201218202751p:plain

新しいインスタンスでイメージを実行する。

新しいインスタンスでコンテナイメージを実行してみるみたいです。新しいインスタンス…?

とりあえず、言われた通りPlay with Dockerにいき、Loginボタンをクリックします。
ほどなくしてLoginボタンがStartボタンに変わりました。こういう、rails serverのときにも出てくるような初期画面好きです。ワクワクの感じ。 f:id:renkataoka:20201218203735p:plain

そのままクリックしてみると、カウントダウンだけされている画面に。 f:id:renkataoka:20201218203949p:plain 左側の+ ADD NEW INSTANCEをクリックすると、ターミナルが出てきました。このターミナルにdocker runを打ち込むと、無事イメージがpullされ、新しいインスタンスに立ち上がったみたいです。
"新しいインスタンス"は、ローカルじゃない別の環境…くらいの意味だったのかな。実行環境のことをインスタンスと呼ぶのかもしれない。

$ docker run -dp 3000:3000 530lotus/getting-started
Unable to find image '530lotus/getting-started:latest' locally
latest: Pulling from 530lotus/getting-started
cbdbe7a5bc2a: Pull complete 
da41a38d96d0: Pull complete 
3d6d69ed0edb: Pull complete 
13618797e148: Pull complete 
693a276ece8b: Pull complete 
f9fca3fade83: Pull complete 
35fed245150d: Pull complete 
Digest: sha256:af721457dd7adc13203207ee664d44f70e68498b029d009092faba6a69e8b63d
Status: Downloaded newer image for 530lotus/getting-started:latest
169dfe908efffb6a18c401c4458d357d99f1fb1320de0e4870d9a0cdf42b1d96

IPアドレスの右のほうにも3000番のボタンが出てきています。これをクリックすると、ちゃんとローカルでも見られていたアプリケーションを確認することができました。 f:id:renkataoka:20201218205534p:plain


コンテナイメージの共有方法と、共有したイメージがちゃんと実行できることを確かめたところでこのチャプターは終わりです。
新しいイメージを作って、それをregistryにpushし、本番環境で使えるようにする…。これがまさにCIパイプラインで行っていることなんですね。すごい。

次のチャプターでは、前回課題に残していた「リスタートしたらデータ飛ぶ問題」を解決できるようです。