docker — 컨테이너 빌드·운영

개발 / 컨테이너 / docker.html

컨테이너원문등록 2026-10-18

💬 "docker 명령어"

docker는 프로그램과 실행에 필요한 라이브러리·설정을 이미지라는 읽기 전용 패키지로 만들어, 어디서든 동일한 모양으로 실행되는 컨테이너로 띄웁니다.

'내 컴퓨터에서는 되는데 서버에서는 안 돼'를 줄이는 대표 도구이며, 로그 수집기·DB·웹 서버 같은 부수 서비스도 컨테이너로 빠르게 띄울 수 있습니다.

  • 이미지: 실행 환경과 코드가 담긴 읽기 전용 틀
  • 컨테이너: 이미지를 실제로 띄운 실행 중인 인스턴스
  • Dockerfile: 이미지를 만드는 조리법(설치·복사·실행 명령)
  • Compose: 여러 컨테이너를 하나의 YAML로 함께 정의·기동

자주 쓰는 옵션

옵션설명
docker build -t <이름>:<태그> .현재 폴더의 Dockerfile로 이미지 빌드
docker ps / docker ps -a실행 중 컨테이너 / 모든 컨테이너 목록
docker logs -f <컨테이너>컨테이너 로그 실시간 따라보기
docker exec -it <컨테이너> sh실행 중 컨테이너 안에 들어가기
docker compose up -dCompose 정의대로 백그라운드 기동
docker compose downCompose로 띄운 컨테이너·네트워크 정리

필수 명령어 조합 3가지

  • docker build -t app:1.0 . && docker run -p 8080:80 app:1.0 — 빌드 후 로컬에서 바로 확인
  • docker compose up -d && docker compose logs -f — 서비스 묶음을 기동하고 로그 확인
  • docker images && docker system df — 남은 이미지와 점유 용량 점검

💬 "장애 알림 받았을 때 첫 대응 예시 만들어줘"

실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.

컨테이너로 웹 서버 확인

공식 이미지를 받아 80번 포트로 띄워 봅니다.

docker run --rm -d --name web -p 8080:80 nginx:alpine
docker ps

로그와 진입

응답이 오는지 로그를 보고 컨테이너 안으로 들어갑니다.

docker logs web
docker exec -it web sh

정리

확인이 끝면 컨테이너와 사용하지 않는 이미지를 정리합니다.

docker stop web
docker image prune -f

실무에서는 이렇게 씁니다

1. 로컬에서 서버 환경 재현

상황 — 서버 전용 라이브러리 때문에 로컬에서 테스트가 안 되는 상황.

docker run --rm -it -v "$PWD":/work -w /work ubuntu:24.04 bash

결과 — ubuntu:24.04 컨테이너 안에서 현재 폴더를 마운트한 채 명령을 실행할 수 있습니다.

포인트 — -v로 폴더를 연결하면 컨테이너를 지워도 파일은 그대로 남습니다.

2. DB를 컨테이너로 임시 기동

상황 — 테스트용 DB를 서버에 설치하지 않고 짧게 써야 하는 상황.

docker run --rm -d --name testdb -e MYSQL_ROOT_PASSWORD=dev mysql:8
docker logs -f testdb

결과 — compose 파일 없이도 환경 변수로 DB를 띄우고 로그로 준비 상태를 확인합니다.

포인트 — --rm은 컨테이너가 멈추면 자동 삭제되므로 임시 작업에 편리합니다.

3. 용량 폭발 정리

상황 — 빌드를 반복하다 보니 디스크가 커져 이미지를 정리해야 하는 상황.

docker system df
docker system prune -f

결과 — 중지된 컨테이너·쓰지 않는 네트워크·매달린 이미지가 정리됩니다.

포인트 — 서버에서는 prune 전에 아직 필요한 볼륨이 없는지 docker volume ls로 확인합니다.

주의할 점

  • 이미지 태그는 latest 대신 버전을 명시해 어떤 내용인지 알 수 있게 합니다.
  • 컨테이너에 비밀 값을 넣을 때는 환경 변수나 시크릿 파일로 전달하고 이미지에 굽지 않습니다.
  • host 네트워크(--network host)는 포트 충돌과 방화벽 우회 문제가 생길 수 있어 필요한 경우에만 사용합니다.

실제 실행 화면

서버에서 컨테이너 목록과 점유 용량을 확인하는 가상 예시입니다(실제 실행 결과 아님).

docker 컨테이너 목록과 시스템 용량 확인 예시

실제 운영 중인 서버

이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.