1 minute read

Docker 개요

Docker란?

Docker는 애플리케이션을 컨테이너(Container)라는 단위로 패키징해서 실행할 수 있게 도와주는 플랫폼이다.

“어디서나, 똑같이 실행되게 하자!”라는 철학을 가진 도구이다.

Docker의 사용 이유?

  • 이식성 : 어떤 OS, 어떤 환경에서도 동일하게 실행 가능하다.
  • 가볍고 빠름 : VM보다 훨씬 빠르고 자원도 적게 사용한다.
  • 의존성 관리 : 애플리케이션 실행에 필요한 모든 환경을 포함 가능하다.
  • 버전 관리 : Dockerfile로 어떤 버전의 OS/라이브러리를 쓰는지 기록이 가능하다.
  • 팀 협업에 최적 : “이 컨테이너 실행하면 됨”으로 협업 가능

Docker 핵심 개념

  • Image(이미지) : 컨테이너의 “설계도”
    • 실행 가능한 프로그램, 설정, 라이브러리 등이 포함된 패키지
  • Container(컨테이너) : 이미지를 실행한 인스턴스
    • 격리된 환경에서 프로그램이 동작
    • 이미지로부터 여러 개의 컨테이너 생성 가능
  • Dockerfile : 이미지를 만들기 위한 스크립트 파일
    • “이 이미지 안에 어떤 걸 설치하고 설정할지” 정의
  • Docker Hub : Docker 이미지 공유 저장소(Github 느낌)
    • **$ docker pull <이미지명>** 하면 docker hub에서 가져옴
  • Docker-compose : 여러 개의 컨테이너를 한 번에 정의하고 실행할 수 있는 도구(예: 웹서버 + DB 같이 실행)

Docker 내부 구조

Alt text

  • Docker Engine : 컨테이너를 실행시키는 시스템
  • 각가그이 컨테이너는 격리되어 있으나, 호스트 OS 커널 공유

Alt text

1. Client(클라이언트)

  • 사용자가 Docker 명령어를 입력하는 곳
  • 입력된 명령어들은 전부 Docker Daemon에 전달돼서 실제 작업이 수행됨

2. Docker Host

  • Docker가 설치된 머신(로컬 or 서버)
  • Docker Daemon : Docker의 핵심 엔진으로, 클라이언트의 명령어를 받아서 이미지 생성, 컨테이너 실행 등을 실제로 처리한다.
  • Images : 실행 가능한 소프트웨어 패키지(예: python, Redis, Alpine 등)
    • Docker Daemon이 Registry에서 pull하거나 build해서 여기에 저장
  • Containers : 이미지를 실행 중인 인스턴스로 만든 것
    • 독립된 환경에서 실행됨(리눅스 시스템 격리)

3. Registry(레지스트리)

  • Docker 이미지 저장소
  • 보통은 Docker hub를 의미하지만, 기업에서는 자체 Registry도 사용한다.
  • 그림에 있는 NGINX, Ubuntu, PostgreSQL 같은 이미지들이 여기에 저장돼 있다.
  • 구성 요소
    • images : 사용 가능한 기본 이미지들
    • Extensions : 확장 기능(예: jFrog Aritifactory)
    • Plugins: 모니터링, 네트워크, 보안 등을 위한 추가 기능(예: Grafana, VMware)

동작 흐름 예시

docker run python

1. $docker run -> 클라이언트에서 Docker Daemon에게 명령 전송

2. Daemon은 로컬에 python 이미지가 있는지 확인

3. 없으면 Registry에서 pull 해옴

4. 이미지로 컨테이너 생성 및 실행

5. 컨테이너는 Docker Host에서 실행되며, 사용자는 그 안에서 작업 가능

Docker 명령어

기본 명령어

Alt text

이미지 관련 명령어

Alt text

컨테이너 관련 명령어

Alt text

컨테이너/이미지 정리

Alt text

상태 확인 및 시스템 명령어

Alt text