도커 이미지
컨테이너를 만들기 위해 필요한 설정이나 종속성들을 가지고 있는 소프트웨어 패키지입니다.
도커 이미지는 Dockerhub에 다른 사람들이 만들어 놓은것을 사용할 수 있으며,
직접 도커 이미지를 만들어서 사용하는 것도 가능합니다.
또한 직접 만든 이미지를 Dockerhub에 올려서 다른 사람들과 공유하는 것도 가능합니다.
도커 이미지는 어떻게 생성하나요? 🧐
도커 컨테이너는 도커 이미지로 생성했습니다.
도커 이미지는 어떻게 생성할 수 있을까요?
도커 이미지의 생성 흐름은 다음과 같습니다.
Dockerfile 작성 $\to$ 도커 클라이언트 $\to$ 도커 서버 $\to$ 도커 이미지 생성
- Docker File : Docker Image를 만들기 위한 설정 파일입니다. 도커 컨테이너의 행동에 대한 설정들을 정의합니다.
- 도커 클라이언트 : 도커 파일에 입력된 정보들이 도커 클라이언트에 전달됩니다.
- 도커 서버 : 도커 클라이언트에 전달된 작업들이 진행되는 곳입니다.
도커 파일 만드는 순서
도커 이미지는 파일 스냅샷과 시작시 실행 될 명령어를 포함합니다.
- 베이스 이미지를 명시해줍니다. (파일 스냅샷에 해당)
- 추가적으로 필요한 파일을 다운 받기 위한 명령어를 명시합니다. (파일 스냅샷에 해당)
- 컨테이너 시작 시 실행 될 명령어를 명시합니다. (시작시 실행 될 명령어에 해당.)
베이스 이미지
도커 이미지는 여러개의 레이어(Layer)로 구성되어 있습니다.
베이스 이미지는 해당 이미지의 기반이 되는 레이어입니다.
간략하게는 운영체제(OS)와 실행할 어플리케이션을 위한 기본 환경이라 생각할 수 있습니다.
예를 들어 다음 베이스 이미지는 amd64를 사용하며, openjdk 17버전이 설치된 이미지라는 뜻입니다.
amd64/openjdk:17-jdk
도커 이미지 만들기
간단하게 'hello' 를 출력하는 도커 이미지를 만들어 보겠습니다.
1. 도커 파일 만들기
바탕화면에 도커 파일을 생성할 폴더를 하나 만들어줍니다.
이후 원하시는 에디터(VS Code, InterlliJ 등)를 통해 해당 폴더에 들어가 새로운 파일 하나를 만들어줍니다.
이름은 Dockerfile로 해주셔야 합니다.
DockerFile의 기본 형식은 다음과 같습니다.
# 베이스 이미지 명시
FROM 베이스이미지
# 추가적으로 필요한 파일들을 다운로드 받는 명령어 명시
RUN command
# 컨테이너 시작 시 실행 될 명령어 명시
CMD [ "명령어" ]
- FROM : 이미지 생성 시 기반이 되는 이미지 레이어입니다.
- <이미지 이름>:<태그> 형식으로 작성됩니다.
- 태그가 없는 경우 가장 최신 이미지로 다운받습니다.
- 예시 : ubuntu:14.04
- RUN : 도커 이미지가 생성되기 전에 수행할 쉘 명령어입니다. 보통 추가적으로 필요한 파일들을 다운받기 위해 작성합니다.
- CMD : 컨테이너가 실행되었을 때 실행할 실행 파일 또는 쉘 스크립트입니다.
- 해당 명령어는 DockerFile 내 1회만 쓸 수 있습니다.
이제 'hello' 를 출력하는 DockerFile을 작성해 보겠습니다.
# 베이스 이미지 명시
FROM alpine
# 추가적으로 필요한 파일들을 다운로드 받는다
#RUN 필요없음
# 컨테이너 시작 시 실행 될 명령어를 명시해준다.
CMD ["echo", "hello"]
2. 도커 파일로 도커 이미지 만들기
DockerFile에 입력된 정보들이 도커 클라이언트에 전달되어, 도커 서버가 인식할 수 있도록 하여야 합니다.
이를 위한 명령어 : docker build ./ 또는 docker build .
Build 명령어
해당 디렉토리 내에서 Dockerfile 이라는 파일을 찾아서 도커 클라이언트에게 전달해줍니다.
docker build 뒤에 ./ 와 . 는 모두 현재 디렉토리를 가리킵니다.
terminal을 열어서 DockerFIle이 위치한 폴더로 이동합니다.
docker build ./ 를 입력합니다.
Build 과정
Build 과정을 자세히 살펴보기 위해 다음 명령어를 통해 다시 빌드하도록 하겠습니다.
DOCKER_BUILDKIT=0 docker build ./
build 과정은 다음과 같습니다.
베이스 이미지에서 다른 종속성이나 새로운 커맨드를 추가하는 경우,
도커는 임시 컨테이너를 만든 후 그 컨테이너를 토대로 새로운 이미지를 만듭니다.
이후 해당 임시 컨테이너는 삭제합니다.
3. 도커 이미지에 기억하기 쉬운 이름 부여하기
위 과정에서 도커 이미지를 만들었고 이를 실행하기 위해서는 다음과 같은 명령어를 사용합니다.
docker run 이미지 ID
그러나 이는 기억하기 너무 어렵습니다.
이미지의 ID 대신 기억하기 쉬운 이름을 짓는 방법이 없을까요???
기존 build 명령어
docker build ./
이름을 부여하는 build 명령어
docker build -t 도커아이디/저장소(혹은 프로젝트 이름):버전 ./
이는 다음과 같이 사용합니다.
docker run 도커아이디/저장소(혹은 프로젝트 이름):버전
버전은 생략 가능합니다.
'Docker' 카테고리의 다른 글
[Docker] - (3) 도커를 사용하여 간단한 SpringBoot 어플 실행하기 (8) | 2022.06.29 |
---|---|
[Docker] - (1) 도커 명령어 (0) | 2022.06.22 |
[Docker] - (0) 도커 컨테이너와 이미지 (3) | 2022.06.22 |