반응형

파일에 명령어를 작성하고 컴파일러를 통해 명령어를 실행한 후 이진 파일이나 다른 파일을 출력하는 일련의 과정이 개발자에게는 친숙합니다. Docker에서도 비슷한 프로세스를 통해 이미지를 만들고 컨테이너를 만들 수 있습니다. Dockerfile(도커파일)이 그것을 가능하게 해 줍니다. 도커 파일에 대해 알아보도록 하겠습니다.


DockerFile 과 이미지

dockerfile은 명령이 있는 텍스트 파일에 지나지 않습니다. 물론 이 명령어들은 Docker만의 고유한 것으로 Docker 문서에 정의되어 있습니다. 자바나 C#과 같은 언어로 파일에 명령어와 파일을 작성하는 것과 매우 유사한 프로세스입니다. 그런 다음 개발자는 컴파일러를 통해 실행하게 되는데요. Docker에서도 마찬가지로 Docker 클라이언트를 통해 이러한 파일을 실행할 수 있고 빌드 명령을 할 수 있습니다.

build를 통해 dockerFile에 기술된대로 레이어 된 파일 시스템을 생성한 다음 Docker 이미지를 사용하여 컨테이너를 만 수 있습니다.

 

Dockerfile 개요

  1. 도커 이미지를 만드는데 사용되는 텍스트 파일입니다. 보통 파일 이름을 Dockerfile이라고 불리며 심지어 확장자조차 없이 만드는 경우가 많습니다. 하지만 원하는 대로 파일명을 만들 수 있습니다.
  2. 빌드 명령어가 포함되어 있습니다. 이 빌드 명령어는 환경 변수를 사용하거나 소스코드를 이미지에 복사하는 등의 작업을 수행합니다.
  3. 명령어는 중간 이미지를 만듭니다. 그리고 이러한 이미지는 일종의 캐시 되는 이미지들입니다. 만약 명령어를 바꾼다면 이미지를 다시 빌드해야 되는데, 중간에 캐시 된 이미지를 사용해서 처음부터 모든 것을 빌드하지 않아도 되게 합니다. 캐시를 하지 않는 방법도 있지만 빌드 프로세스에 조금 더 시간이 걸릴 수 있습니다.
  4. "docker build" 커맨드로 사용합니다.

 

Dockerfile 명령어

1. FROM

다른 이미지에서 이미지를 만들고 싶을때 "FROM"을 사용합니다. 아무것도 없는 상태에서 처음부터 만들 수 있지만 일반적으로 Node.js이미지, MongoDB 이미지 또는 Postgre를 기반으로 만듭니다. 이러한 이미지를 기준으로 삼은 다음 계층화된 파일 시스템을 사용하여 그 위에 구축하게 됩니다.

 

2. LABEL

"LABEL" 명령어를 사용해서 누가 그것을 관리하는지 정의할 수 있습니다. 예를 들어 "maintainer/author"와 같이 자신을 이름을 적을 수 있습니다.

 

3. RUN

실행할 여러 가지를 정의할 수 있기때문에 "RUN"명령어는 매우 중요합니다. 인터넷에 접속하여 무언가를 가져오거나, npm install, dnu restore를 실행하고 싶다면, "RUN" 명령어를 사용해서 실행할 수 있습니다.

 

4. COPY

"COPY" 명령어 역시 중요한 명령어 입니다. 프로덕션으로 이동할 때는 소스코드를 컨테이너에 복사하는 경우가 많습니다. "COPY"를 사용하면 컨테이너에 소스코드를 복사할 수 있습니다.

 

5. ENTRYPOINT

컨테이너의 기본 진입점을 설정할 때 사용합니다.

 

6. WORKDIR

작업 디렉토리가 무엇인지 정의할 때 사용합니다. 컨테이너가 실행될 위치에 대한 컨텍스트를 설정합니다. 그렇게 하므로 package.json이 있는 폴더에서 npm을 실행할 수 있습니다.

 

7. EXPOSE

포트를 노출할 수 있습니다. 이렇게 설정한 포트가 컨테이너가 내부적으로 실행되는 기본 포트가 됩니다.

 

8. ENV

환경 변수를 적용하게 합니다.

 

9. VOLUME

볼륨을 정의하고 컨테이너의 호스트 시스템에 볼륨을 저장하는 방법을 제어 할 수 있습니다.


Dockerfile 파일 작성 예시

이제 Dockerfile의 실제 모습을 살펴보겠습니다.

FROM        node
LABEL       author="fronquery"
COPY        . /var/www
WORKDIR     /var/www
RUN         npm install
EXPOSE      8080
ENTRYPOINT ["node", "server.js"]

 

1. 맨위에 FROM이 적혀있습니다. FROM은 항상 Docker 파일의 맨 위에 놓을 첫 번째 명령이 될 것입니다. node에서 이미지를 구축하고 있습니다. 그러면 노드가 기본 파일 시스템으로 인식되고 그 위에 추가 계층이 추가됩니다.

2. LABEL에 작성자 자신을 넣을 수 있고, 이메일을 넣을 수 있습니다.

3. COPY를 사용해 현재 빌드 중인 폴더에서 소스 코드를 복사할 수 있습니다. 이 경우 도커에게 이미지를 빌드할 때 해당 소스 코드를 var/www 폴더에 복사하라고 말합니다. 물론 제가 만든 것입니다. 이제 이 계층화된 파일 시스템은 소스 코드만을 위한 레이어를 가지게 될 것입니다. 이 레이어는 복사 명령이나 명령어가 될 것입니다.

4. 그런 다음 WORKDIR 명령어를 통해 var/www를 작업 디렉토리로 설정하였습니다.

5. RUN을 통해 노드인 경우 npm install과 같은 몇 가지 명령을 실행하고 있습니다.

6. EXPOSE로 컨테이너가 실제로 실행될 포트를 정의하였습니다.

7. ENTRYPOINT로 진입점을 정의하였습니다. 이 경우 node 명령과 server.js가 이 작업에 대한 초기 엔트리 포인트이지만, 물론 선택한 기술에 대해 원하는 것이 무엇이든 될 수 있습니다.


이번에 다룬 명령어 이외에 수 많은 명령어들이 있습니다. 하지만 지금은 개발자들의 관점에서 Docker 기초에 초점을 맞추어 다뤄보았습니다. 다음 글에서 더 자세히 Node.js 도커 파일에 대해 다뤄보겠습니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기