개발 모드에서 도커 사용하기
Docker
“도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너 로 실행하고 관리하는 오픈 소스 프로젝트이다.”
이미지와 컨테이너
- 도커 이미지 : 종속성 및 패키지들
a snapshot or blueprint of the libraries and dependencies required inside a container for an application to run.
- 도커 컨테이너 : 실행되는 격리된 환경
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
==> 중요한 건 도커 컨테이너, 이미지는 컨테이너를 만들기 위한 설계도 같은 것
개발 환경에서 도커 사용하기
- Dockerfile 를 사용해 이미지 만들기
Dockerfile
# * 베이스 이미지
FROM node:18
# 작업 디렉토리 (모든 명령어가 여기서 실행, 보통 /app/* 에서 함)
WORKDIR /app/backend
# * 소스 코드 복사 (현재 Dockerfile 위치에서 상대 경로로 복사)
COPY ../backend .
# * 의존성 설치
RUN npm install
# 환경 변수 설정 (생략해도 무관)
ENV NODE_ENV=development
# 안 써도 무방 그냥 포트 번호를 명시해주는 것 (웬만해선 하는게 좋다)
EXPOSE 3000
# * 실행 명령어
CMD ["npm", "run", "start:dev"]
- 이미지 빌드하기
docker build .
- 컨테이너 실행하기
docker run -p <로컬 포트>:<컨테이너 포트> <docker image ID>
[실제] 개발 환경에서 도커 사용하기
실제 환경에서는 docker compose 사용
docker compose 는 도커 컨테이너를 여러개 돌릴 수 있도록 해주는 도구
docker-compose.yml
version: '3.8'
services:
frontend:
build:
context: ..
dockerfile: docker/front.dev.Dockerfile
ports:
- "8080:8080"
volumes:
- "../frontend:/app/frontend"
environment:
- DEV_ENV=docker
- NODE_ENV=development
backend:
build:
context: ..
dockerfile: docker/back.dev.Dockerfile
ports:
- "3000:3000"
volumes:
- "../backend:/app/backend"
env_file:
- ../backend/.env.development
- version: 도커 컴포즈 파일 버전 명시
- services: 서비스 명시 (사용할 컨테이너들)
- build: 이미지 빌드
- ports: 포트 매칭
- volumes: 호스트(로컬 IDE)와 컨테이너 간의 파일 시스템 공유
(주의 사항) 컨테이너들이 서로 통신할 때는 [명시한 서비스 이름] 사용
localhost (x) -> backend (o)
docker-compose up
[참고]