Docker 설치 세부 정보 확인 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자가 애플리케이션을 구축, 배포 및 관리하는 방식을 혁신한 강력한 컨테이너화 플랫폼입니다. 이 튜토리얼에서는 Docker 설치를 확인하고 올바르게 작동하는지 확인하는 방법을 배우게 됩니다. 또한 Docker 를 사용할 때 발생할 수 있는 일반적인 문제 해결 방법도 알아보겠습니다.

이 Lab 을 완료하면 Docker 설치 세부 정보를 확인하고 Docker 환경이 제대로 작동하는지 확인하는 방법에 대한 확실한 이해를 갖게 될 것입니다.

이 Lab 은 학습을 위해 인터넷 연결이 필요하므로 Pro 사용자만 VM 을 시작할 수 있습니다. 계정을 Pro 로 업그레이드하세요

Docker 버전 및 상태 확인

Docker 작업을 시작하기 전에 시스템에 Docker 가 제대로 설치되어 있고 올바르게 실행되고 있는지 확인하는 것이 중요합니다. 이 단계에서는 Docker 버전과 데몬 상태를 확인합니다.

Docker 버전 확인

먼저, 시스템에 설치된 Docker 버전을 확인해 보겠습니다. 터미널을 열고 다음 명령을 실행합니다.

docker --version
docker version

이 명령은 설치된 Docker 버전을 표시합니다. 다음과 유사한 출력을 볼 수 있습니다.

Docker version 20.10.21, build baeda1f

클라이언트 및 서버 구성 요소 모두를 포함한 보다 자세한 버전 정보를 보려면 다음을 사용하십시오.

docker version

이렇게 하면 Docker 클라이언트 및 서버 (데몬) 에 대한 포괄적인 버전 정보와 Docker 를 빌드하는 데 사용된 Go 버전과 같은 기타 세부 정보가 표시됩니다. 출력은 다음과 같습니다.

Client:
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.1
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:02:28 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.1
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

"docker: command not found" 오류가 표시되면 Docker 가 올바르게 설치되지 않았거나 PATH 에 없는 것입니다.

Docker 데몬 상태 확인

다음으로 Docker 데몬 (서비스) 이 실행 중인지 확인해 보겠습니다. Docker 데몬은 Docker 컨테이너를 관리하는 백그라운드 서비스입니다.

다음 명령을 실행합니다.

sudo systemctl status docker

Docker 서비스가 활성 상태로 실행 중임을 나타내는 출력을 볼 수 있습니다.

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-05-10 12:34:56 UTC; 2h 15min ago
   Main PID: 1234 (dockerd)
      Tasks: 8
     Memory: 38.5M
        CPU: 25.102s
     CGroup: /system.slice/docker.service
             └─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Docker 서비스가 실행 중이지 않은 경우 다음을 사용하여 시작할 수 있습니다.

sudo systemctl start docker

시스템이 부팅될 때 Docker 가 자동으로 시작되도록 하려면 다음을 활성화할 수 있습니다.

sudo systemctl enable docker

Docker 정보 확인

Docker 설치에 대한 포괄적인 개요를 보려면 docker info 명령을 사용하십시오.

docker info

이렇게 하면 다음을 포함하여 Docker 설치에 대한 자세한 정보가 표시됩니다.

  • 컨테이너 및 이미지 수
  • 스토리지 드라이버 (Storage driver)
  • Docker 루트 디렉토리
  • 런타임 정보 (Runtime information)
  • 네트워크 설정
  • 레지스트리 구성 (Registry configuration)

출력은 상당히 방대하지만 Docker 설정에 대한 귀중한 정보를 제공합니다.

테스트 컨테이너 실행

Docker 가 설치되어 실행 중임을 확인했으므로 간단한 컨테이너를 실행하여 테스트해 보겠습니다. 이 단계에서는 Docker 가 이미지를 다운로드하고 컨테이너를 올바르게 실행할 수 있는지 확인합니다.

Hello World 컨테이너

