도커(Docker) 기본개념
도커란?
Go로 개발된, 앱을 개발하고 배포하고 운영하기 위한 오픈 플랫폼이다.
인프라로부터 앱을 분리하여 소프트웨어를 빠르게 제공할 수 있도록 한다.
도커를 이용하면 앱을 관리하는 것과 같은 방식으로 인프라를 관리할 수 있다.
컨테이너?
Runnable instance of an Image, an isolated environment for your code.
앱이 구동되는 환경까지 포함하여 실행할 수 있도록 하는 기술이다.
도커API 또는 CLI를 이용해 생성하고, 실행하고, 중단하고, 옮기거나, 삭제할 수 있다.
컨테이너는 가볍고, 앱을 실행하기 위한 모든 필요한 것을 가지고 있어 호스트에 설치된 것에 의존할 필요가 없다.
이처럼 느슨하게 분리된 환경에서 앱을 패키징하고 실행할 수 있도록 해 준다.
이런 컨테이너를 사용할 때 필요한 도구 = 컨테이너 런타임
= 컨테이너를 쉽게 내려받고 공유하고 구동할 수 있도록 해 주는 도구 = 도커
도커 이미지?
도커 컨테이너를 생성하기 위한 읽기 전용 템플릿이다. 사용자별로 앱을 구동하기 위한 커스텀이 가능하다.
ex) Ubuntu를 베이스로 Apache 웹서버를 설치하기
또한, 각종 설정 과정을 줄여 더 편하게 앱을 실행할 수 있도록 해 준다.
도커파일*을 수정한 후 이미지를 다시 빌드하면, 변경된 부분만 빌드됨 → 다른 가상화기술에 비해 빠르고 가볍다!
*도커파일 : 도커 이미지를 생성하기 위한 지시사항들을 포함하는 텍스트 파일.
도커 이미지를 구성하는 과정 자동화 및 이미지 빌드를 위한 세부 사항을 정의한다.
도커를 왜 사용하나?
- 앱을 빠르고 일관되게 제공한다.
: 앱과 서비스를 제공하는 로컬 컨테이너를 이용하여 표준화된 환경을 제공하여 개발의 LifeCycle을 간소화한다.
컨테이너는 CI/CD*에 적합하다.
*CI/CD : Continuous Integration(지속적 통합) & Continuous Devlivery/Deployment(지속적 배포)
CI = 작성한 코드를 자동으로 빌드하고 테스트하는 것
CD = 개발된 소프트웨어를 자동화된 프로세스를 통해 테스트 및 배포하는 것
- 반응형 배포 및 확장성
도커의 '컨테이너를 기반으로 한 플랫폼'은 이식성이 뛰어나다.
그래서 개발자의 로컬, 물리적/가상 머신, 클라우드 등 여러 환경에서 실행가능하다.
이러한 도커의 이식성과 가벼운 특성은 작업 부하를 동적으로 관리할 수 있게 해주며,
앱의 확장 또는 축소를 실시간으로 가능하게 해 준다.
예시 시나리오)
- 개발자들이 로컬에서 코드를 작성하고 도커 컨테이너를 이용해 코드를 공유한다.
- 도커를 이용해 테스트 환경에 앱을 푸시하고 자동으로 실행한 뒤 테스트한다.
- 버그를 찾으면 개발환경에서 수정한 후 추가 테스트와 유효성 검사를 위해 테스트 환경에 다시 배포한다.
- 테스트가 완료되면, 업데이트된 이미지를 운영 환경에 푸시하는 것만큼 간단히 고객에게 수정 사항을 제공할 수 있게 된다.
참고