[Docker] 도커와 컨테이너 알아보기

2025. 2. 16. 21:59·Technology Notes

오늘은 도커에 대해 알아보았다. ( 로고가 굉장히 큐트함 )

도커란?

‘컨테이너화’를 사용하여 응용 프로그램의 배포, 확장 및 관리를 자동화할 수 있는 오픈 소스 플랫폼

도커는 개발자들이 복잡한 개발 환경 세팅에서 벗어나 손쉽게 코드를 실행하고 배포할 수 있게 해주는 혁신적인 도구이다.

많은 개발자들이 사용하는 Dev Tool

 

도커와 컨테이너가 등장하기 전, 개발자들은 새로운 직장에 들어갈 때마다 개발 환경 세팅에 많은 시간을 소모했으며, 환경 업데이트 시 항상 문제 발생을 염려해야 했다. 코드를 서버에 배포하고 실행시키기 위해 개발자들은 다양한 에러와 문제를 겪었으며, 작업이 성공적으로 끝나길 기도하기도 했다. 그러나 도커와 컨테이너의 등장으로 개발 환경 설정과 관련된 이러한 복잡한 작업이 대폭 줄어들었다.

 

도커는 리눅스 기반의 OS 레벨 가상화 기술로, 코딩과 딥러닝 모델 실행의 기본 환경으로 자리잡고 있다. 비유를 통해, 서울에서 운영하던 치킨집의 레시피를 부산으로 보내는 예시를 들어, 환경 차이로 인한 문제를 설명한다.

 

https://youtu.be/e0koWWAmXSk?si=b1tq9dfJZ3EHp8iN

 

여러 자료를 살펴 보았는데 쉽게 이해가 될 만한 비유가 있어 소개하게 되었다. 여기서는 도커에서 컨테이너를 밀키트 라고 표현 했는데  코드를 밀키트 형태로 준비하여 다른 가게에서 간편하게 사용할 수 있도록 해야 한다. 도커를 사용하면, 각기 다른 컴퓨터에서 일관된 환경을 제공하여 코드 실행 시 발생할 수 있는 오류를 최소화할 수 있다. 도커는 OS, SDK, 필요한 프로그램과 라이브러리 등을 모두 포함한 코드 밀키트를 제작하고 손쉽게 실행할 수 있게 해주는 도구라고 하였다.

 

동영상에서 도커파일은 밀키트를 만들기 위해 필요한 파일로, 어떤 프로그램, 라이브러리, SDK를 설치할지, 그리고 코드를 어떻게 실행할지 명세할 수 있다.  사용자는 명령어 하나로 밀키트를 포장한 뒤, 클릭 한 번으로 이를 실행할 수 있다. 도커파일에서 설정된 개발 환경과 라이브러리를 기반으로 코드가 안전하게 실행되는 방식이 도커와 컨테이너의 핵심 사용법이라고 하였다.

 

한마디로 도커 = 밀키트 만드는 곳, 컨테이너 = 밀키트

VM과 Docker의 차이

VM(Virtual Machine)

  • VM은 각 운영 체제별로 독립된 커널을 가지고 독립적으로 작동하는 시스템입니다. 그러나 성능이 무겁고 오버헤드가 발생할 수 있습니다.

Docker

  • Docker는 호스트 운영 체제 위에서 실행되며, 컨테이너로 애플리케이션과 종속성을 패키징하여 실행됩니다. Docker는 호스트 커널을 공유하므로 가볍고 빠르게 실행됩니다

Docker 아키텍처 및 흐름

https://docs.docker.com/get-started/docker-overview/#docker-architecture

 

What is Docker?

Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.

docs.docker.com

 

 

Docker 아키텍처 

  • Docker 클라이언트: Docker 명령어를 사용하여 컨테이너를 실행하고 관리하는 도구입니다.
  • Docker 호스트: Docker 컨테이너를 실행하는 가상 머신으로, Docker 데몬을 통해 컨테이너 관리 및 실행을 담당합니다.
  • Docker 레지스트리: Docker 이미지를 저장하고 관리하는 중앙 저장소입니다. Docker Hub가 대표적인 레지스트리입니다.

 

Docker 흐름

  • Client → Docker Host: Docker 클라이언트가 Docker 명령어를 사용해 Docker 호스트에 요청을 보냅니다.
  • Docker Host: Docker 호스트는 클라이언트의 요청을 처리하고, 컨테이너를 생성, 실행, 중지 및 관리합니다.
  • Docker Host → Registry: Docker 호스트는 필요한 이미지를 레지스트리에서 다운로드하거나 업로드합니다.
  • Registry → Docker Host: Docker 호스트는 레지스트리에서 이미지를 다운로드하고, 해당 이미지를 바탕으로 컨테이너를 생성합니다.

 