Docker 는 Docker 설치를 테스트하기 위해 특별히 설계된 간단한 "hello-world" 이미지를 제공합니다. 이 작은 컨테이너는 다음을 확인합니다.

  • Docker 클라이언트가 Docker 데몬에 연결할 수 있습니다.
  • Docker 데몬이 Docker Hub 에서 이미지를 가져올 수 있습니다.
  • Docker 가 컨테이너를 생성하고 실행할 수 있습니다.

다음 명령으로 이 테스트 컨테이너를 실행해 보겠습니다.

docker run hello-world

이 명령을 처음 실행하면 Docker 는 다음을 수행합니다.

  1. hello-world 이미지가 로컬에 있는지 확인합니다.
  2. 없는 경우 Docker Hub 에서 다운로드합니다.
  3. 이 이미지에서 컨테이너를 생성합니다.
  4. 메시지를 출력하고 종료하는 컨테이너를 시작합니다.

다음과 유사한 출력을 볼 수 있습니다.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

이 메시지는 Docker 설치가 올바르게 작동하고 있음을 확인합니다.

컨테이너 목록

hello-world 컨테이너를 실행한 후 시스템의 컨테이너 목록을 확인해 보겠습니다. 방금 실행한 컨테이너는 이미 종료되었지만, 모든 컨테이너 목록에서 확인할 수 있습니다.

중지된 컨테이너를 포함한 모든 컨테이너를 보려면 다음을 실행합니다.

docker ps -a

다음과 유사한 출력을 볼 수 있습니다.

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS   NAMES
b7c33e8f6cb8   hello-world   "/hello"   2 minutes ago   Exited (0) 2 minutes ago           romantic_galileo

-a 플래그는 중지된 컨테이너를 포함한 모든 컨테이너를 표시합니다. 이 플래그가 없으면 docker ps는 실행 중인 컨테이너만 표시합니다.

STATUS 열에 "Exited (0)"이 표시되어 컨테이너가 작업을 완료하고 상태 코드 0 (성공을 나타냄) 으로 종료되었음을 알 수 있습니다.

Docker 이미지 목록

hello-world 이미지가 로컬 머신에 다운로드되었습니다. 모든 Docker 이미지를 나열하여 이를 확인해 보겠습니다.

docker images

다음과 유사한 출력을 볼 수 있습니다.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

이는 hello-world 이미지가 시스템에 로컬로 저장되어 있음을 확인합니다.

기본 Docker 명령어 탐색

Docker 설치가 올바르게 작동하는지 확인했으므로 컨테이너와 이미지를 관리하는 데 도움이 되는 몇 가지 기본 Docker 명령어를 살펴보겠습니다.

대화형 컨테이너 실행

실행 후 즉시 종료되는 hello-world 컨테이너와 달리 대화형으로 컨테이너를 실행할 수 있습니다. Ubuntu 컨테이너를 실행하고 해당 셸과 상호 작용해 보겠습니다.

docker run -it ubuntu bash

이 명령어는 다음을 수행합니다.

  • -i는 STDIN 을 열린 상태로 유지합니다.
  • -t는 가상 TTY (터미널) 를 할당합니다.
  • ubuntu는 이미지 이름입니다.
  • bash는 컨테이너 내에서 실행할 명령어입니다.

컨테이너가 시작되면 컨테이너 내에서 bash 프롬프트가 표시됩니다.

root@3f4d92618a09:/#

프롬프트는 컨테이너에서 root 로 로그인했음을 보여줍니다. 영숫자 문자열은 컨테이너 ID 입니다.

컨테이너 내에서 몇 가지 Linux 명령어를 실행해 보십시오.

cat /etc/os-release

이렇게 하면 컨테이너에서 실행 중인 Ubuntu 버전에 대한 정보가 표시됩니다.

PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

탐색을 마치면 다음을 입력하여 컨테이너를 종료합니다.

exit

그러면 호스트 터미널로 돌아갑니다.

컨테이너 수명 주기 관리

