728x90
반응형
[ 우리의 목표 : NodeJS 앱 ]
Dockerfile로 커스텀 도커 이미지 만들기
Dockerfile 기본 구조와 명령어 설명
Doickfile 생성
- 이 파일에는 자체 이미지를 빌드할 때 실행하려는 도커에 대한 명령이 포함
- 따라서 자체 이미지에 대한 설정 명령이 포함
FROM 명령어
- node라는 이름의 이미지가 존재하며, 이를 찾을 수 있다는것을 의미
- 베이스 이미지 지정
- 예: FROM node
- 이미 만들어진 이미지를 기반으로 새 이미지 생성
WORKDIR 명령어
- 컨테이너 내부의 작업 디렉토리 설정
- 예: WORKDIR /app
- 이후 모든 명령어는 이 디렉토리 기준으로 실행
COPY 명령어
- 로컬 파일을 컨테이너로 복사
- 문법: COPY [로컬경로] [컨테이너경로]
- 예: COPY . /app 또는 COPY . ./
- COPY . . 에서 첫번째 점은 현재 플젝에서 도커파일제외하고 모든파일을 복사해야한다고 도커에게 알림. 두번째 점은 그 파일을 저장해야하는 이미지 내부의 경로
- COPY . /app 는 독파일과 동일한 폴더에 있는 모든 파일과 모든 하위 폴더가 컨테이너 내부의 app 폴더에 복사.
이 폴더가 존재하지 않는 경우에는 이미지와 컨테이너에 생성된다.
RUN 명령어
- 이미지 빌드 시 실행할 명령어
- 예: RUN npm install
- 이미지 생성 과정에서 실행됨
- 이미지가 빌드될때마다 실행되기때문에 RUN node server.js는 올바르지 않은 명령어
CMD 명령어
- 이미지가 생성될때 실행되지 않고, 이미지를 기반으로 컨테이너가 시작될때 실행되다는 점에서
RUN과 다르다. - 이미지를 실행하는 것이 아니라, 이미지를 기반으로 컨테이너를 실행하는 것.
이미지를 기반으로 컨테이너를 시작하는 경우에만 서버를 시작하고 싶어 - 컨테이너 시작 시 실행할 명령어
- 예: CMD ["node", "server.js"]
- RUN과 다르게 컨테이너 실행 시점에 동작
- CMD에 특정하지 않으면 베이스 이미지가 실행되며, 그게 없는 경우 에러 발생
EXPOSE 명령어
- 컨테이너가 열어둘 포트 지정
- 예: EXPOSE 80
- 컨테이너와 로컬 환경 간의 통신을 위해 필요
- 컨테이너 자체 내부 네트워크가 있어서 컨테이너는 그 포트를 우리의 로컬 머신에 노출하진 않는다
FROM node
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 80
CMD ["node", "server.js"]
주요 특징과 주의사항
격리된 환경
- 컨테이너는 독립된 파일 시스템 보유
- 호스트 시스템과 분리된 환경
작업 순서 중요
- WORKDIR 설정 후 다른 명령어 실행
- 의존성 설치 전 필요한 파일 복사
RUN vs CMD
- RUN: 이미지 빌드 시 실행
- CMD: 컨테이너 시작 시 실행
포트 설정
- EXPOSE로 포트 노출 필요
- 컨테이너의 내부 네트워크와 로컬 환경 연결
이렇게 설정된 Dockerfile로 이미지를 빌드하고, 이를 기반으로 컨테이너를 실행할 수 있습니다.
참조
https://www.udemy.com/course/docker-kubernetes-2022
728x90
반응형
'강의 > Docker & Kubernetes : 실전 가이드' 카테고리의 다른 글
[25] 이미지는 읽기 전용 (0) | 2025.02.14 |
---|---|
[23] 자체 이미지를 기반으로 컨테이너 실행하기 (0) | 2025.02.14 |
[20] 외부(사전 빌드된) 이미지의 사용 & 실행 (0) | 2025.02.11 |
[19] 이미지 & 컨테이너 : 무엇이며, 왜 사용하는가? (0) | 2025.02.11 |
윈도우11 Home에서 Hyper-V 설치 및 활성화 방법 (0) | 2025.02.10 |
댓글