node プロジェクトの docker image をつくってみる。
社内でAWS ECS を使うことになったが、そもそも dokcer image を作ったことがなかったので
調べてみた。
目次
- node プロジェクトの用意
- Dockerfile の作成と build
- image からコンテナ起動
- docker-compose 起動
1. node プロジェクトの用意
typescript & Express を利用した簡単な web サーバを用意する。 port 番号で 3000 で起動して、localhost:3000/api に HTTP GET リクエストするとslack に通知がくるものだ。
フォルダ構成は以下の通り
. ├── __test__ ├── jest.config.js ├── node_modules ├── nodemon.json ├── package-lock.json ├── package.json ├── src └── tsconfig.json
2. Dockerfile とコンテナイメージの作成
alpine という軽量 Linux ディストリビューションを利用する。
この上に nodejs と npm をインストールし、ローカルで開発した node プロジェクトを含めるようにする。そして、npm install
とnpm start
を起動させている。
touch Dockerfile
でカレントディレクトリにファイルを作成して次の通り記述する。
Dockerfile
FROM alpine:latest # instal llatest nodejs and npm RUN apk add --update nodejs nodejs-npm # make entry directory RUN mkdir myapp WORKDIR /myapp # copy localfile to images ADD src/ src/ ADD nodemon.json . ADD package.json . ADD tsconfig.json . RUN npm set progress=false && \ npm install CMD npm start
npm set progress=false
は本質的ではないので、なくてもよい。
これはnpm install
の進捗報告を出力しない設定で起動を速くしているために記述している。
Dockerfile があるディレクトリから以下を実行する
docker build -t tsweb .
-t オプションはイメージに名前をつける。tag の略称だ。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tsweb latest 1a656139af79 6 seconds ago 32.9MB alpine latest 4d90542f0623 3 days ago 5.58MB
3. コンテナ起動
以下のコマンドを叩く。
docker run -d --name web -p 8000:3000 tsweb
curl localhost:8000/api
と叩けば、次の通りslack通知がくる。
4. docker-compose 起動
蛇足になるが、docker-compose を利用して同じようにコンテナを起動してみる。
docker-compse.yml
web: image: tsweb ports: - '8000:3000'
docker-compose up -d
でバックグラウンドでコンテナ起動。
最後に
ローカル環境で docker image を作成してコンテナ起動までの手順を紹介した。
今度は ECR に image を登録して、ECS で利用してみるところまで紹介したい。