컨테이너의 수명 주기를 관리하는 방법을 살펴보겠습니다. 먼저, 분리 모드 (detached mode) 로 컨테이너를 시작합니다.

docker run -d --name web nginx

이 명령어는 다음을 수행합니다.

  • -d는 분리 모드 (백그라운드) 로 컨테이너를 실행합니다.
  • --name web은 컨테이너에 "web" 이름을 할당합니다.
  • nginx는 사용할 이미지입니다.

화면에 긴 컨테이너 ID 가 표시됩니다.

이제 컨테이너가 실행 중인지 확인해 보겠습니다.

docker ps

nginx 컨테이너가 실행 중인 것을 볼 수 있습니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
7d3f8c1f8a3d   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp    web

컨테이너를 중지하려면:

docker stop web

중지되었는지 확인합니다.

docker ps

컨테이너가 더 이상 실행 중인 컨테이너 목록에 나타나지 않아야 합니다. 중지된 컨테이너를 포함한 모든 컨테이너를 보려면:

docker ps -a

중지된 상태의 nginx 및 hello-world 컨테이너를 모두 볼 수 있습니다.

컨테이너를 다시 시작하려면:

docker start web

더 이상 필요하지 않은 컨테이너를 제거하려면:

docker stop web
docker rm web

Docker 이미지 관리

Docker 이미지를 관리하는 방법을 살펴보겠습니다. 모든 이미지를 나열하려면:

docker images

hello-world 및 nginx 이미지가 최소한 표시되어야 합니다.

더 이상 필요하지 않은 이미지를 제거하려면:

docker rmi hello-world

컨테이너에서 사용 중인 이미지 (중지된 이미지 포함) 는 제거할 수 없습니다. 먼저 해당 컨테이너를 제거해야 합니다.

Docker 시스템 정보

Docker 가 사용하는 디스크 공간 (컨테이너, 이미지, 볼륨) 을 확인하려면:

docker system df

디스크 사용량 요약이 표시됩니다.

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         1         187.8MB   187.8MB (99%)
Containers      2         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

자세한 정보를 얻으려면:

docker system df -v

각 이미지와 컨테이너 및 해당 크기에 대한 세부 정보가 표시됩니다.

일반적인 Docker 문제 해결

Docker 환경이 제대로 설치되어 있더라도 일반적인 사용 중에 문제가 발생할 수 있습니다. 몇 가지 일반적인 Docker 문제와 해결책을 살펴보겠습니다.

문제: Docker 데몬이 실행되지 않음

이전 단계에서 Docker 서비스를 이미 시작한 경우 이 단계를 건너뛸 수 있습니다.

Docker 명령을 실행하려고 할 때 다음과 같은 오류가 발생하면:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

이는 Docker 데몬이 실행되지 않음을 의미합니다. 이 문제를 해결하려면:

  1. Docker 서비스의 상태를 확인합니다.
sudo systemctl status docker
  1. 실행 중이 아니면 시작합니다.
sudo systemctl start docker
  1. 서비스가 시작되지 않으면 오류 로그를 확인합니다.
sudo journalctl -u docker

이 문제와 해결 방법을 시뮬레이션해 보겠습니다.

## 먼저, 문제를 시뮬레이션하기 위해 Docker 서비스를 중지합니다.
sudo systemctl stop docker

## Docker 명령을 실행해 봅니다.
docker ps

## "Cannot connect" 오류가 표시됩니다.
## 이제 서비스를 다시 시작하여 문제를 해결합니다.
sudo systemctl start docker

## Docker가 다시 작동하는지 확인합니다.
docker ps

문제: 권한 거부

다음과 같은 오류가 표시되면:

Got permission denied while trying to connect to the Docker daemon socket

이는 일반적으로 사용자가 Docker 소켓에 액세스할 권한이 없음을 의미합니다. 해결책은 사용자를 docker 그룹에 추가하는 것입니다.

sudo usermod -aG docker $USER

