Lined Notebook

[Docker] 05. 직접 도커 이미지 만들기

by ymkim

01. 도커 이미지 생성 순서

우리는 지금까지 도커 허브(Docker Hub)에 존재하는 이미지를 사용해 실습을 진행 하였다.

이번 시간에는 도커 이미지를 직접 만들어보는 시간을 가져보자.

01-1. 도커 이미지 생성하는 순서

위 사진은 Docker Hub에 존재하는 Redis 이미지의 사진이다. 위와 같은 이미지를 만들기위한 순서는 다음과 같다.

  • Docker File 작성
    • Docker image를 만들기 위한 설정 파일
    • 컨테이너가 어떻게 행동해야 하는지에 대한 정의
  • 도커 클라이언트
    • 도커 파일에 입력된 것들이 도커 클라이언트에게 전달 되어야함
  • 도커 서버
    • 전달된 모든 것들의 작업을 수행하는 영역
  • 이미지 생성

02. Dockerfile 만들기

도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행도해야 하는지에 대한 정의

02-1. Dockerfile을 만드는 순서

  1. 베이스 이미지 명시 (파일 스냅샷에 해당)
  2. 추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어 명시 (파일 스냅샷에 해당)
  3. 컨테이너 시작시 실행 될 명령어를 명시 (시작 시 실행 될 명령어에 해당)

02-2. 베이스 이미지란?

  • 도커 이미지는 여러개의 레이어로 구성이 되어있다
  • 베이스 이미지(Base Image)는 레이어의 근간이 되는 부분이다
    • 간단하게는 OS라고 생각하면 된다
    • Window, MacOS, Linux 등등

02-3. Dockerfile

# 베이스 이미지를 명시
FROM baseImage

# 추가적으로 필요한 파일들을 다운로드
RUN command

# 컨테이너 시작 시 실행 될 명령어 명시
CMD ["executable"]
  • FROM
    • 이미지 생성시 기반이 되는 이미지 레이어
    • <이미지 이름>:<태그> 형식으로 작성
    • 태그를 안 붙힐 경우 가장 최신(Latest) 버전 다운
  • RUN
    • 추가적으로 필요한 파일 다운로드
    • 도커 이미지가 생성되기 전 수행할 쉘 명령어
  • CMD
    • 컨테이너가 시작되었을 때 실행할 실행 파일 또는 쉘 스크립트
    • Dockerfile 내에서 1회만 사용 가능

02-4. Dockerfile 작성

현재 Hello World라는 문구를 출력하는 이미지를 생성할 것이다. 베이스 이미지(Base Image)의 경우 CentOS, Ubuntu와 같은 OS를 사용하지 않고 진행.

# 베이스 이미지를 명시
FROM alpine

# 추가적으로 필요한 파일들을 다운로드
RUN command

# 컨테이너 시작 시 실행 될 명령어 명시
CMD ["echo", "hello"]
  • 간단하게 Dockerfile 완성
  • 이제 해당 이미지를 만드는 과정을 진행 해보자

03. Dockerfile로 Docker Image 만들기

위에서 Dockerfile을 생성하여 이미지로 만들 준비는 완료 하였다. 이제 Dockerfile을 이용하여 이미지를 생성하는 부분을 진행 해보자.

03-1. Dockerfile 이미지로 만들기

우선 Dockerfile에 입력된 설정들이 도커 클라이언트에 전달 되어서 도커 서버가 인식할 수 있도록 만들어야 하기에 아래와 같은 명령어를 수행 한다.

Window 환경인 경우 아래 설정을 진행해야 오류가 발생하지 않는다. 도커 Desktop 클릭 > Docker Engine > buildkit : true → false로 변경

$ docker build ./
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM alpine
 ---> e66264b98777
Step 2/2 : CMD ["echo", "hello"]
 ---> Running in be94421cb0b6
Removing intermediate container be94421cb0b6
 ---> 0407123408a0
Successfully built 0407123408a0
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

03-2. 이미지 생성 과정

  • FROM alpine 절에 의해 alpine 이미지를 가져온다
    • 시작 시 실행될 명령어
    • 파일 스냅샷 (etc, dev, bin)
  • 임시 컨테이너 생성
    • HDD에 파일 시스템 스냅샷 추가
      • etc, dev, bin..
  • CMD [”echo”, “hello”] 부분을 임시 컨테이너에 넣어준다
    • 위치는 시작 시 실행될 명령어에 추가
  • 임시 컨테이너로 이미지를 만들고 해당 임시 컨테이너를 삭제

04. 내가 만든 이미지 기억하기 쉬운 이름 추가

이번에는 해당 이미지의 이름을 주는 방법을 알아보자.

현재 Dockerfile로 우리가 만든 이미지는 이름을 가지고 있지 않다.

즉, 이미지의 ID만 가지고 있을 뿐 이름은 <none>으로 설정이 되어 있는 상황.

$ docker build -t youngmin1085/hello:latest ./

  • 위와 같이 이름이 있는 이미지가 생성 됨

참고 자료

블로그의 정보

기록하고, 복기하고

ymkim

활동하기