이 부분은 예전 포스팅에서 설명한 내용지만 다시 적어보았다.
$ 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
주소로 접속했던 로그가 남아있다. 새로고침 하면 로그가 계속 찍히는 것을 알 수 있다.