도커 이미지 만들기

David kim·2022년 1월 9일
1

도커

목록 보기
4/8
post-thumbnail
post-custom-banner

도커 파일(Dockerfile)

Dockerfile 이란?

도커 파일이란 도커 이미지를 만들기 위한 설정 파일이다. 도커 컨테이너가 어떻게 행동해야 하는지에 대한 설정이 정의되어있는 곳이다. 도커 파일을 통해 도커 이미지가 만들어지므로 도커 이미지에 필요한 것들이 정의되있다.

도커 이미지는 2가지 요소로 구성되어있다.

  1. 컨테이너 시작 시 실행 명령어.
  2. 파일 스냅샷 (디렉토리/파일 등의 복사본)

도커 파일은 위 2가지 요소를 구성할 명령어들로 명시되어 있다.

도커 이미지의 구성

도커 파일은 도커 이미지의 2가지 요소를 고려해 작성한다.

  1. 베이스 이미지를 명시한다 (파일 스냅샷)
  2. 어플리케이션을 실행하는데 필요한 파일들을 다운받는 명령어를 명시한다. (파일 스냅샷)
  3. 컨테이너 시작 시에 실행할 명령어를 명시한다.

베이스 이미지란 생성하고자 하는 이미지의 기초가 되는 이미지를 뜻한다.

베이스 이미지는 도커 허브의 Official Image를 사용하거나 이를 수정한 이미지를 사용하거나 혹은 직접 만든 이미지를 사용한다. 예를 든다면 redis를 동작시키는 Image를 만든다고 한다면 Ubuntu나 alpine 같은 OS를 베이스 이미지로 사용할 수 있다. 그리고 그 베이스 이미지 위에 중간 단계의 이미지를 쌓는다. 이 중간 단계의 이미지를 레이어라고 부르고 쌓은 행동을 레이어 캐싱이라고 부른다.

Dockerfile 작성하기

Dockerfile을 작성하는 기본적인 순서를 나타내보자.

  1. 작업을 진행할 디렉토리를 생성한다.
  2. 디렉토리 안에 Dockerfile 이라는 이름의 파일을 생성한다.
  3. Dockerfile을 작성한다.

    # 베이스 이미지 명시
    FROM baseImage

    # 추가로 필요한 파일 내려받기
    RUN command

    # 컨테이너 시작 시 실행할 명령어를 명시
    CMD ["executable"]

FROM, RUN, CMD 등은 도커 서버에게 컨테이너를 만들기 위해 필요한 요소들을 알려준다.

FROM
  • 베이스 이미지를 명시한다.
  • <이미지 이름> : <태그> 형식으로 작성한다.
  • 태그가 명시되어있지 않다면 가장 최신 버전을 다운로드한다.
  • ex) ubuntu:14.04
RUN
  • 도커 이미지가 생성되기 전에 수행할 셀 명령어를 명시한다.
  • 추가로 필요한 파일을 내려받는 단계이다.
CMD
  • 컨테이너가 시작됐을 때 실행할 실행 파일 또는 셸 스크립트를 명시한다.
  • CMD는 Dockerfile 내에서 한 번만 쓸 수 있다.

연습

alpine OS를 이용한 hello world 출력 이미지

alpine OS를 베이스 이미지로 명시하고 컨테이너를 실행시키면 "hello world"를 반환하는 도커 이미지를 만들어 보자. 우선 연습할 디렉토리를 생성한다. 그리고 그 디렉토리 안으로 들어가서 Dockerfile을 만든다. Dockerfile에 베이스 이미지와 "hello world"를 반환하는 명령어를 명시한다.

해당 디렉토리 안에서 docker build . 을 입력해주면 Dockerfile로 부터 이미지가 생성된다.

sha256 옆에 나열된 난수들이 도커 이미지의 ID다. 즉, 94ae80a6c02f029fc83082701db78511d69c60d3dca1e93802716cb029917244 가 도커 이미지의 ID가 된다. 도커 이미지가 생성 되었는지 docker images 명령어를 통해서 확인해보자.

이미지의 이름을 지정해 주지않아서 <none> 으로 보인다. 이미지의 ID 를 통해서 방금 생성한 이미지를 확인 할 수 있다. 그럼 이번에는 생성된 이미지를 통해 컨테이터를 생성하고 실행시켜보자.

도커 이미지를 run 하니 hello world 가 출력된다. 하지만 컨테이너는 보이지 않는다. 그 이유는 도커 컨테이너가 생성되고 hello world 를 출력한 후 바로 종료되기 때문이다.

docker ps -a 명령어를 통새서 생성된 컨테이너를 확인할 수 있다.

도커 이미지 이름과 태그 설정하기

위 연습을 통해 도커 이미지를 생성했다. 이때 이미지의 이름과 태그를 설정하지 않아 <none> 으로 표기되었다. 이번에는 이름과 태그를 설정해서 이미지를 생성해보자.

docker build . -t <이미지이름:태그>

보통은 이미지 이름에 생성자의 도커 아이디를 / 로 구분하여 넣어준다. 사진에서 이미지 이름은 kdeayoub/hello_world 이고 태그는 alpine 으로 설정했다.

docker images 명령어를 통해서 이미지 이름과 태그가 잘 설정되었는지 확인해보자.

참고
[1] 따라하며 배우는 도커와 CI환경
[2] docker base image
[3] docker build
profile
데이터 엔지니어
post-custom-banner

0개의 댓글