개발/Docker

#3 Dockerfile

Jinoo.keem 2025. 5. 4. 14:12
728x90

# Dockerfile?

Docker 이미지를 만들게 해주는 파일.

 

# FROM : 베이스 이미지 생성

FROM [이미지명]

FROM [이미지명] : [태그명]

베이스 이미지를 생성하는 역할. Docker컨테이너를 특정 초기 이미지(베이스이미지)를 기반으로 추가적인 세팅을 할 수 있다.

 

# 빌드 명령어

docker build -t [생성할 이미지이름 설정:태그] [Dockerfile 경로]

ex) docker build -t my-app:v1 .

-t : 태그의 줄임말로 버전관리나 목적구분에 사용.

 

# 종료된 컨테이너에 들어가서 디버깅하고 싶을 때

1. docker logs 를 활용해 컨테이너 로그 확인하기

2. docker exec -it 를 활용해 컨테이너 내부에 직접 들어가보기

docker exec -it 는 실행중인 컨테이너에만 쓸 수 있는 명령어이므로 아래 명령어를 입력한 후 디버깅한다.

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 500초동안 시스템을 일시정지 시키는 명령어

 

 

# COPY

호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달.

COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너에서 파일이 위치할 경로]

 

## dockerignore

gitignore 와 같은 기능으로 작성된 파일을 제외하고 복사한다.

 

# ENTRYPOINT : 컨테이너가 시작할 때 최초로 실행되는 명령어

ENTRYPOINT [명령문..]

ex) ENTRYPOINT ["/bin/bash", "-c", "echo hello"]

 

# RUN : 이미지를 생성하는 과정에서 사용할 명령문 실행

RUN [명령문]

ex) RUN npm install

 

# WORKDIR : 작업 디렉토리를 지정

작업 디렉터리를 전환하면 그 이후에 등장하는 모든 명령문은 해당 디렉터리를 기준으로 실행된다.

컨테이너 내부의 폴더를 깔끔하게 관리하기 위해서 사용.

WORKDIR [작업 디렉토리로 사용할 절대 경로]

ex) WORKDIR /user/my-app

 

# EXPOSE : 컨테이너 내부에서 사용중인 포트를 문서화하기

도커파일 안에 포트번호를 '문서화하는 역할만' 함

EXPOSE [포트번호]

EXPOSE 3000

 

# 예제

#0 예제
-------------------------------------------------------------------------------------
#1 next 프로젝트 생성
npx create-next-app@latest
-------------------------------------------------------------------------------------
#2 next프로젝트의 root에 dockerfile작성
FROM node:20-alpine # 불필요한것들을 빼고, 핵심적인것들만 녹여서 이미지의 용량을 줄인 버전

WORKDIR /app # 도커에서 작업할 공간을 만들어주기 

COPY . . # /app 에 설치한 next 프로젝트 복사해오기

RUN npm install / 이미지 실행 시 npm install을 하기 떄문에 dockerignore파일에 node_modules를 작성해주면 최적화에 좋음

RUN npm run build / next 프로젝트를 프로덕션 모드로 빌드

EXPOSE 3000 # 3000번 포트로 연결하겠다는 내용

ENTRYPOINT [ "npm", "run", "start" ] # Docker에서는 ENTRYPOINT [ "명령어", "인자1", "인자2" ] 형식을 쓰는 것이 더 명확하고 안전한 실행 방식
-------------------------------------------------------------------------------------
#3 terminal
docker build -t my-web-server .
docker run -d -p 80:3000 my-web-server # 80번 포트와 3000번 포트를 연결

 

'개발 > Docker' 카테고리의 다른 글

#5 Docker 환경에서 Spring Boot 백엔드 실행  (2) 2025.05.05
#4 Docker Compose  (0) 2025.05.04
#2 Docker Volume  (0) 2025.05.03
#1 Docker CLI  (5) 2025.05.02
#0 Docker  (0) 2025.05.02