포스트

[이제와서 시작하는 Docker 마스터하기 - 기초편 #3] 첫 번째 컨테이너 실행하기

[이제와서 시작하는 Docker 마스터하기 - 기초편 #3] 첫 번째 컨테이너 실행하기

“이제와서 시작하는 Docker 마스터하기” Docker를 설치했으니 이제 실제로 컨테이너를 실행해볼 차례입니다. 이번 편에서는 Docker 컨테이너의 기본적인 사용법을 실습을 통해 알아보겠습니다.

Hello World 컨테이너 실행하기

가장 간단한 예제부터 시작해봅시다:

1
docker run hello-world

이 명령어를 실행하면 다음과 같은 프로세스가 진행됩니다:

flowchart TD
    A[docker run hello-world] --> B{로컬에 이미지 존재?}
    B -->|아니오| C[Docker Hub에서 다운로드]
    B -->|예| D[이미지로부터 컨테이너 생성]
    C --> D
    D --> E[컨테이너 실행]
    E --> F[Hello World 메시지 출력]
    F --> G[컨테이너 종료]

Ubuntu 컨테이너 실행하기

이번에는 좀 더 실용적인 Ubuntu 컨테이너를 실행해봅시다:

1
2
3
4
5
# Ubuntu 이미지 다운로드
docker pull ubuntu:latest

# Ubuntu 컨테이너 실행
docker run ubuntu:latest echo "Hello from Ubuntu"

대화형 모드로 실행하기

컨테이너 내부에서 직접 명령어를 실행하려면 -it 옵션을 사용합니다:

1
docker run -it ubuntu:latest /bin/bash
옵션 의미 설명
-i interactive 표준 입력(STDIN)을 열어둡니다
-t tty 가상 터미널(pseudo-TTY)을 할당합니다
-it 두 옵션 결합 대화형 터미널 세션을 생성합니다

이제 Ubuntu 컨테이너 내부에 들어왔습니다! 다음 명령어들을 실행해보세요:

1
2
3
4
5
# 컨테이너 내부에서
ls
pwd
whoami
cat /etc/os-release

컨테이너에서 나가려면 exit 명령어를 입력하거나 Ctrl + D를 누릅니다.

백그라운드에서 컨테이너 실행하기

웹 서버처럼 계속 실행되어야 하는 서비스는 -d 옵션으로 백그라운드에서 실행합니다:

1
2
# Nginx 웹 서버를 백그라운드에서 실행
docker run -d --name my-nginx -p 8080:80 nginx:latest

Docker Run 주요 옵션 (2025년 7월 기준)

옵션 설명 예시
-d, --detach 백그라운드에서 실행 docker run -d nginx
--name 컨테이너 이름 지정 docker run --name web nginx
-p, --publish 포트 매핑 -p 8080:80
-v, --volume 볼륨 마운트 -v /data:/app/data
-e, --env 환경 변수 설정 -e NODE_ENV=production
--rm 종료 시 자동 삭제 docker run --rm ubuntu
--network 네트워크 지정 --network my-net
--memory 메모리 제한 --memory 512m
--cpus CPU 제한 --cpus 0.5

브라우저에서 http://localhost:8080에 접속하면 Nginx 환영 페이지를 볼 수 있습니다.

컨테이너 관리하기

실행 중인 컨테이너 확인

1
2
3
4
5
# 실행 중인 컨테이너만 표시
docker ps

# 모든 컨테이너 표시 (중지된 것 포함)
docker ps -a
stateDiagram-v2
    [*] --> Created: docker create
    Created --> Running: docker start
    Running --> Paused: docker pause
    Paused --> Running: docker unpause
    Running --> Stopped: docker stop
    Stopped --> Running: docker start
    Running --> Stopped: docker kill
    Stopped --> Removed: docker rm
    Removed --> [*]

컨테이너 중지 및 시작

1
2
3
4
5
6
7
8
# 컨테이너 중지
docker stop my-nginx

# 컨테이너 시작
docker start my-nginx

# 컨테이너 재시작
docker restart my-nginx

컨테이너 삭제

1
2
3
4
5
# 중지된 컨테이너 삭제
docker rm my-nginx

# 실행 중인 컨테이너 강제 삭제
docker rm -f my-nginx

컨테이너 내부 살펴보기

실행 중인 컨테이너에 접속

1
2
3
4
5
# 새로운 Nginx 컨테이너 실행
docker run -d --name web-server nginx:latest

# 실행 중인 컨테이너에 접속
docker exec -it web-server /bin/bash

컨테이너 내부에서 파일을 확인하거나 수정할 수 있습니다:

1
2
3
4
5
# Nginx 설정 파일 확인
cat /etc/nginx/nginx.conf

# 웹 루트 디렉토리 확인
ls /usr/share/nginx/html/

컨테이너 로그 확인

1
2
3
4
5
6
7
8
# 컨테이너 로그 보기
docker logs web-server

# 실시간으로 로그 보기
docker logs -f web-server

# 마지막 10줄만 보기
docker logs --tail 10 web-server

컨테이너 상세 정보 확인

1
2
3
4
5
# 컨테이너 상세 정보
docker inspect web-server

# 특정 정보만 추출
docker inspect -f '{{.NetworkSettings.IPAddress}}' web-server

파일 복사하기

호스트와 컨테이너 간에 파일을 복사할 수 있습니다:

1
2
3
4
5
6
# 호스트에서 컨테이너로 복사
echo "Hello Docker" > hello.txt
docker cp hello.txt web-server:/tmp/

# 컨테이너에서 호스트로 복사
docker cp web-server:/etc/nginx/nginx.conf ./nginx.conf

컨테이너 리소스 모니터링

1
2
3
4
5
# 컨테이너 리소스 사용량 확인
docker stats

# 특정 컨테이너만 모니터링
docker stats web-server

Docker Stats 출력 필드 설명

필드 설명 예시 값
CONTAINER ID 컨테이너 ID a1b2c3d4
NAME 컨테이너 이름 web-server
CPU % CPU 사용률 0.15%
MEM USAGE / LIMIT 메모리 사용량/제한 64MiB / 1.952GiB
MEM % 메모리 사용률 3.28%
NET I/O 네트워크 I/O 1.2kB / 0B
BLOCK I/O 디스크 I/O 0B / 0B
PIDS 프로세스 수 2

실습: 간단한 웹 페이지 배포하기

이제 배운 내용을 활용해 간단한 웹 페이지를 배포해봅시다:

  1. HTML 파일 생성 ```bash cat > index.html « EOF <!DOCTYPE html>
My Docker Website

안녕하세요, Docker!

첫 번째 Docker 웹사이트입니다.

EOF

1
2
3
4
2. **Nginx 컨테이너 실행**
```bash
docker run -d --name my-website -p 8081:80 nginx:latest
  1. HTML 파일 복사
    1
    
    docker cp index.html my-website:/usr/share/nginx/html/
    
  2. 브라우저에서 확인 http://localhost:8081에 접속하면 방금 만든 웹 페이지를 볼 수 있습니다!

유용한 Docker 명령어 정리 (2025년 7월 최신)

컨테이너 생명주기 명령어

graph LR
    A[docker create] --> B[Created]
    B --> C[docker start]
    C --> D[Running]
    D --> E[docker stop]
    E --> F[Stopped]
    D --> G[docker pause]
    G --> H[Paused]
    H --> I[docker unpause]
    I --> D
    F --> J[docker rm]
    J --> K[Removed]
분류 명령어 설명 예시
생명주기 docker create 컨테이너 생성 docker create nginx
  docker start 컨테이너 시작 docker start my-nginx
  docker stop 컨테이너 중지 docker stop my-nginx
  docker restart 컨테이너 재시작 docker restart my-nginx
  docker pause 컨테이너 일시정지 docker pause my-nginx
  docker unpause 컨테이너 재개 docker unpause my-nginx
  docker rm 컨테이너 삭제 docker rm my-nginx
정보 확인 docker ps 컨테이너 목록 docker ps -a
  docker logs 컨테이너 로그 docker logs -f my-nginx
  docker inspect 상세 정보 docker inspect my-nginx
  docker stats 리소스 사용량 docker stats --no-stream
  docker top 프로세스 목록 docker top my-nginx
상호작용 docker exec 명령 실행 docker exec -it my-nginx bash
  docker attach 컨테이너 연결 docker attach my-nginx
  docker cp 파일 복사 docker cp file.txt my-nginx:/tmp/

정리하기

실습이 끝나면 생성한 컨테이너와 이미지를 정리합니다:

1
2
3
4
5
6
7
8
# 모든 컨테이너 중지
docker stop $(docker ps -aq)

# 모든 컨테이너 삭제
docker rm $(docker ps -aq)

# 사용하지 않는 이미지 삭제
docker image prune -a

Docker 최신 동향 (2025년 7월)

Docker Desktop 주요 기능 업데이트

기능 설명 버전
Docker Init Dockerfile 자동 생성 4.20+
Docker Scout 보안 취약점 스캔 4.17+
Docker Extensions IDE 통합 확장 4.8+
Resource Saver 자동 리소스 최적화 4.24+
Compose Watch 파일 변경 감지 및 자동 재시작 4.25+

마무리

첫 번째 Docker 컨테이너를 성공적으로 실행했습니다! 이번 편에서는 컨테이너의 기본적인 생명주기와 관리 방법을 배웠습니다. 다음 편에서는 Docker 이미지에 대해 더 자세히 알아보겠습니다.

다음 편 예고

  • Docker 이미지의 구조
  • 이미지 레이어 이해하기
  • 이미지 태그와 버전 관리
  • Docker Hub에서 이미지 찾기

Docker의 핵심인 이미지에 대해 깊이 있게 알아봅시다!

📚 Docker 마스터하기 시리즈

🐳 기초편 (입문자용 - 5편)

  1. Docker란 무엇인가?
  2. Docker 설치 및 환경 설정
  3. 첫 번째 컨테이너 실행하기 ← 현재 글
  4. Docker 이미지 이해하기
  5. Dockerfile 작성하기

💼 실전편 (중급자용 - 6편)

  1. Docker 네트워크 기초
  2. Docker 볼륨과 데이터 관리
  3. Docker Compose 입문
  4. 멀티 컨테이너 애플리케이션
  5. Docker Hub 활용하기
  6. Docker 보안 베스트 프랙티스

🚀 고급편 (전문가용 - 9편)

  1. Docker 로그와 모니터링
  2. Docker로 Node.js 애플리케이션 배포
  3. Docker로 Python 애플리케이션 배포
  4. Docker로 데이터베이스 운영
  5. Docker 이미지 최적화
  6. Docker와 CI/CD
  7. Docker Swarm 기초
  8. 문제 해결과 트러블슈팅
  9. Docker 생태계와 미래
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.