Docker는 컨테이너 기반의 가상화 기술을 제공하는 오픈소스 플랫폼이다.
애플리케이션을 컨테이너라는 단위로 패키징하고 배포, 실행할 수 있도록 돕는다.
애플리케이션과 실행에 필요한 모든 라이브러리, 종속성을 하나의 단위로 패키징한 것
격리된 환경에서 실행되며, OS에 독립적으로 동작함
기존의 가상 머신(VM)보다 가볍고, 실행 속도가 빠름
컨테이너를 실행하기 위한 템플릿 (즉, 컨테이너의 "설계도")
애플리케이션과 그 실행 환경이 포함됨
변경이 불가능한(Immutable) 상태로 저장되며, 이를 기반으로 컨테이너가 실행됨
Docker 이미지를 생성하기 위한 설정 파일
애플리케이션 빌드 과정과 환경을 코드로 정의할 수 있음
여러 개의 컨테이너를 한 번에 관리할 수 있도록 돕는 도구
docker-compose.yml 파일을 사용하여 여러 컨테이너를 정의할 수 있음
Docker 이미지를 공유하고 관리하는 공식 저장소
docker pull [이미지명] 명령어를 통해 쉽게 가져올 수 있음
어플리케이션이 Docker 위에서 구동되기 때문에, 모든 개발자가 동일한 환경에서 개발 가능
-> 개발환경 달라서 문제가 생길 가능성이 현저히 줄어듦
++
Dockerfile과 docker-compose.yml을 활용하여 한 번 정의한 환경을 로컬, 테스트 서버,
운영 서버에서 동일하게 유지 가능
팀 내에서 환경 설정을 공유하고 빠르게 셋업 가능
아래와 같은 특징으로 개발환경을 한번 구축하고 나면
결과물을 빠르게 배포 및 확장 할 수 있음
기존의 가상 머신(VM)은 하나의 애플리케이션을 실행하려면 OS까지 포함된 무거운 이미지를 사용해야 하기에 메모리와 CPU를 많이 차지하며, 실행 속도도 느림
기존 배포 방식은 코드 변경 → 빌드 → 서버 설정 → 배포의 과정이
복잡하고 시간이 오래 걸려 지속적인 통합과 배포를 자동화하기 어렵다.
예시로, 개발자는 macOS, 운영 서버는 Linux, 다른 팀원은 Windows 등 환경이 다를 경우 실행 방식이 다를 수 있기에, 특정 OS에서만 동작하는 소프트웨어가 있을 경우
개발과 운영 환경을 맞추기가 어렵다.
하나의 거대한 애플리케이션(모놀리식 구조)은 유지보수가 어렵고 배포 속도가 느리다.
특정 기능만 업데이트하려 해도 전체 애플리케이션을 재배포해야 하기 때문.
Docker는 한번 환경을 구현해 놓으면 그 이후가 매우 편리해 집니다.
Docker를 쓰지 말아야 할 특정한 이유가 없는 것이 아니라면
사용 해 보는 것을 추천합니다.