본문 바로가기
Random

[Docker] Image 생성후 container 실행하기

by SeanK 2022. 2. 10.

 

이번 프로젝트에서는 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...]