이 명령을 실행한 후에는 일반적으로 변경 사항을 적용하기 위해 로그아웃했다가 다시 로그인해야 합니다. labex 사용자가 이미 적절한 권한을 가지고 있는 랩 환경에 있으므로 이 단계를 수행할 필요가 없습니다.

문제: 디스크 공간 문제

Docker 는 사용하지 않는 이미지, 컨테이너 및 볼륨으로 인해 시간이 지남에 따라 상당한 디스크 공간을 소비할 수 있습니다. 시스템의 디스크 공간이 부족한 경우:

  1. Docker 디스크 사용량을 확인합니다.
docker system df
  1. 사용하지 않는 리소스를 제거합니다.
## 중지된 모든 컨테이너를 제거합니다.
docker container prune

## 사용하지 않는 모든 이미지를 제거합니다.
docker image prune

## 사용하지 않는 모든 볼륨을 제거합니다.
docker volume prune

## 또는 한 번의 명령으로 사용하지 않는 모든 것을 제거합니다.
docker system prune

정리 명령을 시연해 보겠습니다.

## 즉시 종료될 컨테이너를 몇 개 만듭니다.
docker run hello-world
docker run ubuntu echo "This will exit immediately"

## 이제 중지된 컨테이너를 정리합니다.
docker container prune

작업을 확인하라는 메시지가 표시됩니다.

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

y를 입력하여 확인합니다. 제거된 컨테이너를 보여주는 출력이 표시됩니다.

문제: 컨테이너가 시작되지 않음

컨테이너가 시작되지 않으면 로그를 확인하여 조사할 수 있습니다.

## 먼저, 실패할 수 있는 컨테이너를 시작해 봅니다.
docker run --name failing-container ubuntu apt-get update

## 로그를 확인합니다.
docker logs failing-container

컨테이너가 실패한 이유를 나타내는 오류가 로그에 표시될 수 있습니다.

문제: 네트워크 문제

컨테이너가 서로 또는 외부 세계와 통신할 수 없는 경우:

  1. Docker 의 네트워크 구성을 확인합니다.
docker network ls
  1. 특정 네트워크를 검사합니다.
docker network inspect bridge
  1. 컨테이너 내에서 연결을 테스트합니다.
## 네트워킹으로 컨테이너를 시작합니다.
docker run -it ubuntu bash

## 컨테이너 내부에서 ping을 설치합니다.
apt-get update && apt-get install -y iputils-ping

## 웹사이트를 ping해 봅니다.
ping google.com

## 컨테이너를 종료합니다.
exit

Docker 로그 및 디버깅

일반적인 Docker 문제 해결을 위해 Docker 데몬 로그를 확인하는 것이 도움이 될 수 있습니다.

sudo journalctl -u docker

특정 컨테이너의 로그를 보려면:

docker logs <container_id>

실시간 로그 스트림을 얻을 수도 있습니다.

docker logs -f <container_id>

이러한 문제 해결 기술은 가장 일반적인 Docker 문제를 진단하고 해결하는 데 도움이 됩니다.

요약

이 랩에서는 Docker 설치를 확인하고 관리하기 위한 필수 기술을 배웠습니다.

  • Docker 버전 및 데몬 상태를 확인하여 올바른 설치를 확인합니다.
  • 테스트 컨테이너를 실행하여 Docker 기능을 확인합니다.
  • 기본 Docker 명령어를 사용하여 컨테이너 및 이미지를 관리합니다.
  • 컨테이너 수명 주기 관리를 탐색합니다.
  • 일반적인 Docker 문제를 해결합니다.

이러한 기술은 Docker 컨테이너 작업을 위한 견고한 기반을 제공합니다. 이제 Docker 환경이 올바르게 설정되었는지 자신 있게 확인하고 발생할 수 있는 모든 문제를 해결할 수 있습니다.

Docker 여정을 계속 진행하면서 이러한 기본 사항을 기반으로 컨테이너화된 애플리케이션을 효율적으로 생성, 배포 및 관리할 수 있습니다.