티스토리 뷰
요즘 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
링크
TAG
- 구글캘린더공유
- namecheap
- git
- visutal studio
- scp
- Linux
- MySQL
- 쉘스크립트
- 공백문자
- vs community
- docker-compose
- Docker
- Notion
- vim
- 오프라인설치
- aws
- 노션
- Mac
- 트래비스 슬랙 연동
- 트래비스 암호화
- 쉘프로그래밍
- Bash
- material dark
- Heroku
- Jenkins
- test 연산자
- java
- Slack
- nodejs
- SSH
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함