Table of Contents
windows10でdocker toolboxがインストール済みが前提です。
VirtualBoxのdockerホストを構築してある
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v17.03.1-ce
プロジェクトのディレクト作成
mkdir sample && cd sample
docker-composeでnodeのコンテナを起動する
docker-compose.ymlを作成する
version: '2'
services:
sample:
container_name: sample
image: node:7.10
image: node:8.10
ports:
- "3000:3000"
tty: true
working_dir: /app/sample
volumes:
- ./:/app/sample
- /app/sample/node_modules
nodeのコンテナを確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8d8b6eb8494 node:7.10 "node" About a minute ago Up 25 seconds 0.0.0.0:3000->3000/tcp sample
sampleフォルダには、空のnode_modulesフォルダが生成される。
node_modulesをホストとマウントするとモジュールインストールがうまくいかなかったのでコンテナ内に「/app/sample/node_modules」指定する
コンテナにログイン
docker exec -it sample /bin/bash
package.jsonの作成
npm init -y
sampleフォルダにpackage.jsonが追加される
express-generatorをインストールする
npm install -D express-generator
package.jsonを編集する
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"express": "express"
},
scriptのところに「”express”: “express”」を追加する
expressの雛形を作成する
npm run express . -f
「y」を入力して雛形を作成
sample
bin/
node_modules/
public/
routes/
views/
app.js
docker-compose.yml
package.json
フォルダはこんな感じになる
express-generatorはもう使わないので削除する
npm rm express-generator
依存モジュールのバージョンも固定もしたいのnpm-shrinkwrap.jsonを作成
npm shrinkwrap --dev
npmインストール
npm install && npm cache clean
起動して確認
npm start
http://192.168.99.100:3000/
次回コンテナを起動したときアプリが起動するようにする
docker-compose.ymlを修正する
version: '2'
services:
sample:
container_name: sample
image: node:7.10
ports:
- "3000:3000"
tty: true
working_dir: /app/sample
command: ["npm", "start"]
volumes:
- ./:/app/sample
- /app/sample/node_modules
command: [“npm”, “start”] を追加する
コンテナを停止する
docker stop sample
コンテナを起動する
docker-compose up -d
確認する
http://192.168.99.100:3000/
コンテナを共有するときのためDockerfileを作成する
しかしながら、package.jsonとnpm-shrinkwrap.jsonがある状態で共有
Dockerfile
FROM node:7.10
ENV APP_ROOT /app/sample
WORKDIR $APP_ROOT
COPY package.json $APP_ROOT
COPY npm-shrinkwrap.json $APP_ROOT
RUN npm install && npm cache clean
COPY . $APP_ROOT
EXPOSE 3000
CMD ["npm", "start"]
Dockerfileを使うときのdocker-compose.ymlのimageをbuildにする
version: '2'
services:
sample:
container_name: sample
build: ./
ports:
- "3000:3000"
tty: true
working_dir: /app/sample
command: ["npm", "start"]
volumes:
- ./:/app/sample
- /app/sample/node_modules
参考サイト
http://qiita.com/togana/items/40b50426d511327238af