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
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
See '/usr/bin/dock
sudo groupadd docker
sudo usermod -g docker vagrant
sudo /bin/systemctl restart docker.service
exit
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}`);
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" ]
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
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
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
[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
[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 化する