1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 3. 컨테이너 기동 방법을 이해하자>를 읽고 정리한 내용으로,

이번 문서의 주된 내용은 Dockerfile에 대한 설명, Docker Image 빌드 방법과 Docker Hub의 사용법 소개입니다.


2. Dockerfile이란

  • Dockerfile: Docker Image 생성을 위한 설정 파일로, docker build 커맨드로 Docker Image를 생성할 수 있음
  • Dockerfile의 주요 명령 (Dockerfile Reference 참고)
    • FROM: 새로운 이미지 생성의 기초가 되는 베이스 이미지를 지정하는 명령으로, Dockerfile의 명령은 FROM 또는 ARG 명령으로 시작해야 함
    • RUN: 이미지 build 시에 컨테이너에서 실행할 커맨드(패키지나 라이브러리 설치 등)를 지정하는 명령
    • CMD: 컨테이너를 신규로 생성하여 실행할 경우, 디폴트로 실행할 커맨드를 지정하는 명령으로, docker run에 실행할 커맨드가 지정되어 있다면
      CMD 명령은 무시하고 docker run에 지정된 커맨드가 실행됨
    • ENTRYPOINT: CMD 명령과 동일하게, 컨테이너를 신규로 생성할 경우, 디폴트로 실행할 커맨드를 지정하는 명령이지만,
      docker run에 지정된 커맨드가 있더라도 ENTRYPOINT의 명령이 실행됨
    • ENV: 이미지에 설정해두고 싶은 환경 변수를 정의하는 명령
    • ARG: 이미지 빌드 시에 일시적으로 사용할 환경 변수를 설정할 때 사용하는 명령으로, ENV와 달리 빌드 시에만 일시적으로 사용된다는 차이점이 있음
    • USER: 컨테이너 내에서 어떤 유저로 커맨드를 실행할지 지정하는 명령
    • WORKDIR: 작업 디렉터리를 이동하는 명령
    • ADD: 로컬 상의 파일을 이미지에 복사하는 명령
    • COPY: ADD 명령과 동일하게 로컬 상의 파일을 이미지에 복사하는 명령이나, tar 파일이나 URL 등은 지원하지 않음
    • Dockerfile 내 명령은 위에서부터 순서대로 실행되므로 순서에 유의해야 함
  • 레이어가 생성되는 시점에서 어떤 베이스 이미지를 사용할지 지정해야 함
  • Docker Image를 구성하는 레이어는 127개까지 만들 수 있음

3. Docker Image 빌드하기

$ docker build -t docker-whale

4. Docker Hub의 사용법

$ docker login 
 
$ docker tag <이미지명:태그명>
$ docker push <이미지명> 

 

  • build: 도커 이미지를 빌드하는 서브커맨드
  • -t: 이미지명, 태그명 지정하는 옵션
  • docker-whale: 지정된 빌드 컨텍스트
  • —file 옵션을 지정하여 Dockerfile을 지정할 수 있음 
  • 빌드 컨텍스트 상의 파일은 빌드 시에 Docker Daemon으로 전송되므로, 컨텍스트 상에 불필요한 파일을 놓지 않는 것을 권장
    • 빌드한 이미지를 Docker Hub에 업로드하는 것을 push라고 하며, 다운로드하는 것을 pull이라고 함
    • Docker Hub에 이미지를 push하기 위해서는 Docker Hub 계정이 필요
    • Docker Hub 메인 페이지에서 계정을 생성할 수 있음
    • 다음과 같은 과정을 통해 push할 수 있음
    • docker login 커맨드로 Docker Hub에 로그인
    • docker tag 커맨드로 이미지 레포지터리 명에 맞춘 태그를 설정

    • docker push 커맨드로 Docker Hub에 push
    • Docker Hub의 레포지터리 페이지 탭 설명
      • Repo Info: 레포지터리에 대한 설명을 관리하거나 소유자를 확인할 수 있는 페이지
      • Tags: 레포지터리에 포함된 태그 리스트를 확인할 수 있는 페이지
      • Collaborators: 공동작업자의 레포지터리에 대한 접근 권한을 관리하기 위한 페이지
      • Webhooks: 레포지터리에 대한 push가 성공되었을 경우 임의의 장소에 POST 리퀘스트를 보내는 기능을 설정하기 위한 페이지
      • Settings: 레포지터리를 Private/Public로 설정하거나 레포지터리를 삭제하기 위한 페이지