Docker 주요 용어

  • Docker 클라이언트: Docker 명령어를 통해 Docker 호스트와 상호작용하며, 이미지를 관리하고 컨테이너를 실행합니다.
  • Docker 호스트: Docker 컨테이너를 실행하는 시스템으로, Docker 엔진이 설치된 머신입니다.
  • Docker 레지스트리: Docker 이미지를 저장하고 관리하는 중앙 저장소로, Docker Hub를 통해 이미지를 공유하고 검색할 수 있습니다.
  • Docker 데몬: Docker 클라이언트와 상호작용하여 컨테이너와 이미지를 관리하는 백그라운드 프로세스입니다.
  • Docker 이미지: 실행 가능한 애플리케이션 패키지로, 컨테이너를 생성하는 데 필요한 모든 파일과 설정이 포함된 템플릿입니다.
  • Docker 컨테이너: Docker 이미지의 실행 인스턴스로, 격리된 환경에서 실행됩니다.
  • Docker 허브: Docker의 공식 레지스트리로, 다양한 이미지를 공유하고 다운로드할 수 있는 플랫폼입니다.
  • Docker파일: Docker 이미지를 만들기 위한 명령어들을 정의하는 텍스트 파일입니다.

Docker hub

도커 컨테이너 이미지를 공유하고 관리하기 위한 클라우드 기반 레지스트리

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

도커 허브를 사용하면 컨테이너 이미지를 업로드, 다운로드 및 공유할 수 있다. 또한 도커 허브는 공식적인 이미지 저장소로서 다양한 언어, 프레임워크, 데이터베이스 등의 컨테이너 이미지를 제공한다. 그리고 도커 허브는 개인 및 조직용 계정을 제공하여 이미지를 관리하고 접근 권한을 제어할 수도 있다. 도커 허브는 도커 생태계에서 핵심적인 역할을 담당하며, 컨테이너 기반 애플리케이션 개발과 배포를 위한 필수 도구이다.

주의할 점

기본적으로 Docker는 리눅스 환경에서 실행됨 윈도우에서 도커를 실행하려면 Docker Desktop for Windows가 필요  

  • 리눅스에서 Docker: 리눅스에서는 '네임스페이스'와 'cgroups'라는 리눅스 기능을 사용하여 Docker의 주요 구성 요소인 컨테이너를 구현함
  • 윈도우에서 Docker 실행:
    • 윈도우에서는 Docker Desktop for Windows를 설치해야 Docker를 실행할 수 있습니다.
    • 윈도우에서 리눅스 기반의 Docker 컨테이너를 실행하려면 가상화를 사용해야 하며, 윈도우 10 이상에서는 WSL 2 (Windows Subsystem for Linux 2)를 통해 성능을 개선한 Docker Desktop을 제공함.
    • 가상화를 통해 컨테이너를 실행하는 것이 리눅스 환경에서 직접 실행하는 것보다 성능이 떨어질 수 있음

 

Windows Containers

윈도우에서만 작동하는 Windows Containers는 윈도우 기반 애플리케이션에 대한 컨테이너화를 지원함 하지만, Windows Containers는 리눅스와 호환되지 않으므로, 리눅스 환경에서 실행된 애플리케이션과는 서로 호환되지 않음

 

아래 포스트는 Windows 환경에서 도커를 사용하기 위한 방법을 정리한 글인데 참고하면 좋을 것 같아서 링크하였다.

https://day0404.tistory.com/14

 

Dev Day

스타트업에 도전하는 주니어 개발자의 개발 이야기

day0404.tistory.com

'Technology Notes' 카테고리의 다른 글

[Project] Qualcomm 루빅 파이(RUBIK Pi) 사용해보기  (3) 2025.03.05
[Project] Qualcomm Ai Hub 사용해보기  (3) 2025.03.03
[Framework] 딥러닝/머신러닝 프레임워크 알아보기  (0) 2025.02.14
[Project] 모바일 서버 구축을 준비해보자 2  (5) 2025.01.14
[Project] 모바일 서버 구축을 준비해보자 1  (4) 2025.01.14
'Technology Notes' 카테고리의 다른 글
  • [Project] Qualcomm 루빅 파이(RUBIK Pi) 사용해보기
  • [Project] Qualcomm Ai Hub 사용해보기
  • [Framework] 딥러닝/머신러닝 프레임워크 알아보기
  • [Project] 모바일 서버 구축을 준비해보자 2
임승택
임승택
"Hello, I am Lim Seungtaek, a computer engineering student. Nice to meet you!"
  • Lim's Technology
    임승택
    임승택
    "Welcome to Lim's Technology!"
  • 누적 조회수
    총 회
    구독하기
    • 분류 전체보기 (102)
      • Blog (10)
      • Computer Vision (44)
        • Computer Vision (4)
        • Paper reviews (24)
        • Project (8)
        • Basic (8)
      • LLM (8)
        • Paper reviews (3)
        • Project (3)
        • Basic (2)
      • Data Analysis (11)
        • Basic (8)
        • Project (3)
      • Computer Graphics (2)
        • Basic (2)
      • Robotics (5)
        • Paper reviews (3)
        • Basic (2)
      • Technology Notes (15)
      • Memo (5)
  • 인기 글

  • 최근 댓글

  • 최근 글

임승택
[Docker] 도커와 컨테이너 알아보기
상단으로

티스토리툴바