티스토리 뷰

docker

docker로 nodejs 실행하기

모카데브 2018. 6. 11. 17:06

요즘 docker를 많이 사용하디 보니 docker를 이용해서 nodejs를 실행해 봤다.

일단 Dockerfile을 만든다


FROM node:carbon


MAINTAINER tony <chcjswo@gmail.com>


#Avoid ERROR: invoke-rc.d: policy-rc.d denied execution of start.

RUN sed -i "s/^exit 101$/exit 0/" /usr/sbin/policy-rc.d


## Install packge

RUN apt-get update && apt-get install git -y

RUN echo "git install"


RUN npm install -g pm2

ENV NODE_ENV production


RUN mkdir -p /app

WORKDIR /app


RUN git clone https://github.com/chcjswo/mocadev-nodejs.git

WORKDIR /app/mocadev-nodejs


COPY ./processes.json /app/mocadev-nodejs


## npm Install

RUN npm install

## Port

EXPOSE 3003


## Start the service

CMD ["pm2-docker", "processes.json"]


1. node image를 다운 받는다.
2. apt-get을 update하고 git을 설치한다.
3. pm2를 설치한다.
4. github에서 clone을 한다.
5. processes.json을 복사한다.
6. pm2로 실행한다.

processes.json
{
    "apps": [
        {
            "name": "mocadev-node",
            "script": "./bin/www",
            "merge_logs": true,
            "max_restarts": 20,
            "exec_mode": "cluster",
            "instances": 0,
            "max_memory_restart": "200M",
            "env": {
                "PORT": 3003,
                "NODE_ENV": "production"
            },
            "log_date_format": "YY-MM-DD HH:mm:ss",
            "error_file": "./logs/err.log",
            "out_file": "./logs/out.log"
        }
    ]
}

image를 build한다.
docker build -t chcjswo/mocadev-web:0.1 ./

-t 옵션으로 태그를 달아준다.
{docker hub id}/{이미지 이름}:{버전}
중요한건 마지막에 .을 꼭 써줘야 된다.

빌드가 끝나고 나고 docker images로 확인하면 다음과 같이 image가 생긴다.
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
chcjswo/mocadev-web   0.1                 eb30a51ab6d7        About an hour ago   746MB

생성된 image를 실행한다.
docker run -d --name mocadev-nodejs -p 3003:3003 chcjswo/mocadev-web:0.1
➜  mocadev docker ps    
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                              NAMES
9d4dd6e32fa7        chcjswo/mocadev-web:0.1   "pm2-docker processe…"   About an hour ago   Up About an hour    0.0.0.0:3003->3003/tcp                             mocadev-nodejs

➜  mocadev curl -i http://localhost:3003
HTTP/1.1 200 OK
X-DNS-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Type: text/html; charset=utf-8
Content-Length: 8518
ETag: W/"2146-3AF13RvIALis2ipr0QbuzT7xdhY"
set-cookie: connect.sid=s%3AXVjVvxoupVrkvGAEPQlSJ98MYjLimxHG.ZZqe%2F6xSLFd76JG%2BgmTUrw7IqIJoDCCS8UwPZkMVERo; Path=/; HttpOnly
Date: Mon, 11 Jun 2018 08:00:33 GMT
Connection: keep-alive

정상적으로 동작한다.

근데, 여기서 계속 실수를 했던게 습관처럼 -itd 옵션을 붙이고 마지막에 /bin/bash를 추가 했었다.
docker run -itd --name mocadev-nodejs -p 3003:3003 chcjswo/mocadev-web:0.1 /bin/bash 
그럼 Dockerfile의 CMD에 정의한 커맨드를 실행하지 않고 /bin/bash를 실행해서 노드서버가 실행되지 않는다.
이걸 몰라서 꼬박 이틀을 허비했다.
역시 아무것도 모르고 따라하기만 할려면 삽질은 너무나 당연하가 보다.

다음에는 ssh를 Dockerfile에 적용해보고 jenkins로 배포하나는 것까지 해봐야 겠다.







반응형

'docker' 카테고리의 다른 글

docker로 설치한 jenkins 업데이트 하기  (0) 2019.08.15
docker로 mysql 설치하기  (0) 2018.08.27
docker-compose 설치  (0) 2018.06.06
docker로 jenkins 설치하기  (0) 2018.06.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함