컨테이너 가상화 와 도커
컨테이너 가상화와 도커
📘가상화? (virtualization)
컴퓨팅 자원(리소스)의 추상화를 일컫는 광범위한 용어
물리적인 컴퓨팅 자원의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 자원과 상호 작용하는 방식으로부터 감추는 기술입니다. 즉, 컴퓨터 안에 또 다른, 가상의 컴퓨터가 존재하도록 하는 기술
■ 가상화 컴퓨텅의 장점
- 시스템 측면
- 시스템 이용률(utilization)의 향상
- 설정(configuration)의 구성과 복원이 용이
- 비즈니스 측면
- 자본 및 운영 비용 절감
- 다운타임 최소화 (또는 제거)
- 비즈니스 연속성 및 재해 복구 향상
- 데이터 센터 관리하는 절차와 비용 간소화
- 개발자 측면
- 개발한 소프트웨어의 배포, 테스트, 구성을 관리하는데에 실제 물리적 하드웨어(기기/기계)에 통일된 환경을 제공할 수 있음
- 소프트웨어 통합/인도 프로세스의 자동화에 적용하기 좋음
📘 컨테이너화 (Containerization)
응용 프로그램, 설정 (configuration) 파일, 라이브러리, 그리고 이들 사이의 의존성 관계를 한군데에 묶어서 관리하는 것을 의미합니다. (컨테이너 안에 넣어서 관리)
■ 컨테이너화를 하면 좋은 점
- 소프트웨어 개발 및 배포의 효율과 안정성을 향상시킴
- 하이퍼바이저(hypervisor)에 의한 가상 기계의 대체 및 보완 방식으로 각광받고 있음
- 시스템 의존성이 최소화되어 소프트웨어 시스템의 이식이 용이해짐
- 예측 가능하고 유연한 소프트웨어 실행환경을 제공하여 클라우드 컴퓨팅 인프라(AWS 등)에서 활용도가 높음
- 격리된 실행 환경의 구성이 가능
■ 컨테이너와 가상머신 비교
구분 | 컨테이너 | 가상머신 |
---|---|---|
일관성 있는 런타임 환경 | O | O |
애플리케이션 샌드박스화 | O | O |
디스크 용량 절감 | O | X |
낮은 오버헤드 | O | X |
도커 (Docker)
가장 널리 이용되고 있는 컨테이너 기반 가상화 플랫폼입니다.
리눅스, 윈도우, 맥 상에 실행되는 컨테이너 엔진을 제공합니다. 또한 AWS ,GCP, Azure 등의 클라우드 컴퓨팅 인프라와 결합하면 더욱 유연한 운영이 가능합니다.
docker container
에서는 리소스가 변경되면 레이어의 이미지만 배포함으로 시스템이 업데이트되는 구조로 이루어져 있습니다.
docker hub
는 컨테이너 이미지들에 대해 원격 저장, 유지관리, 공유, 권한 관리 등을 효율적으로 행할 수 있는 온라인 서비스를 제공합니다. 이를 통해 소프트웨어 개발/배포 프로세스의 효율성이 크게 향상됩니다.
- 도커 클라이언트: docker daemon에 접근
- 도커 호스트: docker daemon이 실행하고 있는 기계
- 도커 이미지: 실행 가능한 컨테이너를 만들기 위한 거푸집 (소프트웨어를 설치하기 위한 파일)
- 도커 컨테이너: 도커가 실행하는 격리된 환경과 그 내부 (소프트웨어가 설치되고 실행되는 파일)
📘도커 이미지
응용을 실행하는데 필요한 모든 파일들과 실행하는 방법을 한곳에 묶어 놓은 것을 의미합니다.
상태를 저장하지 않는 방식(stateless)을 사용하며 네트워크로 전송, 레지스트리에 저장, 이름 및 버전 지정 가능합니다.
계층화되어 있다는 특징을 가지고 있고, 어떤 이미지로부터 다른 이미지를 만드는 것이 가능합니다.
📘도커 컨테이너
이미지가 실행한 인스턴스입니다.
하나의 이미지로부터 여러개의 컨테이너를 만들어 동일한 응용을 여러개 실행할 수 있습니다. 이 때 각각 독립적으로 실행됩니다.
상태를 저장하는 방식(stateful)을 사용하며 컨테이너를 사용하며 상태를 변경할 수 있습니다. 하지만 컨테이너가 소멸(종료)하면 상태도 잊어버립니다.
📘도커 명령어
💡 이름이 주어진 이미지를 로컬에서 또는 레지스트리에서 가져다가 컨테이너를 만들어서 실행
1
docker run <이미지이름>
💡 현재 실행 중인 컨테이너들의 정보를 조회
-a
옵션을 사용하면 중단되어 있는 것까지 포함하여 조회
1
2
docker ps
docker ps -a
💡 로컬 컴퓨터에 가지고 있는 이미지들 정보를 조회
1
docker images
💡 현재 실행 중인 컨테이너의 실행을 중단
하지만 컨테이너가 없어지지는 않음
1
docker stop <컨테이너 이름 || 컨테이너 ID>
💡 컨테이너를 삭제
1
docker rm <컨테이너 이름 || 컨테이너 ID>
💡 컨테이너를 전체 삭제
1
docker container prune
💡 이미지를 삭제
사용 중인 이미지는 삭제 불가능
1
docker rmi <이미지 이름 || 이미지 ID>
💡 이미지를 전체 삭제
1
docker image prune -a
💡 원하는 이미지를 검색
1
docker search <이미지 이름 || 이미지 ID>
또는 docker hub 에서 직접 검색