도커

발행: (2026년 1월 31일 오후 02:37 GMT+9)
5 분 소요
원문: Dev.to

I’m happy to help translate the article, but I need the full text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have the text, I’ll translate it into Korean while preserving the original formatting, markdown, and technical terms.

Docker란 무엇인가

Docker 컨테이너는 Docker 이미지의 실행 중인 인스턴스입니다. 여기에는 애플리케이션, 라이브러리 및 런타임이 포함되며, 호스트 시스템으로부터 격리됩니다.

Docker를 사용하는 이유

  • Consistency – 노트북, CI, 그리고 프로덕션에서 동일한 환경을 제공합니다.
  • Portability – Docker 엔진이 실행되는 어디서든 이미지가 실행됩니다.
  • Efficiency – 컨테이너는 호스트 커널을 공유하여 빠르게 시작하고 VM보다 메모리를 적게 사용합니다.
  • Simplifies CI/CD & microservices – 작은 독립 서비스들을 쉽게 빌드, 배포 및 확장할 수 있습니다.

핵심 개념

  • Image – 불변 블루프린트(읽기 전용).
  • Container – 이미지의 실행 인스턴스(위에 쓰기 가능한 레이어).
  • Registry – 이미지 저장소(예: Docker Hub).
  • Dockerfile – 이미지 빌드 지시문이 포함된 텍스트 파일.
  • Volume / Bind mount – 컨테이너 외부에 데이터를 영구 보관하거나 공유하는 방법.
  • Network drivers – bridge(기본), host, none, overlay(멀티‑호스트용).
  • Layer caching – 빌드 시 변경되지 않은 레이어를 재사용하여 빌드 속도를 높임.

Minimal Dockerfile — 각 라인의 의미

FROM openjdk:17-jdk-slim      # base image with Java runtime
WORKDIR /app                  # set working directory inside the image
COPY . /app                   # copy files from host into the image
EXPOSE 8080                   # documents a port (does not publish it)
ENTRYPOINT ["java","-jar","app.jar"]  # executable used when container starts
  • FROM – 기본 이미지(베이스 이미지)를 지정합니다.
  • WORKDIR – 이후 명령들이 실행될 작업 디렉터리를 설정합니다.
  • COPY – 호스트에 있는 파일을 이미지 안으로 복사합니다.
  • EXPOSE – 컨테이너가 수신하는 포트를 선언합니다(문서화용이며 실제 포트를 공개하지는 않음).
  • ENTRYPOINT – 컨테이너가 시작될 때 실행되는 명령을 정의합니다.

팁: 이미지에 포함하고 싶지 않은 빌드 산출물을 제외하려면 .dockerignore 파일을 추가하세요.

필수 명령어 (정리된 치트시트)

일반 정보

docker --version            # show Docker client version
docker info                 # daemon summary (containers, images, storage driver)

이미지 빌드

docker build -t myapp:1.0 .                     # build image from Dockerfile in current dir
docker build --no-cache -t myapp:1.0 .          # rebuild without cache

실행 및 라이프사이클 (생성, 시작, 정지, 제거)

docker run --name web -d -p 8080:80 nginx:latest
# -d (detached), -p hostPort:containerPort, --name containerName

docker run -it --rm ubuntu bash
# -it interactive, --rm remove on exit
docker ps                     # list running containers
docker ps -a                  # list all containers (including stopped)
docker stop       # graceful stop
docker start      # start stopped container
docker restart    # restart
docker rm          # remove container

이미지

docker pull nginx:latest    # download image from registry

검사, 실행 및 로그

docker logs -f           # follow logs
docker exec -it  bash    # open a shell inside a running container
docker inspect           # detailed low‑level information

볼륨 및 마운트 (데이터 지속)

docker volume create myvol
docker run -v myvol:/data ...                # named volume
docker run -v /host/path:/data ...           # bind mount
docker volume ls
docker volume rm myvol
  • Named volumes (Docker에서 관리) 은 데이터베이스와 이식성에 가장 적합합니다.
  • Bind mounts 는 호스트 폴더를 컨테이너에 직접 매핑합니다 (개발에 유용).

네트워킹 (빠르게)

docker network ls
docker network create mynet
docker run --network mynet ...
docker network inspect mynet

정리 (디스크 공간 확보)

docker system df
docker image prune          # remove dangling images
docker container prune      # remove stopped containers
docker system prune -a      # remove unused images/containers/networks (use with care)

Compose (다중 컨테이너 앱)

docker compose up -d
docker compose down
docker compose ps
docker compose logs -f

모니터링 및 디버그

docker stats                   # live resource usage per container
Back to Blog

관련 글

더 보기 »

Node.js에서 첫 번째 gRPC API

Node.js에서 첫 번째 gRPC API를 위한 커버 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to...

나는 내 성공을 마음의 눈으로 볼 수 있다

성공의 착각 나는 그것을 명확히 볼 수 있다. 내 앱은 라이브이고, 버그‑프리이며, 사용자들은 열광하고 있다. 투자자들이 전화를 걸어온다. 내 GitHub repo에 별이 쏟아지고 있다.