DockerFile 이란?
Docker 이미지는 DockerHub를 통해 다운받아서 사용할 수 있다.
이 Docker 이미지들도 누군가 만들어서 DockerHub에 올려놓은 것이다.
그럼 그 Docker 이미지는 어떻게 만드는 것일까?
DockerFIle을 활용해서 Docker이미지를 만들 수 있다.
FROM:베이스 이미지 생성
vscode로 Dockerfile 을 생성해서 베이스 이미지를 생성해본다.
FROM 은 베이스 이미지를 생성하는 역할을 한다.
Docker 컨테이너를 특정 초기 이미지를 기반으로 추가적인 셋팅을 할 수 있다.
여기서 얘기하는 '특정 초기 이미지' 가 곧 베이스 이미지이다.
예) 컨테이너를 새로 띄워서 환경을 구축할 때 기본 프로그램이 어떤게 깔려있으면 좋겠는지 선택하는 옵션

FROM [이미지명]
FROM [이미지명]:[태그명]
태그명을 작성하지 않으면 latest 버전이 자동으로 설치한다.
FROM 으로 베이스 이미지 생성
Dockerfile에 FROM 으로 jdk17버전을 작성한다.
docker build -t [생성할 이미지 이름] [도커 파일 경로]
$ docker build -t my-jdk17-server .
상대 경로 이므로 현재위치인 . 를 입력했다.

빌드 후 잘 이미지가 생성됐는지 확인해본다.

정상적으로 my-jdk17-server가 생성된 것을 확인할 수 있다.
TAG는 디폴트로 latest로 붙는다.
그러면 태그명을 설정해서 다시 받아보자

이제 컨테이너를 실행해서 확인해본다.
❯ docker run -d my-jdk17-server
docker ps
실행중인 컨테이너 목록에 방금 실행한 컨테이너가 보이지 않는다
ps -a 로 확인해보면 컨테이너가 종료된것으로 보이는데, 이는 도커의 컨테이너가 실행될 때 컨테이너 내부적으로 실행해야할 작업들이 완료되면 자동으로 종료하게 된다.

이 때 FROM 아래에 아래의 코드를 추가해주면 실행 시킬수있다.
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
위의 코드를 입력한 후 다시 build 후 확인해보면 정상적으로 실행된다.
종료된 컨테이너에 들어가서 디버깅 하고 싶을 때
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
# 500초 동안 서비스를 일시정지 시키는 명령어
COPY :파일 복사
FROM ubuntu
COPY app.txt /app.txt
ENTRYPOINT ["/bin/bash","-c","sleep 500"]
현재 경로에 있는 app.txt를 컨테이너에 절대경로에 app.txt경로로 복사하겠다라는 뜻임
ENTRYPOINT :컨테이너가 시작할 때 실행되는 명령어
FROM ubuntu
ENTRYPOINT ["/bin/bash", "-c", "echo hello"]
hello라는 문자열을 출력해줘라는 명령어임
logs 명령어로 확인가능
RUN :이미지를 생성하는 과정에서 사용할 명령문 실행
Run 은 이미지 생성 과정에서 명령어를 실행시켜야 할 때 사용한다.
# 문법
RUN [명령문]
# 예시
RUN npm install
Run VS ENTRYPOINT
RUN은 이미지 생성과정에서 필요한 명령어를 실행 시킬 때 사용
ENTRYPOINT 는 생성된 이미지를 기반으로 컨테이너를 생성한 직후에 명령어를 실행시킬 때 사용
예제) 나는 ubuntu 라는 컨테이너 환경에 git이 깔려있으면 좋겠다고 가정
dockerfile 작성
FROM ubuntu
RUN apt update && apt install -y git #이미지를 생성할 때 실행되는 명령어
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 컨테이너를 실행할 때 실행되는 명령어
WORKDIR : 작업 디렉토리를 지정
WORKDIR 으로 작업 디렉토리를 전환하면 그 이후에 등장하는 모든 RUN, CMD , ENTRYPOINT, COPY, ADD 명령문은 해당 디렉터리를 기준으로 실행된다.
작업 디렉토리를 굳이 지정해주는 이유는 컨테이너 내부의 폴더를 깔끔하게 관리하기 위해서다.
사용법
# 문법
WORKDIR [작업 디렉토리로 사용할 절대 경로]
# 예시
WORKDIR /usr/src/app
예제
FROM ubuntu
WORKDIR /my-dir
COPY ./ ./
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
EXPOSE :컨테이너 내부에서 사용 중인 포트를 문서화하기
EXPOSE 컨테이너 내부에서 어떤 포트에 프로그램이 실행되는 지를 문서화하는 역할만 한다.
# 문법
EXPOSE [포트 번호]
# 예시
EXPOSE 3000
'Docker' 카테고리의 다른 글
Docker Compose ? (0) | 2025.03.25 |
---|---|
Next.js 를 Docker로 배포하기 (1) | 2025.03.22 |
Docker Volume (도커 볼륨) /MySQL로 볼륨 사용해보기 (0) | 2025.03.22 |
Docker CLI (0) | 2025.03.16 |
Docker 설치 (0) | 2025.03.15 |