Docker 이미지 직접 만들어보기

2022. 7. 9. 18:36☁️ Cloud

주로 도커 허브에 저장된 도커 이미지를 가져와 사용하는데 개발자가 직접 도커 이미지를 만들 수도 있고, 생성한 이미지를 도커 허브에 올려 공유할 수도 있다.

 

우선 도커 이미지가 무엇인지 다시 짚어보자. 

도커 이미지 : 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고 있는 소프트웨어 패키지. 

 

 

그럼 첫번째 단계인 Docker File 을 작성해보자. 

 

1 단계. Docker File 작성

도커 이미지를 만들기 위한 설정 파일로, 컨테이너가 어떻게 행동해야 하는지 설정을 정의한다.

 

도커 파일 만드는 순서

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

베이스 이미지란?

도커 이미지는 여러 개의 이미지 레이어로 이루어지는데, 베이스 이미지는 모든 이미지의 기반이 되는 부분을 의미한다.

주로 OS 가 베이스 이미지에 해당된다 (window, MacOs, Linux, CentOs, etc)

 

Docker File 작성 예시

# baseImage 를 명시해준다. <이미지 이름> : <tag> -> 태그를 안붙이면 가장 최신것을 다운 받음.
FROM baseImage

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

# Container 시작 시 실행 될 명령어를 명시해준다.
CMD ["executable"]

 

실제로 만들어 보기

우선 dockerfile-folder 라는 폴더 생성 후 해당 디렉토리에 Dockerfile 파일을 생성했다. DockerFile, dockerFile <- 이런식으로 파일명을 지정하면 에러가 발생하니, 꼭 Dockerfile 로 파일명을 지정해주자. 

FROM alpine
CMD ["echo", "hello"]

 

FROM : 이미지 생성 시 기반이 되는 이미지 레이어로, <이미지 이름> : <태그> 형식으로 작성한다.
RUN : 도커 이미지가 생성되기 전에 수행할 shell 명령어에 해당
CMD : 컨테이너가 시작됐을 때, 실행할 파일 / shell 스크립트에 해당. 해당 명령어는 DockerFile 내 1회만 사용할 수 있다.

 

2 단계. 작성한 Dockerfile 을 도커 클라이언트에 전달, 도커 서버에 등록

작성한 Dockerfile 을 도커 클라이언트에 전달하고 도커 서버가 인식하게 해야한다.

docker buid ./ 명령어를 사용해 해당 디렉토리에 존재하는 Dockerfile 을 도커 클라이언트로 전달할 수 있다.

 

build 과정

  1. FROM alpine 으로 설정을 했으니, alpine 의 이미지를 가져온다. 
  2. 임시 컨테이너 생성 후 해당 컨테이너가 시작될 때 사용할 명령어를 포함시킨다. 그 후 방금 생성한 임시 컨테이너를 지우고 새로운 이미지를 생성한다. 

도커 빌드 시 이름을 지정하지 않으면, 해당 이미지를 실행시킬 때 마다 이미지의 id 를 입력해야하는 번거로움이 존재한다. 

이럴 경우 처음 빌드 시 이름을 지정해주면, 이미지를 실행할 때 편리하다. 

docker build -t hoo/hello:latest .

// -t 도커 아이디 / 저장소(프로젝트 이름) : 버전

 

간단하게 hello 를 출력하는 도커 이미지를 직접 생성해보았다. 앞으로 직접 도커 이미지를 만들어 볼 일이 얼마나 될까 싶지만, 위의 방법을 토대로 도커 이미지를 생성하고 도커 허브에 저장도 할 수 있다는 것을 기억하자 👍🏻