Docker 소개

Docker 기본 개념과 실습 가이드입니다. Docker Engine, image/container/volume/network, run/logs/exec/build, 운영 시 태그와 데이터 보존 기준을 정리했습니다.

Docker는 애플리케이션과 실행 환경을 이미지로 패키징하고, 컨테이너라는 격리된 프로세스로 실행하는 플랫폼입니다. VM처럼 OS 전체를 복제하는 방식이 아니라 호스트 커널을 공유하면서 프로세스, 파일시스템, 네트워크, 리소스를 격리합니다.

운영에서 Docker를 이해할 때는 “컨테이너가 가볍다”보다 image, container, volume, network, registry, daemon의 관계를 먼저 잡아야 합니다.

기본 구성

  • Docker Engine: 컨테이너를 빌드하고 실행하는 핵심 런타임입니다.
  • dockerd: 백그라운드에서 실행되는 Docker daemon입니다.
  • docker CLI: 사용자가 daemon에 명령을 전달하는 CLI입니다.
  • Image: 컨테이너 실행에 필요한 파일과 metadata 묶음입니다.
  • Container: image에서 생성된 실행 인스턴스입니다.
  • Volume: 컨테이너 삭제 후에도 보존할 데이터를 담는 저장소입니다.
  • Network: 컨테이너 간 통신과 외부 포트 노출을 관리합니다.

설치 확인

docker version
docker info
docker system df
docker context ls

Linux 서버에서는 Docker group 권한이 root 수준에 가깝습니다. 단순 편의를 위해 모든 사용자에게 docker 권한을 주지 말고, 운영 계정과 감사 기준을 정합니다.

컨테이너 실행

docker run --rm hello-world
docker run -d --name web -p 8080:80 nginx:1.27
docker ps
curl -I http://127.0.0.1:8080

-p 8080:80은 호스트 8080 포트를 컨테이너 80 포트로 연결합니다. 공인망 서버에서 포트를 열 때는 OS 방화벽, reverse proxy, TLS, 접근 제어까지 같이 봐야 합니다.

로그와 접속

docker logs --tail=100 web
docker logs -f web
docker exec -it web sh
docker inspect web

컨테이너 내부에서 수정한 파일은 이미지 재생성이나 컨테이너 교체 시 사라질 수 있습니다. 설정과 데이터는 Dockerfile, bind mount, volume, environment로 명시합니다.

이미지 빌드

cat > Dockerfile <<'EOF'
FROM nginx:1.27
COPY ./html/ /usr/share/nginx/html/
EOF

docker build -t sample-nginx:2026-06-23 .
docker images sample-nginx

운영 이미지는 태그를 명확히 하고, base image 업데이트 정책과 취약점 스캔 기준을 둡니다. latest만 사용하면 어느 시점의 이미지인지 추적하기 어렵습니다.

볼륨과 네트워크

docker volume create web-data
docker network create app-net
docker run -d --name web2 --network app-net -v web-data:/usr/share/nginx/html nginx:1.27
docker volume inspect web-data
docker network inspect app-net

DB나 업로드 파일처럼 보존해야 하는 데이터는 컨테이너 레이어에 두지 않습니다. volume 위치, 백업 범위, 복구 테스트를 명확히 해야 합니다.

정리와 점검

docker stop web web2
docker rm web web2
docker image prune
docker volume ls
docker system df

docker system prune -a --volumes는 이미지와 볼륨을 크게 삭제할 수 있으므로 운영 서버에서 습관적으로 실행하지 않습니다.

운영 기준

  • 컨테이너는 일회성 실행 단위로 보고, 상태 데이터는 volume/외부 저장소로 분리합니다.
  • 이미지 태그, Dockerfile, 빌드 로그를 배포 이력으로 남깁니다.
  • 호스트 포트 노출은 방화벽과 reverse proxy 정책을 같이 확인합니다.
  • secret은 이미지나 Git에 넣지 않고 runtime 환경 변수나 secret store로 주입합니다.

공식 문서

BGM EVER