# 우분투 22.04 버전 이미지 사용
FROM ubuntu:22.04
# jdk 설치
RUN apt-get update && apt-get install -y openjdk-17-jdk
# jar 파일을 컨테이너로 이동
COPY vanilla-0.0.1-SNAPSHOT.jar /
# 실행된 컨테이너에서 jar파일 동작
CMD java -jar vanilla-0.0.1-SNAPSHOT.jar
모든 Dockerfile은 FROM 지침과 함께 작성을 시작한다.
위 예시에서도 ubuntu:22.04를 Base 이미지로 사용한다는 의미의 FROM 지침으로 시작하고있다.
Base 이미지는 빌드작업 중, 동작할 환경을 의미한다.
Ubuntu, Alpine, Python 등 대부분의 Base 이미지들은 Docker Hub의 이미지 라이브러리에 존재하기 때문에,
Beas이미지를 생성하기 이전에 이미 존재하지는 않는지 확인해볼 필요가 있다.
Base 이미지를 직접 생성하고 싶다면 리눅스 기반의 배포이미지를 기반으로 사용하거나, FROM scratch 를 사용하면 된다.
배포기반의 이미지를 생성하려는 경우에는
root 파일시스템을 tar파일로 패키징하고, docker import를 통해 Docker로 import 하면된다.
scratch 이미지는 일반적으로 애플리케이션에 필요한 것들만 포함하는 최소한의 이미지를 뜻한다.
해당 이미지는 Docker Hub 에서 확인할 수 있다. 정말 최소한의 환경( 파일시스템도 없음 )만 제공한다는 특징이 있다.


FROM scratch만 존재하는 Dockerfile로 이미지를 빌드해보면 0바이트 짜리 이미지가 만들어진다.
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
WSL을 활용하여 Hello World!를 출력하는 가벼운 이미지를 생성해보자

gcc --static -o hello hello.c 명령으로 c파일을 컴파일한 뒤, Dockerfile을 작성한다.
이때,
--static옵션 없이 컴파일하면 동적 링크 프로그램으로 만들어지므로, 라이브러리 파일이 포함되지 않는다.
따라서, 아래에 이어지는 동작들이 원하는대로 동작하지 않는다.
# syntax=docker/dockerfile:1
FROM scratch
ADD hello /
CMD ["/hello"]

docker build -t hello . 명령을 통해 hello라는 이름의 이미지를 생성한다.

docker run 명령으로 컨테이너를 실행하면 Hello World!가 출력되는 것을 확인할 수 있다.
--rm옵션은 컨테이너를 실행이 끝나면 제거하는 옵션이다