소리소문 없이... 사랑도 명예도 이름도 남김 없이...
DexCore.net

Docker

[Docker] 도커 개념 설명 | 도커는 왜 사용하는 걸까?

탑~! 2025. 2. 19. 10:13

(1) 설명

도커(Docker)는 컨테이너 기반의 오픈 소스 가상화 플랫폼으로, 가상적인 환경에서 애플리케이션을 실행시키기 위해 리눅스 커널의 '컨테이너' 기능을 활용하는 방식입니다.

도커는 운영체제나 애플리케이션을 가상화된 하드웨어 안에서 실행시키는 대신, 컨테이너로 애플리케이션을 실행합니다. 이러한 컨테이너는 다른 프로세스나 컨테이너로부터 분리되어 독립적으로 동작하므로 애플리케이션과 관련 없는 작업을 처리하지 않아 자원의 낭비가 적습니다.

도커의 가장 중요한 개념은 "컨테이너"입니다. 컨테이너는 격리된 환경에서 프로세스를 실행하기 위한 경량화된 가상화 단위로 애플리케이션과 그에 필요한 모든 종속성(라이브러리, 실행 파일 등)을 컨테이너에 패키징 하여 동일한 환경에서 실행할 수 있게 합니다. 이러한 컨테이너는 호스트 시스템과 격리되어 독립적으로 실행되며, 다른 컨테이너와는 서로 영향을 주지 않고 상호작용할 수 있습니다.

(2) 장점

  • 환경 일치성 : 다양한 환경에서 동일한 실행 환경을 보장합니다. 개발 환경과 운영 환경의 차이로 인한 문제를 방지하며, 응용 프로그램을 어디서든 실행할 수 있습니다.
  • 편리한 배포 : 도커 컨테이너는 이미지로 패키징 되어 배포되므로, 애플리케이션 배포가 간단해집니다. 이미지를 공유하거나 배포할 때 용이하며, 빠른 확장이 가능합니다.
  • 격리된 환경 : 도커는 각 컨테이너를 격리된 환경으로 실행하므로, 하나의 컨테이너에서 발생한 문제가 다른 컨테이너에 영향을 주지 않습니다.
  • 자원 효율성 : 가상 머신과 비교해 더 가볍고 빠르며, 호스트 시스템의 리소스를 효율적으로 활용할 수 있습니다.
  • 스케일링 : 컨테이너 기반 아키텍처는 쉬운 스케일링이 가능하여 요구에 따라 응용 프로그램을 확장할 수 있습니다.

(3) 단점

  • 복잡성 : 도커는 초기 학습 곡선이 있을 수 있으며, 컨테이너, 이미지, 네트워크 등의 개념과 도커 자체의 명령어와 설정에 익숙해지는 시간이 필요합니다.
  • 가상화 오버헤드 : 도커는 호스트 시스템의 리소스를 공유하여 가상화를 구현합니다. 이는 일부 오버헤드를 초래할 수 있으며, 가상화가 필요 없는 경우에도 약간의 성능 저하가 발생할 수 있습니다.
  • 보안 취약성 : 도커는 격리 기능을 제공하지만, 완전한 보안을 보장하지는 않습니다. 컨테이너 간의 공격 가능성이 있으며, 적절한 보안 조치를 적용해야 합니다.
  • 영속적인 데이터 관리 : 도커는 컨테이너를 재시작하면 컨테이너 내부의 데이터가 손실될 수 있습니다. 영속적인 데이터 저장을 위해 별도의 볼륨이나 데이터베이스 서비스가 필요할 수 있습니다.
  • 호환성 문제 : 도커는 리눅스 커널의 기능을 사용하므로, 일부 운영 체제에서는 호환성 문제가 발생할 수 있습니다. 특히, Windows나 macOS에서는 가상화 기술이 필요할 수 있습니다.

(4) 사용 예시

  • 웹 개발 : 도커를 사용하여 웹 애플리케이션을 개발하면, 개발 환경을 동일하게 설정하고 다른 팀원과의 협업을 용이하게 할 수 있습니다. 개발 중인 애플리케이션의 서버, 데이터베이스, 캐싱 시스템 등을 각각의 도커 컨테이너로 실행하면 환경 일치성을 유지하면서 작업할 수 있습니다.
  • 서버 개발 : 마이크로서비스 아키텍처에서는 각 서비스를 독립적인 도커 컨테이너로 구성하여 개발하고 배포할 수 있습니다. 각 서비스는 독립된 코드 베이스와 종속성을 가지며, 개별적으로 스케일링이 가능합니다.
  • AI 모델 개발 : AI 모델을 개발하고 배포할 때도 도커를 활용할 수 있다. 예를 들어, AI 모델을 실행하는 도커 컨테이너를 생성하고 배포할 수 있습니다. 이 컨테이너는 모델 추론을 수행하고, 필요한 라이브러리 및 종속성을 포함할 수 있습니다.

