1 minute read

docker build

docker buildDockerfile을 기반으로 하나의 Docker 이미지(image)를 만드는 명령어이다. 작성한 Dockerfile에 따라 이미지를 만들고, 그 이미지 안에는 작성자가 지정한 프로그램, 파일, 환경 설정이 모두 포함된다. 쉽게 말해 Docker 이미지를 음식이라고 생각한다면 Dockerfile은 음식의 레시피가 되는 셈이다.

명령어 기본 구조

docker build -t [이미지이름:태그] [Dockerfile이 있는 경로]

# ex
docker build -t hello-alpine .
# -t hello-alpine : 이 빌드된 이미지의 이름을 hello-alpine으로 지정
# . : 현재 디렉토리에 있는 Dockerfile을 사용하겠다는 의미

빌드 과정(ex.)

FROM ubuntu
WORKDIR /app
COPY hello.txt .
CMD ["cat", "hello.txt"]

docker build를 실행하면:

1. Ubuntu 이미지를 베이스로 설정

2. /app 디렉토리를 만들고 작업 디렉토리로 설정

3. hello.txt 파일을 컨테이너 내부 /app으로 복사

4. 실행 명령을 설정(CMD는 실행 시점에 사용됨)

위 모든 과정을 하나의 이미지로 만들어서 저장하는 것이 바로 docker build이다.

  • 이미지가 만들어지면 docker images 명령으로 목록 확인이 가능하며, docker run IMG_NAME으로 언제든 실행이 가능하다. DockerHub을 통해 다른 사람과 공유를 할 수 도 있다.

  • 캐시(Cache) 활용 : Docker는 Build할 때 이전에 실행한 단계들을 캐시에 저장한다. 변경이 없으면 같은 명령어는 다시 실행하지 않고 캐시를 사용해 빠르게 빌드한다.

  • 캐시 활용의 예시

docker build -t my-hello .
# → Dockerfile 보고 이미지 생성
docker run my-hello
# → 이미지 기반으로 컨테이너 실행

내 이미지 만들기 실습(build)

  • Docker 처음 설치하고 진행했던 Docker run hello-world를 실행했을 때 나오는 문구를 그대로 출력하는 이미지를 생성해볼 것이다.

  • 먼저 Dockerfile과 build를 위한 작업 디렉토리를 생성해준다. 디렉토리 생성 이후 Dockerfile을 생성해 문구를 작성해준다.

Alt text

FROM ubuntu
WORKDIR /app
COPY hello.txt .
CMD ["cat", "hello-world.txt"]
  • Dockerfile의 내용은 위와 같이 써주고, 아래 명령어와 같이 build해준다. hello-world를 다른 방식으로 두 가지 생성할 예정이므로 hello-world1로 설정해준다.
docker build . -t hello-world1

Alt text

  • 이미지가 정상적으로 빌드된 것을 확인했으면, run을 통해 정상적으로 문구가 출력되는지 확인해준다.

Alt text

  • 두 번째로 진행할 방식은 Base image를 우분투가 아닌 기본 scratch로 진행할 예정이다. hello.c c파일을 만들어서 gcc로 컴파일한 후 실행 파일을 바로 실행시켜 문구를 출력할 예정이다.

  • 먼저 hello.c를 작성해준다.(디렉토리는 이전 작업 디렉토리와 동일하다.)

Alt text

  • gcc가 설치가 안되어있다면 sudo apt install gcc를 통해 설치를 한 후 아래 컴파일 명령어로 컴파일해준다.
gcc -static -o hello hello.c
  • 컴파일 후 현재 디렉토리를 살펴보면 아래와 같이 나온다.

Alt text

  • Dockerfile의 내용은 아래와 같다.

Alt text

  • 위와 동일하게 빌드 후 실행해주면 같은 결과를 확인할 수 있다.

Alt text Alt text

  • 이로써 나만의 Docker 이미지를 생성해보았다. commit은 컨테이너 안에서 직접 작업한 후, 그 상태를 이미지로 저장하는 방식이며, build는 Dockerfile이라는 설정 파일을 만들고, 이걸 기반으로 이미지를 만드는 스크립트기반 방식이다.