Docker란?

2026. 6. 1. 10:02·Network

01 Docker 기초


CKA 공부를 시작하면서 기초적인 Docker에 대한 내용을 한번 정리 해보았습니다.

Docker 등장 배경 — Before Docker

개발(Dev) / 테스트(Test) / 운영(Prod) 환경이 각각 독립된 VM으로 운영되던 시절의 문제:

문제 내용

의존성 불일치 Dev는 Python 3.4, Prod는 Python 3.1 → 배포하면 깨짐
비효율적 자원 사용 VM마다 OS 따로 설치 → 스토리지 낭비, 라이선스 비용
복잡하고 오류 잦은 배포 팀마다 수동 설치, 포트/라이브러리 설정이 제각각
격리 부재 같은 VM에 앱 여러 개 → 포트 충돌, 라이브러리 충돌

"내 컴퓨터에서는 되는데요" — Docker 이전의 고질적 문제


Docker란?

컨테이너화(Containerization) 플랫폼 — 애플리케이션을 모든 의존성과 함께 패키징해 어디서든 동일하게 실행되도록 함.

배송 컨테이너 비유

배송 컨테이너 Docker

규격 표준화 Dockerfile로 구조 표준화
어디든 운반 가능 Docker Engine만 있으면 어디서든 실행
내용물 격리 컨테이너별 독립 환경
필요한 만큼 추가 컨테이너 수평 확장

Docker가 해결하는 것

  • 표준화: Dockerfile이라는 통일된 형식
  • 이식성: Docker Engine만 있으면 Mac, Linux, Windows 어디든 동일 동작
  • 격리: 컨테이너마다 독립 환경 → 충돌 없음
  • 효율: 컨테이너는 Host OS 커널 공유 → VM보다 가볍고 빠른 부팅

VM vs Docker 아키텍처

VM 구조                          Docker 구조
─────────────────────            ─────────────────────
물리 서버                         물리 서버
  └── Hypervisor                   └── Hypervisor (선택)
        ├── OS + App 1                   └── VM (Linux OS)
        ├── OS + App 2                         └── Docker Engine
        └── OS + App 3                               ├── Container 1
                                                     ├── Container 2
                                                     └── Container 3
  • VM: OS를 각각 설치 → 무겁고 느림
  • Docker: Host 커널 공유 → 가볍고 빠른 부팅
  • 실제로는 VM 위에 Docker Engine 설치해서 사용하는 게 일반적

핵심 개념 3가지

Docker Image

  • Dockerfile로 만들어진 빌드 결과물
  • 코드 + 모든 의존성(라이브러리, 설정 파일 등) 포함
  • 불변(Immutable) — 한번 만들면 내용이 변하지 않음
  • 생성 명령어: docker build

Docker Container

  • Image의 실행 인스턴스
  • Image = 설계도, Container = 실제로 돌아가는 것
  • 실행 명령어: docker run

Docker Registry

  • Image를 저장하고 배포하는 저장소
  • docker push로 업로드, docker pull로 다운로드

종류 예시

공개 Registry Docker Hub, Ubuntu 이미지 등
비공개 Registry AWS ECR, Azure ACR, JFrog Artifactory, Nexus

Docker Engine 구성

Docker CLI  →  REST API  →  Docker Daemon
 (대시보드)      (배선)        (엔진/두뇌)

구성요소 역할

Docker CLI 사용자가 명령을 입력하는 인터페이스 (docker build, docker run 등)
REST API CLI 명령을 Daemon이 이해하는 HTTP 형식으로 변환
Docker Daemon 실제로 이미지 빌드, 컨테이너 실행 등을 수행하는 핵심 프로세스

Docker 워크플로우

개발자
  1. 코드 작성 + Dockerfile 작성 (버전 관리 시스템에 저장)
  2. docker build → Docker Image 생성 (로컬 저장)
  3. docker push  → Docker Registry에 업로드
  4. docker run   → 로컬 VM에서 컨테이너 실행 (개발 검증)

DevOps 팀
  5. docker pull  → Registry에서 Image 다운로드
  6. docker run   → 테스트/운영 환경에서 동일하게 실행

Dev에서 동작하면 Test, Prod에서도 동일하게 동작 → "내 컴퓨터에서는 되는데요" 문제 해결


의존성(Dependency)이란?

애플리케이션이 실행되기 위해 필요한 모든 것:

  • Docker Engine (컨테이너 실행 환경)
  • 런타임 (Java 9, Python 3.4 등)
  • 라이브러리
  • 설정 파일 (DB 연결 정보 등)

→ Docker Image 안에 이 모든 것을 함께 패키징


Dockerfile 예시 (최소)


FROM ubuntu:latest       # 베이스 이미지 지정
CMD ["echo", "hello docker"]  # 컨테이너 실행 시 실행할 명령

 


현대 DevOps에서의 역할 분담

역할 주요 책임

Developer 코드 작성 + Dockerfile 작성 (99% 케이스)
DevOps Engineer Dockerfile 검토, Registry 관리, 배포 자동화 (CI/CD)

 

 

https://www.youtube.com/watch?v=r3QWVLeA5qM&list=PLmPit9IIdzwRjqD-l_sZBDdPlcSfKqpAt&index=2

 

'Network' 카테고리의 다른 글

AWS VPC 물리서버 기준 통신 원리  (0) 2026.06.01
진짜 공격인 줄 알았는데 우리가 만든 장애였다  (0) 2026.04.02
AWS SAA-CO3 합격 후기  (0) 2026.03.07
Terraform으로 EC2 관리하면서 겪은 AMI 필터링과 SSM 연결 이슈  (0) 2026.02.25
Kind 클러스터에서 SandboxChanged 에러 해결하기: systemd와 containerd의 갈등 해소  (1) 2026.01.20
'Network' 카테고리의 다른 글
  • AWS VPC 물리서버 기준 통신 원리
  • 진짜 공격인 줄 알았는데 우리가 만든 장애였다
  • AWS SAA-CO3 합격 후기
  • Terraform으로 EC2 관리하면서 겪은 AMI 필터링과 SSM 연결 이슈
Ry-
Ry-
  • Ry-
    developer_Ryu
    Ry-
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • AI (14)
      • DB (3)
      • Book (6)
      • Development Environment (2)
        • Mac (2)
      • Frontend (8)
        • Flutter (6)
        • React (1)
        • React-Native (1)
      • Backend (19)
        • Spring (14)
        • Java (1)
        • Node.js (4)
      • Computer Science (27)
        • PS (20)
        • CS (7)
      • Network (12)
      • 이것저것 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      aop
      종만북
      오블완
      구글 로그인
      java
      Baekjoon
      몽고디비
      스프링
      spring
      백준
      최대 힙
      mongodb
      database
      BOGGLE
      redis
      티스토리챌린지
      flutter
      mysql
      Kakao
      chatgpt api
      node.js
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.6
    Ry-
    Docker란?
    상단으로

    티스토리툴바