Docker (Comparing with Conda)
by DINHO
오늘은 Docker에 대해서 이야기해보도록 하겠습니다. 저는 기존에 Conda 가상환경을 사용헀었는데요, 비슷한 듯 다른 두 개념을 비교하면서 이야기해보겠습니다.
What is Docker?
Docker는 컨테이너 기술을 사용하여 애플리케이션을 격리된 환경에서 실행하고 배포할 수 있는 플랫폼입니다. 이를 통해 개발자와 운영자는 동일한 환경에서 애플리케이션을 실행할 수 있어서 한 번 빌드하고 어디서든 실행 이라는 철학을 실현할 수 있습니다.
What is Container
두괄식으로 요약하자면 컨테이너는 애플리케이션과 해당 애플리케이션을 실행하는 데 필요한 모든 것을 포함한 경량 가상 환경입니다.
먼저 가상머신(Virtual Machine, VM)을 알아야 하는데요. VM은 하나의 서버를 여러 서버로 바꾸는 물리적 하드웨어의 추상화입니다. 각 VM에는 운영체제, 애플리케이션, 필요한 바이너리 및 라이브러리의 전체 사본이 포함되어 수십 GB를 차지합니다. 하이퍼바이저를 사용하면 여러 VM이 단일 머신에서 실행될 수 있습니다.
컨테이너는 코드와 종속성을 함게 패키징하는 앱 계층의 추상화입니다. 여러 컨테이너가 동일한 머신에서 실행되고 다른 컨테이너와 OS 커늘을 공유하며, 각각은 사용자 공간에서 격리된 프로세스로 실행됩니다. 컨테이너는 VM보다 공간을 적게 차지하고 더 많은 애플리케이션을 처리합니다. 컨테이너 이미지는 일반적으로 수십 MB 크기입니다.
- 가상머신과 차이점: 컨테이너는 운영체제를 공유하므로 가상머신보다 가볍고 빠릅니다. 가상머신은 OS와 애플리케이션을 모두 포함하여 더 많은 자원을 소모합니다.

