이번 프로젝트에서는 Docker를 적극적으로 활용하고자 하는데
역시 Dockerfile을 생성하는 것부터가 쉽지가 않다.
Dockerfile 생성
필자의 경우 이것저것 시도해보다가 결국 인터넷에 나와있는 그대로 복붙을 해서 사용을 했다.
FROM node:12-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --silent
COPY . .
CMD [ "npm", "start" ]
EXPOSE 4000
설명을 덧붙이자면
FROM은 사용하는 기본 이미지를 의미한다. 이번 프로젝트의 경우 서버를 nodeJS로 구축하기 때문에 node:12-apline 버전을 적어 넣었다.
그리고 RUN은 앱을 실행하기전 실행해야 할 명령어를 적어놓는 부분이다. 위 코드를 보면 필요한 dependency를 npm install로 다운로드하는 것을 확인할 수 있다.
그리고 CMD는 최종적으로 실행할 앱 실행 명령어다. 필자의 경우 앱 실행 명령어가 npm start이므로 위와같이 설정하였다.
Expose는 컨테이너에서 어떤 포트를 열어놓을 것인가를 설정한다.
.dockerignore 생성
gitignore파일과 같이 docker도 ignore 할 대상을 기록할 수 있다.
필자의 경우 아직 별다른 파일이 없는 관계로 아래와 같이 설정했다.
사용법은 gitignore와 동일하다.
node_modules
image 생성
자 이제 image를 만들어 보자.
아래의 명령어를 실행하면 image가 만들어진다.
sudo docker build . -t 이미지명
container 실행하기
여기서 조금 헤메었는데 아래와 같이 명령어를 실행하면 image를 읽어 들여 container를 실행한다.
sudo docker run -d -p 8000:8000 이미지명
여기서 -p는 publish를 의미하며 로컬환경이 컨테이너의 어떤 포트와 연결되는지를 설정한다.
로컬 환경 포트 : 컨테이너 포트
이렇게 이해하면 된다.
문제는 -d인데 dispatch의 뜻으로 백그라운드 실행을 의미한다. 따라서 -d로 컨테이너를 실행했다면 별도로 아래 명령어를 사용해 컨테이너를 종료시켜줘야 한다.
sudo docker stop [OPTIONS] CONTAINER [CONTAINER...]
'Random' 카테고리의 다른 글
[AWS] https 배포하기 (0) | 2022.02.12 |
---|---|
[Docker] Image를 Docker hub에 등록하기 (0) | 2022.02.11 |
[Docker] 우분투/Linux Mint Docker 설치 에러 (0) | 2022.01.31 |
드디어 모든 섹션이 끝났다! Section3 회고 (SEB 35) (0) | 2022.01.17 |
[AWS] s3와 RDS의 차이점 (0) | 2022.01.06 |