docker — 컨테이너 빌드·운영
개발 / 컨테이너 / docker.html
💬 "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 -d | Compose 정의대로 백그라운드 기동 |
docker compose down | Compose로 띄운 컨테이너·네트워크 정리 |
필수 명령어 조합 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)는 포트 충돌과 방화벽 우회 문제가 생길 수 있어 필요한 경우에만 사용합니다.
실제 실행 화면
서버에서 컨테이너 목록과 점유 용량을 확인하는 가상 예시입니다(실제 실행 결과 아님).

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