[그림 1] Container and VM
Docker의 주요 구성 요소
-
이미지
-
컨테이너를 실행하기 위한 템플릿입니다.
-
애플리케이션과 필요한 라이브러리를 포함합니다.
-
-
컨테이너
-
Docker 이미지를 기반으로 실행되는 독립적인 환경입니다.
-
각 컨테이너는 자체 파일 시스템, CPU, 메모리를 사용할 수 있지만 호스트와 격리됩니다.
-
-
Dockerfile
-
Docker 이미지를 빌드하는 데 사용되는 스크립트입니다.
-
Dockerfile에 명령을 작성하여 애플리케이션 환경을 구성할 수 있습니다.
FROM python:3.8 WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
-
-
Docker Hub
-
Docker 이미지를 공유하는 공식 저장소입니다.
-
사용자는 Docker Hub에서 이미지를 가져오거나, 자신만의 이미지를 업로드할 수 있습니다.
-
Docker의 주요 명령어
명령어 | 설명 |
---|---|
docker pull <이미지> |
Docker 이미지를 Docker Hub에서 다운로드 |
docker run <이미지> |
컨테이너를 생성하고 실행 |
docker ps |
실행 중인 컨테이너 목록 보기 |
docker ps -a |
종료된 컨테이너를 포함한 모든 컨테이너 보기 |
docker stop <컨테이너> |
컨테이너 중지 |
docker rm <컨테이너> |
컨테이너 삭제 |
docker images |
로컬에 저장된 이미지 목록 보기 |
docker rmi <이미지> |
Docker 이미지 삭제 |
Docker와 Conda 가상환경의 비교
Docker와 Conda 모두 격리된 환경을 제공하지만 사용 목적, 격리 수준, 구현 방식 에서 차이가 있습니다. 둘의 개념과 차이를 살펴보겠습니다.
-
기본 개념
특징 Conda Docker 목적 주로 Python 및 라이브러리 관리와 격리 애플리케이션 실행에 필요한 모든 것을 포함한 환경을 격리 구성 요소 Python 버전, 라이브러리, 패키지 애플리케이션, 운영 체제, 라이브러리 등 애플리케이션 실행에 필요한 모든 것 포함 격리 수준 같은 OS 내에서의 가상 환경 격리 OS 수준의 완벽한 격리 (컨테이너는 운영 체제를 포함함) -
설치 및 사용 방식
-
Conda :
-
Python과 관련된 라이브러리와 종속성을 같은 가상환경 내에 설치.
-
OS에 영향을 미치지 않지만, 같은 OS의 자원을 공유.
conda create -n myenv python=3.8 conda activate myenv
-
Docker :
-
특정 애플리케이션 환경을 독립된 컨테이너로 실행.
-
컨테이너 안에 애플리케이션 실행에 필요한 운영 체제, 라이브러리, 애플리케이션 코드 등을 포함.
docker pull python:3.8 docker run -it python:3.8
-
-
격리 수준
-
Conda :
-
격리 수준: 같은 OS 안에서 Python과 라이브러리만 격리.
-
영향 범위: OS와 직접적인 연결이 있으며, 라이브러리가 충돌하지 않도록 보장.
-
의존성 충돌 방지: 서로 다른 환경에 라이브러리를 설치해 충돌 방지.
-
Docker :
-
격리 수준: 컨테이너 내부에 독립된 운영 체제를 포함해 애플리케이션을 완전히 격리.
-
영향 범위: 호스트 OS와 완전히 독립적이며, 다른 컨테이너와도 영향을 미치지 않음.
-
완벽한 독립성: 컨테이너마다 다른 OS를 사용할 수도 있음.
-
-
패키지 및 환경 관리
-
Conda :
-
Python 중심: Python과 관련된 라이브러리 관리에 특화.
-
환경 구성: 환경 생성 시 Python 버전과 필요한 패키지를 명시적으로 설치.
-
공유: 환경 파일 (environment.yml)로 환경을 쉽게 재구성.
-
Docker :
-
언어 불문: Python뿐만 아니라, Node.js, Java, Ruby 등 모든 언어와 애플리케이션 환경을 지원.
-
환경 구성: Dockerfile에 필요한 OS, 패키지, 라이브러리, 애플리케이션 실행 방법을 정의.
-
공유: 이미지를 Docker Hub 같은 플랫폼에서 공유 가능.
-
-
운영 범위
-
Conda :
-
주로 로컬에서 사용:
-
데이터 과학, 머신러닝, Python 애플리케이션 개발.
-
같은 머신에서 여러 프로젝트를 관리하기에 적합.
-
-
Docker :
-
배포 및 운영 환경:
-
로컬뿐만 아니라 클라우드, 서버 환경에서 동일한 애플리케이션 실행 가능.
-
CI/CD(Continuous Integration/Deployment)와 결합해 배포 자동화 가능.
-
-
-
속도와 성능
-
Conda :
-
속도: 환경 생성이나 라이브러리 설치가 비교적 빠름.
-
자원 사용: 같은 OS와 자원을 공유하므로 가볍게 실행.
-
Docker :
-
속도: 이미지 실행 속도는 빠르지만, 이미지 빌드 및 다운로드는 느릴 수 있음.
-
자원 사용: 운영 체제 전체를 포함하므로 자원 사용량이 더 큼.
-
-
장단점 비교
특징 Conda Docker 장점 Python 중심, 설치와 사용이 간편 OS 수준의 완벽한 독립성, 다양한 언어와 환경 지원 단점 Python 외의 환경은 관리하기 어려움 이미지 크기가 큼, 설정 및 사용 학습 곡선이 있음 주요 사용 사례 데이터 과학, 머신러닝 프로젝트 애플리케이션 배포, 마이크로서비스 관리
결론
Conda는 Python 및 데이터 과학 작업에 최적화된 가상환경을 제공하고, Docker는 운영체제 수준의 격리와 배포 자동화에 강점을 지닙니다. 프로젝트의 목적과 범위에 따라 선택하거나, 두 기술을 조합해서 사용할 수도 있습니다. 예를 들어, Conda 가상환경을 Docker 컨테이너 안에 포함하여 배포하는 방법도 가능합니다!! 오늘 포스팅은 여기서 마무리하겠습니다. 감사합니다😎
Follow my github