VagrantでVM上にDockerを構築してNode.js環境を用意する

正直Node.jsだけだとメリットは感じられなかった。




VM上にDcoker 環境構築




vagrant init centos7.2

Vagrantfileの編集


以下のコメントアウトを外す
config.vm.network "private_network", ip: "192.168.33.10"

仮想マシン立ち上げからDockerのインストール


vagrant up
vagrant ssh
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker

ハローワールド(Docker)


docker run hello-world

以下のエラーが出る場合は権限が足りない。
/usr/bin/docker-current: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See '/usr/bin/dock

sudo groupadd docker
sudo usermod -g docker vagrant
sudo /bin/systemctl restart docker.service
exit

vagrant ssh

docker run hello-world



Node.jsのアプリケーションをDocker上で動かす



公式に沿ってコンテナを作成する
https://nodejs.org/ja/docs/guides/nodejs-docker-webapp/

package.json 作成


vi /vagrant/package.json


{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last ",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

手順に沿うとNode.jsのインストールが必要?
package-lock.json さえあればいい。

npm install


server.js 作成


vi /vagrant/server.js

'use strict';

const express = require('express');

// Constants
const PORT = 80;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
res.send('Hello Docker for Node.js');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

Dockerfile 作成


vi /vagrant/Dockerfile


# Node12で動かす
FROM node:12

# アプリケーションディレクトリを作成する
WORKDIR /usr/src/app

# アプリケーションの依存関係をインストールする
COPY package*.json ./

RUN npm install
# 本番用にコードを作成している場合
# RUN npm install --only

# アプリケーションのソースをバンドルする
COPY . .

# サーバ立ち上げ
EXPOSE 80
CMD [ "node", "server.js" ]


除外対象の設定


vi /vagrant/.dockerignore
node_modules
npm-debug.log


Dockerイメージ構築


docker build -t /node-web-app .
はなんでもいい。
最後の.は忘れがちなので注意する。

docker イメージ確認

docker images

イメージの実行


docker run -p 49160:8080 -d /node-web-app

レポジトリ名を指定する。


[vagrant@localhost vagrant]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ed4eae02ab7 fbi_yamada/node-web-app "docker-entrypoint..." 47 seconds ago Up 46 seconds 0.0.0.0:49160->8080/tcp boring_pasteur

PORTSの情報をもとにcURL.

curl -i localhost:49160
[vagrant@localhost vagrant]$ curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 24
ETag: W/"18-CBL/qyfyOvfcnB/DK8DYarTI0RQ"
Date: Tue, 02 Jun 2020 08:54:10 GMT
Connection: keep-alive

Hello Docker for Node.js

ログの確認。

docker logs
[vagrant@localhost vagrant]$ docker logs 5ed4eae02ab7
Running on http://0.0.0.0:80

以上でNode.jsが動作するようになる。

ホストからアクセスできるか確認


http://192.168.33.10:49160/
へアクセス。

イメージの停止


docker stop

イメージ削除


docker rmi -f



参考



VirtualBox 上で Docker を使う
Dockerを一般ユーザで実行する
Node.js Web アプリケーションを Docker 化する

2020年7月1日水曜日