Dandy Now!
  • 도커(Docker) 기본 명령어 실습: 컨테이너 생성 및 관리
    2025년 07월 14일 11시 29분 40초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    도커(Docker) 기본 명령어 실습: 컨테이너 생성 및 관리

    오늘은 도커를 사용하여 컨테이너를 생성하고 관리하는 기본적인 명령어들을 실습하고, 그 과정을 블로그 포스팅 형식으로 정리하고자 한다. 도커는 애플리케이션을 빠르고 안정적으로 배포할 수 있도록 지원하는 컨테이너화 플랫폼이다.

    1. Dockerfile 준비

    우선, 컨테이너 이미지를 빌드하기 위한 Dockerfile을 준비하였다. 이 Dockerfilenode 이미지를 기반으로 하며, 컨테이너가 시작될 때 500초 동안 시스템을 일시 정지하도록 설정되어 있다.

    # FROM openjdk:17-jdk
    FROM node
    
    ENTRYPOINT ["/bin/bash", "-c", "sleep 1000"] # 1000초 동안 시스템 일시 정지

    Dockerfile에서 ENTRYPOINT 명령어는 컨테이너가 시작될 때 항상 실행되는 명령어를 정의하는 역할을 한다. 여기서는 /bin/bash -c "sleep 1000" 명령어가 실행되어 컨테이너가 지정된 시간 동안 대기 상태에 머무르게 된다. Dockerfile에서 주석을 사용할 수 있다. 주석 처리된 FROM openjdk:17-jdk 부분은 이전에 Java 기반의 이미지를 사용해본 흔적을 보여준다. 현재는 node 이미지를 활용하고 있다.

    2. Docker 이미지 빌드

    이제 작성한 Dockerfile을 이용하여 도커 이미지를 빌드한다. docker build 명령어는 Dockerfile을 기반으로 이미지를 생성한다. -t 옵션은 이미지에 태그(이름)를 지정하는 데 사용된다.

    docker build -t my-node-server .

    위 명령어를 실행하면 다음과 같은 출력을 확인할 수 있다.

    [+] Building 20.8s (6/6) FINISHED                                                                                                                                      docker:desktop-linux
     => [internal] load build definition from Dockerfile                                                                                                                                   0.0s
     => => transferring dockerfile: 116B                                                                                                                                                   0.0s
     => [internal] load metadata for docker.io/library/node:latest                                                                                                                         2.4s
     => [auth] library/node:pull token for registry-1.docker.io                                                                                                                            0.0s
     => [internal] load .dockerignore                                                                                                                                                      0.0s
     => => transferring context: 2B                                                                                                                                                        0.0s
     => [1/1] FROM docker.io/library/node:latest@sha256:e7db48bc35ee8d2e8d1511dfe779d78076966bd101ab074ea2858da8d59efb7f                                                                  18.1s
     # ... (중략) ...
     => => naming to docker.io/library/my-node-server                                                                                                                                      0.0s

    my-node-server라는 이름의 이미지가 성공적으로 빌드되었음을 알 수 있다.

    3. Docker 컨테이너 실행

    빌드한 이미지를 사용하여 도커 컨테이너를 실행한다. docker run 명령어는 이미지를 기반으로 컨테이너를 생성하고 실행한다. -d 옵션은 컨테이너를 백그라운드에서 실행하도록 한다.

    docker run -d my-node-server

    명령어 실행 후 컨테이너 ID가 출력된다.

    d1b676062062d0174fee4454a6640a50d39f9df3c25629dcde6cd0cd777b590a

    이 ID는 실행된 컨테이너를 고유하게 식별하는 역할을 수행한다.

    4. 실행 중인 컨테이너 확인

    현재 실행 중인 도커 컨테이너 목록을 확인하려면 docker ps 명령어를 사용한다.

    docker ps

    출력 결과에서 방금 실행한 my-node-server 컨테이너가 Up 상태로 실행 중임을 확인할 수 있다.

    CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS         PORTS     NAMES
    d1b676062062   my-node-server    "/bin/bash -c 'sleep…"   5 seconds ago   Up 4 seconds             ecstatic_keldysh
    47dfe4cce037   my-jdk17-server   "/bin/bash -c 'sleep…"   3 minutes ago   Up 3 minutes             nervous_keller

    여기서 nervous_keller라는 이름의 my-jdk17-server 컨테이너도 보이는데, 이는 이전에 실습했던 Java 기반 컨테이너가 여전히 실행 중임을 나타낸다.

    5. 컨테이너 내부로 접속

    실행 중인 컨테이너 내부로 진입하여 명령어를 실행하려면 docker exec 명령어를 사용한다. -it 옵션은 대화형(interactive) 터미널을 할당하여 컨테이너 내부에서 직접 명령어를 입력할 수 있게 한다.

    docker exec -it d1 bash

    여기서 d1my-node-server 컨테이너의 일부 ID이다. 컨테이너 내부로 접속하면 프롬프트가 root@d1b676062062:/# 와 같이 변경된다.

    6. 컨테이너 내부에서 Node.js 버전 확인

    컨테이너 내부에서 Node.js가 제대로 설치되었는지 확인하기 위해 node --version 명령어를 실행한다.

    root@d1b676062062:/# node --version
    v24.4.0

    작업을 마친 후 exit를 입력하여 컨테이너 내부에서 벗어난다.

    root@d1b676062062:/# exit
    exit

    7. 컨테이너 상태 다시 확인

    컨테이너 내부에서 나온 후 다시 docker ps를 실행하여 컨테이너들이 여전히 실행 중인지 확인한다.

    docker ps
    CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS         PORTS     NAMES
    d1b676062062   my-node-server    "/bin/bash -c 'sleep…"   3 minutes ago   Up 3 minutes             ecstatic_keldysh
    47dfe4cce037   my-jdk17-server   "/bin/bash -c 'sleep…"   5 minutes ago   Up 5 minutes             nervous_keller

    여전히 두 컨테이너 모두 정상적으로 실행 중임을 확인할 수 있다.

    결론

    이번 실습을 통해 Dockerfile을 작성하고, 이를 이용해 도커 이미지를 빌드하며, 빌드된 이미지를 컨테이너로 실행하고, 최종적으로 실행 중인 컨테이너 내부로 접속하여 확인하는 과정까지 경험하였다. 이 과정은 도커를 활용한 애플리케이션 개발 및 배포의 가장 기본적인 단계라고 할 수 있다.


    728x90
    반응형
    댓글