들어가며

지난 글에서는 도커의 아키텍처에 대해서 알아보았다. 이번에는 도커의 샘플 애플리케이션을 실행시키면서 도커의 이미지 생성 방식을 알아보도록 하겠다.

애플리케이션 준비

https://docs.docker.com/get-started/02_our_app/, 데모 어플리케이션

도커에 동작시키기 위한 데모 애플리케이션을 확보해보자. nodejs로 동작하는 간단한 데모 애플리케이션을 docker getting-started github 저장소에서 다운로드할 수 있다. 

클론 된 getting-started에는 파일과 디렉터리가 있지만 우리가 원하는 nodejs 데모 애플리케이션은 getting-started/app 디렉토리 안에 있다.

https://docs.docker.com/get-started/02_our_app/

여기서 터미널을 열어 node src/index.js를 실행시킨다면 맨 처음 우리가 실행시킬 데모 애플리케이션을 실행시킬 수 있다. 하지만 지금 할 건 도커 이미지를 만든 다음 내부에 애플리케이션을 시작시키는 것이기 때문에 조금 참아보자.

도커 이미지 빌드

도커 이미지를 만들기 위해서는 이미지 빌드 명령어의 집합체인 Dockerfile이 필요하다. Dockerfile을 새로 만들어보자. 주의할 것은 해당 파일은 확장자명이 없다. 어떤 코드 에디터는 자동으로 .txt를 붙이거나 하는데 이럴 경우 에러가 발생하기 때문에 주의하도록 하자.

 

app 디렉토리 내부에 Dockerfile을 만든 다음 아래의 코드를 삽입한다. 주석은 생략해도 된다.

FROM node:12-alpine
# FROM은 베이스로 사용할 docker image를 의미한다.
# 이 이미지 위에 새로운 명령어나 패키지를 덧씌워 커스텀 이미지를 만들 수 있다.
# 지금은 node application을 위해서 node:12-alpine이미지를 베이스로 한다.
WORKDIR /app
# WORKDIR은 기본적인 작업공간을 의미한다. 
COPY . .
# COPY는 이미지에 파일을 추가하는것 을 의미한다.
# COPY <복사할 파일 경로> <이미지에서 파일이 위치할 경로>
# . . 으로 실행하면 dockerfile이 위치하는 컨텍스트의 파일들이 WORKDIR로 복사된다.

RUN yarn install --production
# RUN은 이미지를 빌드할 때 사용할 명령어를 설정할 수 있다.
CMD ["node","src/index.js"]
# CMD는 이미지를 빌드할 때가 아닌 컨테이너가 실행될 때 사용할 명령어를 정의할 수 있다.

추가적인 Dockerfile 명령어가 알고 싶다면 https://docs.docker.com/engine/reference/builder/#shell를 참고하자

이제 기본적인 준비가 끝났다. docker build를 사용해서 이미지를 만들어보자

 docker build -t getting-started .

-t는 따라오는 인자를 이미지의 태그로 정하겠다는 뜻이며, 마지막. 은 현재 디렉터리의 Dockerfile을 참조해서 빌드하겠다는 뜻이다.

빌드를 할 경우 Dockerfile에 명시해 둔 명령들이 차례로 실행하는 것 을 볼 수 있다.

이후 docker images를 실행하여 만든 이미지가 추가된 모습을 볼 수 있다.

그럼 바로 이미지를 컨테이너로 띄어보자.

컨테이너 실행

docker run -dp 3000:3000 getting-started

위 명령어를 해석해보자.

run은 말 그대로 컨테이너를 실행시킨다는 의미이다.

option으로 d와 p가 있다. d는 detach의 약자이며 실행한 컨테이너를 백그라운드에서 사용하도록 한다는 의미이다. p는 port의 약자로 3000:3000인자를 읽어 컨테이너의 3000번 포트와 Host OS의 3000번 포트를 매핑 하 준다는 의미이다. 만약 이를 해주지 않으면 컨테이너 애플리케이션에 접근할 수 없다.

 

위 명령어를 실행한뒤 로컬 컴퓨터에서 http://localhost:3000으로 접속하게 된다면 데모 애플리케이션에 접속할 수 있다. 도커 대시보드를 통해 해당 컨테이너에 접근해서 현재 프로세스를 실행시키면 Dockerfile에 정한 명령어가 잘 실행된 것을 볼 수 있다.

Reference

1. docs.docker.com/get-started/02_our_app/
2. docs.docker.com/engine/reference/builder/#shell

'Docker' 카테고리의 다른 글

[Docker] - Docker Architecture(도커의 구조)  (0) 2021.02.14
[Docker] - Docker란 무엇인가?  (0) 2021.02.14

+ Recent posts