docker-compose(Docker for mac)로 실용적인 node.js 개발 환경 만들기
도커
Docker의 장점과 단점은 이 기사
개인적으로 소중하다고 생각하는 Pros는 이하의 2개.
여러 사람이 개발할 때 환경의 차이가 생기지 않습니다.
버전에 의존한 개발을 하고 있는 경우 등에, 동일한 환경인 보증을 할 수 있다.
"It works on my machine!!"라고 말할 수 없게 된다.
컨테이너를 버리거나 재생성하기 쉽습니다.
예를 들어, Node.js
의 버젼을 바꾸고 싶은 경우, Dockerfile
의 image
를 재기록하는 것만으로 할 수 있다.
단지 Docker
자체, 장인기라든지 버릇이 많기도 하기 때문에 Vagrant
로 괜찮아지는 일도 있습니다만. . .
여기서 할 일
이 문서에서는 Express4
에서 node.js
의 프로젝트를 만들고 Hello World
를 표시합니다 node.js
컨테이너
포트 80번을 node.js
의 3000번으로 포트 포워드 nginx
컨테이너,
사용하지 않을지도 모릅니다만, node.js
컨테이너로부터 접속한다 mysql
컨테이너를 작성해 제휴시킵니다.
환경
최근에 Docker for Mac
가 나왔으므로 마침내 VirtualBox가 더 이상 필요하지 않습니다.
※ 로컬에도 node.js가 필요합니다.
express-generator로 병아리 만들기
$ npm install -g express
$ npm install -g express-generator
$ express hello-world
warning: the default view engine will not be jade in future releases
warning: use `--view=jade' or `--help' for additional options
create : hello-world
create : hello-world/package.json
create : hello-world/app.js
create : hello-world/public
create : hello-world/routes
create : hello-world/routes/index.js
create : hello-world/routes/users.js
create : hello-world/public/images
create : hello-world/views
create : hello-world/views/index.jade
create : hello-world/views/layout.jade
create : hello-world/views/error.jade
create : hello-world/public/javascripts
create : hello-world/public/stylesheets
create : hello-world/public/stylesheets/style.css
create : hello-world/bin
create : hello-world/bin/www
install dependencies:
$ cd hello-world && npm install
run the app:
$ DEBUG=hello-world:* npm start
$ cd hello-world/
docker-compose.yml 만들기
node.js
의 이미지는 공식 리포지토리 의 6.9-alpine
를 사용합니다.※ alpine은 경량화된 Linux 이미지입니다. 예를 들면
vim
라든가 인스톨 되고 있지 않습니다.기본적으로 필요하지 않으면
alpine
로 진행합니다.docker-compose.yml
version: '2'
services:
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
volumes:
- "./conf.d:/etc/nginx/conf.d"
links:
- node_express
node_express:
image: node:6.9-alpine
container_name: node_express
hostname: node_express
volumes:
- ".:/src"
working_dir: /src
command: [sh, -c, npm install && npm start]
ports:
- "3000:3000"
links:
- mysql
mysql:
image: mysql:5.6
container_name: mysql56
hostname: mysql
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
ports:
- "3306:3306"
environment:
- "MYSQL_ROOT_PASSWORD=root"
- "MYSQL_DATABASE=sample"
/conf.d/nodejs.conf
80번에서 3000번 포트 포워딩
server {
listen 80;
server_name _;
client_max_body_size 10M;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://node_express:3000/;
}
}
proxy_pass http://node_express:3000/;
는 docker-compose.yml
의 hostname
를 지정합니다.일단 이것으로 움직인다고 생각하므로 시험해 보겠습니다.
$ docker-compose -p hello_project up -d --build
http://localhost:3000 또는 http://localhost에 액세스하면 express 화면이 표시됩니다.
docker-compose
를 멈춥니다.$ docker-compose -p hello_project kill
Makefile 만들기
docker-compose
에서 자주 사용하는 명령은 Makefile
에 정리해 버립니다.Makefile
PROJECT = hello_project
.PHONY: start
start:
docker-compose -p $(PROJECT) up -d --build
.PHONY: logs
logs:
docker-compose -p $(PROJECT) logs
.PHONY: restart
restart:
docker-compose -p $(PROJECT) kill && \
docker-compose -p $(PROJECT) rm -f && \
docker-compose -p $(PROJECT) up -d --build
.PHONY: kill
kill:
docker-compose -p $(PROJECT) kill
.PHONY: ps
ps:
docker-compose -p $(PROJECT) ps
make start
, make restart
, make logs
, make kill
, make ps
에서 docker-compose
를 조작할 수 있습니다.$ make start
docker-compose -p hello_project up -d --build
Creating mysql56
Creating node_express
Creating nginx
$ make ps
docker-compose -p hello_project ps
Name Command State Ports
-----------------------------------------------------------------------------------
mysql56 docker-entrypoint.sh mysql ... Up 0.0.0.0:3306->3306/tcp
nginx nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp
node_express sh -c npm install && npm start Up 0.0.0.0:3000->3000/tcp
Host에서 MySQL 컨테이너에 연결해 봅니다.
$ mysql -h 0.0.0.0 -uroot -proot
$ make kill
docker-compose -p hello_project kill
Killing nginx ... done
Killing node_express ... done
Killing mysql56 ... done
출처
Enjoy your docker life !!
Reference
이 문제에 관하여(docker-compose(Docker for mac)로 실용적인 node.js 개발 환경 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/devalon/items/dd0fdce02156855b5df5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)