컨테이너화 기술을 활용해 애플리케이션을 효율적으로 개발, 배포, 실행할 수 있는 오픈소스 플랫폼입니다.
도커는 애플리케이션과 그 종속성을 하나의 컨테이너로 묶어 어디서나 일관되게 동작하도록 보장합니다.
Docker
도커는 애플리케이션, 라이브러리, 구성 파일 등을 컨테이너라는 독립된 단위로 패키징합니다. 이러한 컨테이너는 실행 환경의 차이에 영향을 받지 않으며, 물리 서버, 가상 머신, 클라우드 등 다양한 환경에서 일관된 성능을 제공합니다.
도커는 매우 가볍기 때문에, 하나의 서버나 가상 머신이 여러 컨테이너들을 동시에 구동할 수 있습니다.
주요 장점
- 이식성 (Portability)
- 컨테이너에 애플리케이션과 종속성을 포함하기 때문에 "개발 환경에서는 잘 되던데..."라는 문제를 방지할 수 있습니다.
- 빠른 배포 및 복제
- 컨테이너는 가볍고 빠르게 시작됩니다. 또한 도커 이미지를 기반으로 여러 컨테이너를 쉽게 복제할 수 있어 CI/CD 파이프라인 구축에 적합합니다.
- 효율적인 리소스 사용
- 도커는 가상 머신보다 더 적은 리소스를 소비합니다. 가상 머신은 전체 운영체제를 포함하지만 도커는 호스트 OS의 커널을 공유하기 때문입니다.
- 모듈화 (Modularity)
- 도커를 사용하면 애플리케이션의 각 구성 요소(예: 데이터베이스, 백엔드, 프론트엔드)를 별도의 컨테이너로 분리할 수 있습니다. 이를 통해 유지보수와 확장이 용이해집니다.
- 커뮤니티와 생태계
- Docker Hub와 같은 플랫폼에서는 수천 개의 미리 만들어진 이미지를 제공합니다. 이를 활용하면 빠르게 시작할 수 있으며, 커뮤니티의 방대한 지원을 받을 수 있습니다.
단점
- 학습 곡선
- 도커를 처음 사용하는 개발자는 컨테이너의 개념, 이미지 생성, 네트워킹 등을 배우는 데 시간이 필요합니다. 특히 복잡한 환경에서는 이를 제대로 관리하는 데 추가적인 학습이 요구됩니다.
- 복잡성 증가
- 다수의 컨테이너를 운영하거나 오케스트레이션 도구(Kubernetes 등)를 사용할 경우 설정 및 유지보수의 복잡성이 증가할 수 있습니다.
- 성능 제한
- 컨테이너는 경량화되어 있지만, 가상 머신과 달리 호스트 커널을 공유하므로 리소스 집약적인 애플리케이션에서 성능 문제가 발생할 수 있습니다.
- 보안 문제
- 컨테이너가 호스트 운영체제와 커널을 공유하므로 보안 취약점이 발생할 경우 호스트 전체가 위험에 처할 수 있습니다. 따라서 보안 관리를 철저히 해야 합니다.
- 스토리지 관리
- 컨테이너를 자주 생성하고 삭제하는 환경에서는 이미지와 레이어가 많이 쌓여 디스크 공간 부족 문제가 발생할 수 있습니다.
사용 사례
- 마이크로서비스 아키텍처
- 도커는 각 서비스를 독립적으로 배포 및 확장할 수 있어 마이크로서비스를 구축하기에 적합합니다.
- CI/CD 파이프라인
- 도커를 사용해 일관된 빌드 환경을 제공함으로써, 개발과 배포 간의 불일치를 줄일 수 있습니다.
- 테스트 환경 구축
- 다양한 운영체제나 구성 요소에서 애플리케이션을 테스트하는 환경을 빠르게 생성할 수 있습니다.
컨테이너를 실행하는 명령
docker run
: 컨테이너를 실행하는 명령어docker exec
: 특정 컨테이너 환경에서 명령어를 실행하거나, 컨테이너의 내부 환경에 대해서 알아보거나 디버깅 가능docker ps
: 실행 중인 컨테이너 확인
Docker 이미지
- 어떤 애플리케이션에 대하여, 코드 뿐만 아니라 dependent한 모든 것을 함께 패키징한 데이터
- 즉, dependency 등을 모두 하나의 이미지로 패키징한 데이터라는 의미라고 생각됩니다.
- Dockerfile : 도커 이미지를 쉽게 만들 수 있도록 제공하는 템플릿
'Study😜' 카테고리의 다른 글
package.json으로 협업하기! (0) | 2023.06.22 |
---|---|
jenkins 설치 및 실행 가이드 (0) | 2023.06.07 |
OOP ( Object-Oriented Programming ) (0) | 2022.07.26 |
CI/CD (0) | 2022.07.24 |
Priority Queue( 우선순위 큐 ) (0) | 2022.07.18 |