dockerに入門してみる(その2)
今日も勉強してみる。そういえば、Getting Startedのチャプターは10個あるみたい。2020年のうちにできるかな。
前回の記事はこちら↓ ren-opdev.hatenablog.com
このTutorialでは、Node.jsで動くToDoリストアプリケーションを題材にしていくらしい。 Node.jsに詳しくなくても大丈夫ということなので、安心。2021年は、javascriptの国にも足を踏み入れたい。
ソースをZIPでダウンロードする。
アプリケーションのソースはZIPでダウンロードする。ダウンロード先はhttp://localhost/assets/app.zip。 ダウンロードしたZIPをエクスプローラー内で展開して、appディレクトリを生成できた。このディレクトリをVSCodeで開いておく。
Dockerfileを作り、buildする。
アプリケーションをbuildするためには、Dockerfile
が必要とのこと。
Dockerfileはテキストベースのスクリプトで、コンテナイメージを作るのに使われるもの。注意点は、.txt
のような拡張子を付けてはいけないこと。拡張子って勝手に追加されてることあるし、よくある躓きポイントみたい。
指示に従い、package.json
と同じ階層にDockerfileを作ってみた。
FROM node:12-alpine WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"]
これは、
node:12-alpine
イメージをベースイメージとして/app
ディレクトリに- コピーし、
yarn install --production
でアプリケーションの依存関係をインストールする。- 最後に、このイメージからコンテナをstartさせるときに実行するコマンドをCMDで定義している。
…なるほど。
とにかく、ついにDocker build!
appディレクトリに移動して、docker build -t getting-started .
を実行する。
-t getting-started
は、「ビルドしたイメージをgetting-started
と呼びますよー」というタグ付けオプションで、
最後の.
は、Dockerに対して「dockerfileを見てくれ」って命令しているらしい。
PS C:\Users\530lo\Documents\docker\tutorial\app> docker build -t getting-started . [+] Building 0.1s (2/2) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 2B 0.0s => CANCELED [internal] load .dockerignore 0.0s => => transferring context: 0.0s failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount711661012/Dockerfile: no such file or directory
失敗した。
failed to solve with frontend dockerfile.v0: failed to read dockerfile
。。dockerfileが読み込めないらしい。
と思ったら、 no such file or directoryを吐かれている。階層を間違えていたみたい。
appディレクトリの中のappディレクトリに移って、もう一度実行する。
PS C:\Users\530lo\Documents\docker\tutorial\app\app> docker build -t getting-started . [+] Building 22.4s (10/10) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 141B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/node:12-alpine 3.0s => [auth] library/node:pull token for registry-1.docker.io 0.0s => [internal] load build context 0.1s => => transferring context: 4.63MB 0.1s => [1/4] FROM docker.io/library/node:12-alpine@sha256:9f8d0fde57ef82d73d234d712edc211d1235469cb55426c0383b7eacf7 4.4s => => resolve docker.io/library/node:12-alpine@sha256:9f8d0fde57ef82d73d234d712edc211d1235469cb55426c0383b7eacf7 0.0s => => sha256:3d6d69ed0edb4b5dab08a0a3d168b8379c44da6cbed1de8ec56a5cbbfd91d966 2.24MB / 2.24MB 0.8s => => sha256:9f8d0fde57ef82d73d234d712edc211d1235469cb55426c0383b7eacf7d9199f 1.43kB / 1.43kB 0.0s => => sha256:a9ee412baa5c130dea5f8483e95890f8d7e499dda196973f4397189b0bb98244 1.16kB / 1.16kB 0.0s => => sha256:844f8bb6a3f8ba45d256a79b2db654da9234204d11df77106b3112bd11facede 6.73kB / 6.73kB 0.0s => => sha256:cbdbe7a5bc2a134ca8ec91be58565ec07d037386d1f1d8385412d224deafca08 2.81MB / 2.81MB 0.6s => => sha256:da41a38d96d0d8d12efb7c7c40627b4d4db0b20aa58ed143dd18937350e367e2 24.85MB / 24.85MB 2.9s => => extracting sha256:cbdbe7a5bc2a134ca8ec91be58565ec07d037386d1f1d8385412d224deafca08 0.3s => => sha256:13618797e148aa5d57b8f2ae0b835a343ef99066f944c3abf212eba1710955e9 282B / 282B 0.9s => => extracting sha256:da41a38d96d0d8d12efb7c7c40627b4d4db0b20aa58ed143dd18937350e367e2 1.0s => => extracting sha256:3d6d69ed0edb4b5dab08a0a3d168b8379c44da6cbed1de8ec56a5cbbfd91d966 0.1s => => extracting sha256:13618797e148aa5d57b8f2ae0b835a343ef99066f944c3abf212eba1710955e9 0.0s => [2/4] WORKDIR /app 0.6s => [3/4] COPY . . 0.1s => [4/4] RUN yarn install --production 12.8s => exporting to image 1.3s => => exporting layers 1.3s => => writing image sha256:df95916b5a55ce4b08704d0c1f8b1a0f914005fb6b7e38e5e7f61c13b45313c1 0.0s => => naming to docker.io/library/getting-started
成功した。
これで、Dockerfileから新しいコンテナイメージをビルドすることができた。ここでsha256値と共に沢山ダウンロードされているものは、node:12-alpine
イメージをスタートさせるのに必要なイメージとのこと。
ちなみに、このハッシュ値を使ってイメージをPullすることもできるらしい。 docs.docker.com
アプリケーションを実行する。
コンテナイメージを用意できたから、アプリケーションを実行してみよう。
このTutorialを起動したときと同じように、docker run
を使えば良い。
docker run -dp 3000:3000 getting-started
http://localhost:3000/ を開いてみると、Todo Appを開くことができた。
アイテムの追加や削除、ToDoアプリらしくチェックを入れて打消し線を加えることもできる。スゴイ、ちゃんとアプリケーションが動いてる。
Docker buildの方法と、ビルドしたコンテナイメージを実行してみたところで、このチャプターは終わり。 次はこのアプリケーションに改修を加えるやり方と、他にも便利なコマンドを勉強するみたい。
こんなに簡単にアプリケーションを実行できるのか。Dockerスゴイ!