DockerDocker 기초 · 1기초

Docker란? — 컨테이너와 가상화의 차이

Docker컨테이너가상화개발환경

"내 컴퓨터에서는 됩니다"

팀에서 가장 흔한 문제:

개발자 A: "제 Mac에서는 잘 돼요"
개발자 B: "제 Windows에서는 에러 나요"
서버: "배포하니까 또 다른 에러..."

Docker는 이 문제를 해결합니다. 어디서든 동일한 환경을 제공합니다.


가상머신 vs 컨테이너

flowchart TB
    subgraph VM["가상머신 (VM)"]
        HOST1["호스트 OS"]
        HYP["하이퍼바이저"]
        VM1["Guest OS 1\n앱 A"]
        VM2["Guest OS 2\n앱 B"]
        HOST1 --> HYP --> VM1 & VM2
    end

    subgraph CONTAINER["컨테이너"]
        HOST2["호스트 OS"]
        DOCKER["Docker Engine"]
        C1["컨테이너 A\n앱 A"]
        C2["컨테이너 B\n앱 B"]
        HOST2 --> DOCKER --> C1 & C2
    end
VM컨테이너
크기GB 단위MB 단위
시작 시간
OS게스트 OS 포함호스트 OS 공유
격리강함프로세스 수준

Docker 설치

# Mac: Docker Desktop 설치
# https://docs.docker.com/desktop/install/mac-install/

# 설치 확인
docker --version
# Docker version 26.0.0

docker info

첫 컨테이너 실행

# Hello World
docker run hello-world

# Ubuntu 컨테이너 실행
docker run -it ubuntu bash
# -i: 인터랙티브
# -t: 터미널 연결
# 컨테이너 안의 bash 실행됨

# 컨테이너 안에서
uname -a  # Linux ...
exit      # 컨테이너 종료

핵심 개념

flowchart LR
    DOCKERFILE["Dockerfile\n(설계도)"]
    IMAGE["이미지\n(읽기 전용)"]
    CONTAINER["컨테이너\n(실행 중인 인스턴스)"]

    DOCKERFILE -->|"docker build"| IMAGE
    IMAGE -->|"docker run"| CONTAINER
    CONTAINER -->|"docker commit"| IMAGE
  • 이미지 (Image): 컨테이너의 설계도. 읽기 전용.
  • 컨테이너 (Container): 이미지를 실행한 인스턴스. 추가 레이어 생성.
  • Dockerfile: 이미지를 만드는 스크립트.

기본 명령어

# 이미지 다운로드
docker pull nginx:latest
docker pull python:3.12-slim

# 이미지 목록
docker images

# 컨테이너 실행
docker run nginx                         # 포그라운드
docker run -d nginx                      # 백그라운드 (-d: detach)
docker run -d -p 8080:80 nginx          # 포트 연결
docker run -d --name my-nginx nginx      # 이름 지정

# 실행 중인 컨테이너
docker ps
# 모든 컨테이너 (종료된 것 포함)
docker ps -a

# 컨테이너 중지/시작/삭제
docker stop my-nginx
docker start my-nginx
docker rm my-nginx
docker rm -f my-nginx   # 실행 중이어도 강제 삭제

# 컨테이너 안에서 명령 실행
docker exec -it my-nginx bash

# 로그 확인
docker logs my-nginx
docker logs -f my-nginx   # 실시간 스트림

정리

개념설명
이미지컨테이너 실행을 위한 읽기 전용 패키지
컨테이너이미지의 실행 인스턴스
Dockerfile이미지 빌드 스크립트
Docker Hub공개 이미지 저장소

다음 편에서는 Dockerfile 작성 — 내 앱을 이미지로 만드는 방법을 배웁니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.