dockerに入門してみる(その4)
しばらく前に、「次の新卒に教えたい、入社前に勉強しておくと良いこととかありますか?」という質問を人事から受けましたが、今なら声を大にしてDocker!と言いたい。そんな日々を過ごしています。
前回の記事はこちら↓ ren-opdev.hatenablog.com
リポジトリを作成する。
コンテナイメージを共有するには、Docker HubのようなDocker registryを使う必要があります。
まず、https://hub.docker.com/へログインし、Create Repositoryボタンをクリックします。
次に、リポジトリの名前をgetting-started
とし、公開範囲がPublicであることを確認したらCreateボタンをクリックします。
これだけでリポジトリが作れました。 右側にある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
成功しました!リポジトリにも追加されていますね。おー
新しいインスタンスでイメージを実行する。
新しいインスタンスでコンテナイメージを実行してみるみたいです。新しいインスタンス…?
とりあえず、言われた通りPlay with Dockerにいき、Loginボタンをクリックします。
ほどなくしてLoginボタンがStartボタンに変わりました。こういう、rails server
のときにも出てくるような初期画面好きです。ワクワクの感じ。
そのままクリックしてみると、カウントダウンだけされている画面に。 左側の+ 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番のボタンが出てきています。これをクリックすると、ちゃんとローカルでも見られていたアプリケーションを確認することができました。
コンテナイメージの共有方法と、共有したイメージがちゃんと実行できることを確かめたところでこのチャプターは終わりです。 新しいイメージを作って、それをregistryにpushし、本番環境で使えるようにする…。これがまさにCIパイプラインで行っていることなんですね。すごい。
次のチャプターでは、前回課題に残していた「リスタートしたらデータ飛ぶ問題」を解決できるようです。