콘텐츠로 이동

Dockerfile

도커 스터디 - 처음부터 제대로 배우는 도커/쿠버네티스 컨테이너 개발과 운영 ch. 2

created: 2026.1.13 last updated: 2026.1.15


  • 컨테이너: 컨테이너 이미지를 기반으로 생성되고 구현된 파일 시스템과 애플리케이션이 실행되는 상태
  • 컨테이너 이미지: 컨테이너를 구성하는 파일 시스템과 실행 애플리케이션 및 설정을 모은 것으로 컨테이너를 생성하기 위해 사용하는 템플릿
  • 하나의 컨테이너 이미지로 여러 개의 컨테이너 생성

Dockerfile

FROM golang:1.20.5

WORKDIR /go/src/github.com/jpubdocker/echo
COPY main.go .
RUN go mod init

CMD ["go", "run", "main.go"]
  • 도메인 특화 언어domain specific language, DSL를 사용해 이미지 구성을 정의

인스트럭션 instruction

  • FROM, RUN 같은 키워드
  • FROM: 생성할 컨테이너 이미지의 기본 이미지(베이스 이미지)를 지정
  • WORKDIR: 컨테이너 안 현재 디렉터리 지정(없으면 생성) - 컨테이너 안에서 cd + mkdir
  • COPY: 빌드 콘텍스트(이미지를 빌드하는 환경의 현재 디렉터리) 파일과 디렉터리를 컨테이너로 복사
    • COPY [from(빌드 콘텍스트 경로)] [to(컨테이너 내 작업 디렉터리)]
    • 내 컴퓨터에서 컨테이너로 파일을 복사
  • RUN: 컨테이너 이미지를 빌드할 때 컨테이너에서 실행하는 커맨드 정의
  • CMD: 컨테이너를 실행할 때 컨테이너에서 실행할 프로세스 지정 - 컨테이너 시작 시 한번 실행
    • 문자열로도 가능하지만 배열을 추천

Dockerfile로 이미지를 만들고 docker로 이미지를 run하면 컨테이너가 뜬다

다른 인스트럭션

ENTRYPOINT ["java", "-jar"]
CMD ["app.jar"]
- ENTRYPOINT: 고정 명령어 - CMD: 기본 인자 - 둘이 합쳐져서 실행: java -jar app.jar - docker run my-app -Xmx512m app.jar - CMD 부분만 교체 가능

  • LABEL: 이미지 생성자 기입 등 용도
  • ENV: Dockerfile을 기반으로 생성한 도커 컨테이너에서 사용할 환경 변수 지정
  • ARG: 이미지 빌드 시 사용하는 임시 변수(정보)

컨테이너 이미지 빌드

docker image build -t 이미지명[:태그명] Dockerfile의 디렉터리 경로
- docker image build: 컨테이너 이미지를 생성하기 위한 커맨드

컨테이너 실행

docker container run -it|-d 이미지명[:태그명]
- -it: 포어그라운드에서 동작 - -d: 백그라운드에서 실행

포트 포워딩

  • 컨테이너는 가상 환경이지만 외부로부터 독립된 머신 - 컨테이너 포트는 내부에 한정된 포트이며 외부에서 접속 불가
  • 포트 포워딩을 사용하여 호스트 머신의 포트를 컨테이너 포트에 연결

docker run -d -p {호스트 포트}:{컨테이너 포트} ...
- 호스트 포트를 생략하고 컨테이너 포트만 입력하면 비어 있는 포트가 자동 할당: ephemeral port