도커의 필요성
쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념
- 의존성 충돌 문제 해결: 여러 개의 프로그램이 특정 프로그램에 의존하고 있을 때, 의존하는 버전이 다른 경우, 의존성 충돌이 생긴다. 도커는 각각의 프로그램들이 필요로 하는 다른 프로그램의 종류와 버전을 독립적으로 구성해주기 때문에 의존성 충돌을 해결한다.
- 이러한 의존성 충돌 문제 해결 특성은 아래의 두 특성과도 연관된다.
- 서버 확장 시, 모든 서버에 대해 동일한 프로그램 구동 환경을 손쉽게 제공함으로서 수평 확장에 용이함
- 개발 환경과 배포 환경의 통일, 개발자 간의 개발 환경 통일
실제 현업에서는 다음과 같이 작업한다 ref
- 프로젝트 시작하는 개발자가 dockerfile, docker-compose.yml을 만들고, 깃허브에 올려둔다.
- 동료 개발자는 깃 클론 후, yml 파일을 받아서 빌드(docker-compose build) 후, 개발 환경을 구축한다.
- 중간 중간 자신이 작업한 내용이 잘 작동하는지 확인하기 위해 이미지를 빌드해주고 테스트한다. (docker-compose up --build)
- 이상이 있다면 빌드 취소하고 다시 수정
- 기존 이미지에 없던 새 패키지나 모듈 설치 시, dockerfile 수정하고 깃에 푸시한다
- 이상이 없으면 깃에 푸시한다
도커 핵심 용어
컨테이너
독립적인 앱 구동 환경을 구성하는 단위.
컨테이너는 하나의 컴퓨터 안에서 프로세스, 파일 시스템, 네트워크 IP 를 다 독립적으로 사용할 수 있도록 해 준다.
컨테이너들끼리는 분리되어있다.
가상머신과 달리, 컨테이너 내에 별도 운영체제가 존재하지 않음
대신, lxc라는 리눅스 기반의 컨테이너를 사용한다.