3 분 소요

📌 Topic

  • 도커 이미지 생성 순서
  • Dockerfile 만들기
  • Dockerfile로 Docker image 만들기
  • 내가 만든 이미지 기억하기 쉬운 이름 추가

01. 도커 이미지 생성 순서

docker_hub.PNG

우리는 지금까지 도커 허브(Docker Hub)에 존재하는 이미지를 사용해 실습을 진행 하였다.
이번 시간에는 도커 이미지를 직접 만들어보는 시간을 가져보자.

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

docker_hub_redis_image.PNG

참고 : 도커 이미지를 만드는 것과, 허브에 올리는 것은 다른 내용임

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

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

02. Dockerfile 만들기

위에서는 간단한 플로우를 확인 하였고, 지금부터 Dockerfile을 생성 해보자.

02-1. Dockerfile을 만드는 순서

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

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

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

02-3. Dockerfile 예시

아래 내용은 Dockerfile 예시입니다.

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

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

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

02-4. Hello를 출력하기 위한 Dockerfile 작성

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

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

# 추가적으로 필요한 파일들을 다운로드
# RUN command # 현재 RUN 커멘드는 따로 사용 안함

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

03. Dockerfile로 Docker Image 만들기

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

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

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

$ 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

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

03-2. 이미지 생성 과정

temp_container.PNG

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

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

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

현재 Dockerfile로 우리가 만든 이미지는 이름을 가지고 있지 않다.
즉, 이미지의 ID만 가지고 있을 뿐 이름은 으로 설정이 되어 있는 상황.

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

dockerfile_이름_생성.PNG

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

참고 자료

댓글남기기