# 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 |