2. 가상머신(Virtual Machine)과 도커(Docker)의 차이

(1) 가상머신

  • 가상머신은 호스트 운영체제 위에 가상화된 하드웨어 계층을 생성하고, 각 가상머신은 독립된 운영체제, 커널, 드라이버 등을 가짐
  • 이로 인해 무겁고 높은 자원 소비가 필요
  • 운영체제의 부팅 과정이 필요하므로 시간이 오래 걸림
  • 독립된 운영체제를 가지므로 메모리, 디스크 공간 등 자원을 많이 소비

(2) Docker 컨테이너

  • Docker 컨테이너는 호스트 운영체제의 커널을 공유하며, 가볍게 격리된 환경을 생성
  • 가상 머신보다 더 가벼우며 효율적으로 실행
  • 이미지와 컨테이너 레이어를 사용하여 빠르게 생성되며, 실행 속도가 매우 빠름
  • 컨테이너는 호스트 운영체제의 커널을 공유하므로 가볍고 효율적으로 자원을 활용
가상 머신 (VM)
도커 (Docker)
구조
하드웨어 위에 호스트 OS와 게스트 OS로 구성
호스트 OS 위에서 동작하며 컨테이너화된 애플리케이션 실행
성능
하이퍼바이저로 인한 오버헤드로 약간의 성능 저하
컨테이너화로 인한 가벼운 성능 손실
시작 시간
VM을 시작하기 위해 시간이 필요
컨테이너는 몇 초 내에 시작 가능
자원 사용량
독립적인 자원을 사용하여 오버헤드 발생
호스트의 커널 및 자원을 공유하여 효율적인 자원 사용
확장성
가상 머신은 더 많은 하드웨어를 추가하여 확장 가능
도커는 컨테이너를 복제하여 수평으로 확장 가능
격리성
격리된 환경을 제공하여 보안을 강화
호스트와 컨테이너 간 격리가 상대적으로 약함
관리 용이성
VM은 완전한 운영 체제를 관리해야 함
도커는 이미지와 컨테이너를 사용하여 관리 용이

결론만 얘기하면 기존 가상머신은 무겁고 느리지만, 도커 컨테이너는 가볍고 빠르게 실행되며 호스트의 운영체제의 커널을 공유하는 방식으로 동작한다는 것입니다.

또한 컨테이너 기술은 애플리케이션 배포와 관리를 더 효율적으로 처리할 수 있는 방법을 제공합니다.

3. 도커(Docker)의 동작 방식

4. 도커(Docker)의 3대 구성 요소

(1) Dockerfile

  • 애플리케이션을 구동하기 위한 Dependency, 환경 변수, 스크립트 등을 포함할 수 있음.
  • 이미지 생성 방법을 정의하는 문서
  • DockerFile 명령어는 위에서 한 줄씩 차례대로 실행됨.

(2) Docker Image

  • Docker File을 이용해 Image를 만든다.
  • 컨테이너를 실행하기 위한 압축파일
  • 실행되고 있는 Application의 상태를 스냅샷으로 남긴다고 생각
  • 만들어진 Image는 불변의 상태

(3) Docker Container

Image를 이용해서 Application이 동작하는 Container를 만듭니다.

이렇게 생성된 각각의 Container는 개별적으로 동작하고 Image에 영향을 끼치지 않습니다.

5. 도커 이미지를 배포하는 과정

(1) 배포하는 과정

① 로컬 머신에서 Docker Image를 만든다.

② Container Registry에 만든 이미지 파일을 업로드

③ Server에서 Docker Image를 받아와서 그대로 실행(Server에서는 Docker가 설치되어 있어야 함)

(2) Container Registry 제공 업체

 

 

출처 : https://blog.naver.com/islove8587/223419662833

728x90
반응형

'Docker' 카테고리의 다른 글

[Docker] 윈도우에 Docker 설치(Home 포함)  (0) 2025.02.19
[Docker] 도커 아키텍처 및 흐름  (0) 2025.02.19
Docker Compose File  (0) 2025.02.18
도커 사용법  (1) 2025.02.18
Docker환경에서 MSSQL설치하기  (0) 2025.02.18