2017-10-24 10 views
1

私は開発目的でWindows上でDockerを使用しています。私はnode.jsプロジェクトの単純なワークフローを作成しようとしています。単純なnode.jsワークフローとドッカー

私はこのチュートリアルhttps://nodejs.org/en/docs/guides/nodejs-docker-webapp/に続くので、私のDockerfileこの

FROM node:boron 

# Create app directory 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json . 
# For [email protected] or later, copy package-lock.json as well 
# COPY package.json package-lock.json ./ 

RUN npm install 

# Bundle app source 
COPY . . 

EXPOSE 8080 
CMD [ "npm", "start" ] 

のように見えるそれぞれの変更のための私の "ワークフロー" は、各変更後の本

FIRST BUILDよう

docker build -t thomas/myApp DockerProjects/myApp ; docker run --name app -p 49160:8080 -d thomas/myApp 

を見てしまう

docker build -t thomas/myApp DockerProjects/myApp ; docker stop app ; docker rm app ; docker run --name app -p 49160:8080 -d thomas/myApp 

プロジェクトが変更されるたびに何百ものコンテナが必要なので、別のプロジェクトを作成する前に削除しています。

は、私はいくつかの問題を参照してください。

  • が変更され、新たな画像が新しい<none>:<none>イメージが作成され、構築されるたびに。これらの画像は元の画像と同じ重さです。どうすればそれを避けることができますか?
  • 何とかnodemonを使用できますか?
  • コード内の何かを変更するたびにこのプロセスを自動的に起動できますか?

ドッカーは私にとってはかなり新しく、私はまだそれを試しています。 おかげ

+1

を実行することになります。コンテナ内にボリュームとしてコードをマウントし、コードが変更されるたびにイメージを構築しないでください –

答えて

2

プロジェクトでnodemonを使用すると、ソースコードディレクトリがボリュームにマウントされている間にアプリケーションを自動的に再起動できます。

app/ 
├── Dockerfile 
├── package.json 
├── Gruntfile.js 
├── src/ 
│ └── app.js 
└── docker-compose.yml 

あなたは、複数のコンテナを実行するために使用されるツールであるdocker-composeを使用することができます(nodemon実行するpackage.jsonからGruntを使用している)、このディレクトリ構造を持つ例えば

、。これは、アプリが話すデータベースコンテナや、アプリと相互作用するその他のサービスを追加する場合に便利です。

以下のドッカー作成構成では、srcフォルダをコンテナの/usr/src/app/srcにマウントします。ビルドで

cd app 
docker-compose up 

コマンド上記:src内部の変化を探してnodemonで、あなたは、あなたはどうしたらこれを使用するには、自動的に

コンテナにアプリを再起動しますあなたのマシンに変更を加えることができるようになりますイメージをdockerfileから取得し、docker-compose.ymlで定義されたコンテナを開始します。

docker-compose.yml

version: '2' 

services: 
    your-app: 
    build: . 
    ports: 
    - "8080:8080" 
    restart: always 
    container_name: app_container 
    volumes: 
    - ./src:/usr/src/app/src 
    environment: 
    - SERVER_PORT=8080 

Dockerfile

FROM node:latest 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

COPY package.json . 
COPY Gruntfile.js . 

RUN npm install 

CMD ["npm","start"] 

Gruntfile.js:

var path = require('path'); 

module.exports = function (grunt) { 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     concurrent: { 
      dev: { 
       tasks: ['nodemon'], 
       options: { 
        logConcurrentOutput: true 
       } 
      } 
     }, 
     nodemon: { 
      dev: { 
       script: 'src/app.js', 
       options: { 
        ignore: [ 
         'node_modules/**' 
        ], 
        ext: 'js' 
       } 
      } 
     }, 
     clean: {} 
    }); 
    grunt.loadNpmTasks('grunt-concurrent'); 
    grunt.loadNpmTasks('grunt-nodemon'); 
    grunt.registerTask('default', ['concurrent']); 
}; 

package.json:

{ 
    "name": "your-app", 
    "version": "1.0.0", 
    "description": "service", 
    "scripts": { 
    "start": "grunt" 
    }, 
    "author": "someone", 
    "license": "MIT", 
    "dependencies": { 
    "express": "^4.14.0" 
    }, 
    "devDependencies": { 
    "grunt": "1.x.x", 
    "grunt-cli": "1.x.x", 
    "grunt-concurrent": "2.x.x", 
    "grunt-nodemon": "0.4.x" 
    } 
} 

サンプルapp.js:

'use strict'; 

const express = require('express'); 
const port = process.env.SERVER_PORT; 

var app = express(); 

app.get('/', function(req, res) { 
    res.send('Hello World'); 
}); 

app.listen(port, function() { 
    console.log('listening on port ' + port); 
}); 

イメージを再構築するには、あなたが開発シナリオの場合、ボリュームマウントを使用する必要がありますdocker-compose build

+0

正確な答えをありがとう – ThomasF62

0

Each time there is a change and a new image is build, a new <none>:<none> image is created. These images have the same weight as the original one. How can I avoid that ?

あなたがすることはできません。これは:iamgeはあなたの新しい画像に置き換えられたあなたの前の画像です。だから、それを削除します。docker image prune

Can I use nodemon somehow?

を私はそれに慣れていないんだけど、それだけで、サーバーを再起動するように見えますが、npm installを行うdoesnt't。

Can I launch this process automatically each time I change something in the code?

私はジェンキンスを使用して、自動的に各コミットはgitに新しいドッカーのイメージを構築します。

関連する問題