- 학습 목표 1. Docker
컨테이너 단위로 실행할 수 있는 배포 플랫폼 → 개발, 배포, 실행하는 과정을 단순화
-
사용하는 이유
- 일관성: 다른 실행 환경 (로컬, 서버, 테스트 환경)에서도 정상적으로 동작
- 이식성: 다른 실행 환경 (windows, MacOS)에서도 정상적으로 동작
- 확장성: 서비스를 확장하기 쉬움
- 효율성: 자원을 효율적으로 사용 가능 (cpu 개수, ram 사이즈 등을 설정할 수 있기 때문)
- 기본 요소
- 도커파일: 프로젝트를 이미지로 만들기 위한 설정 파일
- 이미지: 컨테이너를 생성하는 정적 템플릿, 애플리케이션에 필요한 데이터가 있음
build
: 이미지를 빌드run
: 이미지로 컨테이너 생성 및 실행push
: 이미지를 레지스트리로 업로드
- 컨테이너: 애플리케이션이 실행되는 환경
- 레지스트리: 이미지를 저장하고 배포하는 중앙 저장소
- 의존성을 뿌신 도커
- 하드웨어 의존성: cpu, ram 등 하드웨어 종류에 따라 애플리케이션 개발에 영향을 받는 특성
- 운영체제 의존성: os 종류에 따라 애플리케이션 개발에 영향을 받는 특성 👉🏻 도커는 컨테이너 기반이기 때문에, os, 환경에 영향을 받지 않고 무조건 빌드하고 실행하는 것을 보장한다.
- 도커 파일
도커가 이미지를 만들 때 기반이 되는 파일FROM
: 베이스 이미지를 지정RUN
: 도커 이미지를 빌드하는 시점에서 명령어 실행CMD
: 컨테이너 실행 초기에 실행할 명령어 지정 (컨테이너 run 명령이 치면서 덮어쓸 수 있음)ENTRYPOINT
: 컨테이너 실행 초기에 꼭! 실행되어야 하는 명령어 지정COPY
: 이미지로 특정 폴더나 파일을 복사WORKDIR
: 컨테이너에서 작업할 디렉토리 지정
- 도커
run
옵션-t
: tty(가상 터미널)을 할당해주지만, 바로 입력이 차단되기 때문에 보통은-i
와 함께 사용-i
: 명령어를 입력받을 수 있게 세션을 염-it
: 컨테이너 내부와 상호작용이 가능한 터미널 세션을 염-rm
: 컨테이너 종료시 자동으로 컨테이너를 삭제-d
: 컨테이너를 백그라운드에서 실행-p
: 포트 매핑 (로컬 포트:컨테이너 포트)-e
: 환경변수 설정--name
: 컨테이너 이름 설정
exec
명령어
이미 실행 중인 컨테이너에 추가 명령을 실행
- Multi Stage Build
- dockerfile에서 하나의 이미지를 빌드할 때 의존성과 배포 파일을 분리해서 단계별로 빌드하는 방법