도커 개념
- 도커(Docker)
- 애플리케이션을 컨테이너라는 독립적인 소프트웨어 유닛으로 패키징
- 어떤 환경에서도 일관적으로 실행 가능
- 도커의 탄생 배경
- 애플리케이션 실행에 필요한 다양한 환경 설정, 라이브러리, 디펜던시 설치 및 관리의 번거로움
- “내 PC에서는 잘 되는데 서버에서는 안 되는” 문제 해결
- 컨테이너(Container)
- 애플리케이션 코드, 런타임 환경, 시스템 도구, 시스템 라이브러리, 설정 등
- 애플리케이션 실행에 필요한 모든 것을 담는 가볍고 고립된 환경
- VM(가상 머신) vs. 컨테이너
- VM
- 하드웨어 위에 하이퍼바이저를 통해 각기 다른 운영 체제를 포함하는 가상 머신 생성
- 호스트 OS와 별개로 전체 OS 이미지를 갖추므로 무겁고 부팅 속도가 느림
- 컨테이너
- 호스트 OS를 공유하며 컨테이너 엔진 위에서 동작
- VM보다 가볍고 시작 속도가 빠름
도커의 구성 요소
- 도커 파일(Dockerfile)
- 컨테이너 이미지를 어떻게 만들지 정의하는 스크립트(레시피)
- 필요한 파일 복사, 라이브러리 설치, 환경 변수 설정, 실행 명령어 등 명시
- 이미지(Image)
- 도커 파일을 기반으로 생성된 애플리케이션 실행 가능한 상태를 캡처한 불변 템플릿
- 객체 지향 프로그래밍의 “클래스”와 유사
- 컨테이너 생성 시 사용
- 컨테이너(Container)
- 이미지로부터 생성된 실행 중인 애플리케이션 인스턴스
- 고립된 환경에서 동작하며, 실행 중 파일 생성·수정 가능
- 객체 지향 프로그래밍의 “인스턴스”와 유사
도커 워크플로우
- 도커 파일 작성
- 애플리케이션 실행에 필요한 모든 요소(베이스 이미지, 파일 복사, 라이브러리 설치, 실행 명령어 등) 정의
- 이미지 빌드
docker build 명령어로 도커 파일을 기반으로 이미지를 생성
- 이미지 공유(선택 사항)
- 컨테이너 레지스트리에 이미지 업로드 (예: Docker Hub)
- 컨테이너 실행
docker run 명령어로 이미지를 사용해 컨테이너 생성 및 실행
컨테이너 레지스트리
- Public 레지스트리 (Docker Hub)
- 누구나 접근 가능한 공개 저장소
- 다양한 오픈소스 이미지 검색 및 다운로드 가능
- Private 레지스트리
- 특정 조직이나 팀만 접근 가능한 비공개 저장소
- 자체 레지스트리 서버 구축 또는 클라우드 제공 서비스 이용 가능