
이 부분은 예전 포스팅에서 설명한 내용지만 다시 적어보았다.
$ sudo apt-get install nginx
$ sudo service nginx start
NGINX를 설치하고 실행시킨다.$ sudo rm /etc/nginx/sites-available/default
$ sudo vim /etc/nginx/sites-available/default
/etc/nginx/sites-available/default파일을 열고 아래의 내용을 입력해준다. # /etc/nginx/sites-available/default
server {
listen 80 default_server;
server_name _;
# node api reverse proxy
location / {
proxy_pass http://127.0.0.1:3000/;
}
}
$ sudo systemctl restart nginx

public DNS주소를 치면 위와 같은 화면이 나올것이다.위와 같은 화면이 나오지 않는다면 인스턴스의 보안그룹에서 80번포트가 허용되어있는지 확인하자.
nodejs, npm, express-generator 설치는 생략.

express nodejs-app
cd nodejs-app
npm install
npm start

public DNS주소를 치면 위와 같은 화면이 나올것이다.NGINX 설정으로 포트포워딩을 해놓았기 때문에 80번으로 들어오는 요청이 3000번 포트로 향하게 해놓았기때문이다.다음으로 방금만든 nodejs-app을 포함하는 Docker image 를 빌드 하는 과정이다. Dockerfile 을 이용한 이미지 빌드에 앞서 이미지에 포함시키지 않을 내용을 제외해 주자. .dockerignor파일을 생성,작성하여 할 수 있다.
작업은 프로젝트의 루트디렉토리(예시의 nodejs-app) 에서 진행한다.
.gitignore와 같은 역할을 한다.$vim node_modules/
node_modules/
node_modules/ 디렉터리의 파일들이 도커 파일에 포함되지 않도록 한다.Dockerfile 작성도 마찬가지로 프로젝트의 루트디렉토리에서 진행한다.
vim Dockerfile
FROM node:12
LABEL Hyunseok CHOI hschoi1104@gmail.com
RUN mkdir -p /app
WORKDIR /app
ADD . /app
RUN npm install
ENV NODE_ENV development
EXPOSE 3000
CMD ["npm", "start"]
Dockerfile에 전용 도메인 언어로 내용을 작성한다. 위 내용 중 FORM LABEL과 같은 키워드들을 인스트럭션 이라고 한다.사용된 인스트럭션들을 하나씩 살펴보자.
FROM node:12
- 베이스 이미지를 정의한다. 이 예시에서는
node.js 12버전을 베이스 이미지로 사용한다.
LABEL Hyunseok CHOI hschoi1104@gmail.com
- 이미지를 만든 사람의 정보를 입력한다.
Maintainer라는 인스트럭션과 같은 역할이지만 더 이상 사용되지 않는다고 한다.(deprecated)
RUN mkdir -p /app
- 패키지 설치나 shell command 등의 작업을 docker image에 실행시킬 때 사용한다.
- 여기서는
/app폴더를 docker image 내부에 생성한다.
WORKDIR /app
- working directory를 지정한다.
ADD . /app
- 파일이나 디렉토리를 호스트 에서 docker image 내부로 목사한다.
RUN npm install
npm install명령을 도커 내부에서 실행시킨다.
ENV NODE_ENV development
- 환경변수를 설정한다.
EXPOSE 3000
Docker container외부에 노출할 포트를 지정할 때 사용한다.- 예제에서의 프로젝트는 3000번을 사용하므로 3000번을 열어준다.
CMD ["npm", "start"]
docker container가 시작될때 명령을 지정한다.CMD는 컨테이너가 시작될때 명령을 수행하고RUN은 이미지를 빌드할때 수행하는 명령이다.

$ docker build -t hschoi1104/nodejs-app:first .
docker build -t 사용자명/이미지명[:태그명] dockerfile경로 형식이다.
빌드중...

빌드완료
docker images 명령을 통해 빌드된 이미지를 확인할 수 있다.
$ docker run -d -p 3000:3000 hschoi1104/nodejs-app:first
$ docker ps
docker run -d -p {포워딩포트}:{이미지포트} 사용자명/이미지명:태그명 형태이다.
public DNS주소를 치면 위와 같은 화면이 나올것이다.
public DNS주소로 접속했던 로그가 남아있다. 새로고침 하면 로그가 계속 찍히는 것을 알 수 있다.