Skip to content
Tools/Docker & Podman 실습

Docker & Podman 실습

Docker & Podman Lab

시뮬레이션 docker/podman CLI, Dockerfile 레이어 시각화, 컨테이너 생명주기 상태 머신, Docker vs Podman 비교로 컨테이너를 브라우저에서 직접 익혀보세요. 서버 없이 동작합니다.

코딩 실습관련 글 읽기

컨테이너를 브라우저에서 직접 손으로 배우는 도구입니다. 서버 없이 동작하며, CLI 시뮬레이터는 실제 컨테이너 런타임을 실행하지 않고 가상 상태로 동작을 흉내 냅니다.

컨테이너 CLI 시뮬레이터입니다. `docker help` 또는 `podman help` 를 입력해 시작하세요. (실제 런타임이 아니라 학습용 시뮬레이션입니다.)

⚠ 이 CLI는 시뮬레이션입니다 — 진짜 데몬/런타임이 없고, 아무것도 실제로 pull·실행되지 않습니다. 명령을 파싱해 가상 상태(이미지·컨테이너·볼륨·네트워크)를 바꾸고 실제 출력처럼 보여줍니다. docker와 podman 둘 다 입력할 수 있습니다.
런타임:
docker@container-lab
컨테이너 CLI 시뮬레이터입니다. `docker help` 또는 `podman help` 를 입력해 시작하세요. (실제 런타임이 아니라 학습용 시뮬레이션입니다.)
docker $

🎯 미션

  1. 1.

    이미지 목록 확인

    로컬에 있는 이미지를 나열해 보세요.

    힌트: docker images

  2. 2.

    이미지 받기

    redis 이미지를 받아 오세요(pull).

    힌트: docker pull redis

  3. 3.

    컨테이너 실행 + 포트 공개

    nginx를 백그라운드로 실행하고 호스트 8080 → 컨테이너 80 포트를 공개하세요.

    힌트: docker run -d -p 8080:80 --name web nginx

  4. 4.

    실행 중 컨테이너 보기

    지금 실행 중인 컨테이너를 확인하세요.

    힌트: docker ps

  5. 5.

    컨테이너 중지

    방금 만든 web 컨테이너를 멈추세요.

    힌트: docker stop web

🧪 실습 시나리오

컨테이너 한살이 (run → stop → rm)

목표: nginx 컨테이너를 실행하고 관찰한 뒤, 정지·삭제까지 생명주기 전체를 직접 밟아 봅니다.

  1. 1.docker run -d --name app nginx백그라운드로 시작되고 컨테이너 ID(12자리 16진수)가 출력됩니다.
  2. 2.docker psapp 이 STATUS "Up …" 으로 목록에 나타납니다.
  3. 3.docker exec app whoami실행 중인 컨테이너 안에서 명령이 실행되어 root 가 출력됩니다.
  4. 4.docker logs appnginx 시작 로그(start worker processes 등)가 보입니다.
  5. 5.docker stop app이름(app)이 출력되고, docker ps -a 에서 Exited (0) 상태로 남습니다.
  6. 6.docker rm app정지된 컨테이너가 삭제됩니다. docker ps -a 로 사라진 것을 확인하세요.

이미지 정리 (rmi 충돌 해결)

목표: 컨테이너가 남아 있으면 이미지를 지울 수 없다는 것을 실패 → 해결 순서로 체험합니다.

  1. 1.docker pull busyboxbusybox(4.3MB) 이미지를 받습니다.
  2. 2.docker run --name box busybox-d 없이 포그라운드 실행 → 곧바로 종료(Exited)되지만 컨테이너는 남습니다.
  3. 3.docker rmi busybox의도된 실패: box 컨테이너가 이미지를 참조 중이라 conflict 에러가 납니다.
  4. 4.docker rm box정지된 box 컨테이너를 먼저 삭제합니다.
  5. 5.docker rmi busybox이번엔 Untagged / Deleted 가 출력됩니다. docker images 로 확인하세요.

볼륨과 데이터 보존

목표: 명명된 볼륨을 만들어 postgres에 마운트하고, 컨테이너를 지워도 볼륨은 남는 것을 확인합니다.

  1. 1.docker volume create pgdata볼륨 이름(pgdata)이 그대로 출력됩니다.
  2. 2.docker run -d --name db -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=secret postgres-v 볼륨:경로 로 마운트하고 -e 로 환경변수를 넣어 백그라운드로 실행합니다.
  3. 3.docker logs db"database system is ready to accept connections" 로그가 보입니다.
  4. 4.docker stop db컨테이너를 정지합니다(이름 db 가 출력됩니다).
  5. 5.docker rm db컨테이너를 삭제합니다.
  6. 6.docker volume lspgdata 가 여전히 목록에 있습니다 — 데이터는 컨테이너보다 오래 삽니다.
  • 이미지(image)는 읽기 전용 템플릿, 컨테이너(container)는 그 이미지로 만든 실행 인스턴스입니다.
  • -d 는 백그라운드(detached), -p 호스트:컨테이너 는 포트 공개, --name 은 이름 지정입니다.
  • -e 는 환경변수, -v 는 볼륨/바인드 마운트로 데이터를 컨테이너 밖에 보존합니다.
  • stop 한 컨테이너는 사라지지 않습니다 — start 로 다시 켜거나 rm 으로 삭제합니다.

같은 흐름으로 이어지는 도구를 골라 두었습니다.