1-2. Docker 설치 및 기본 사용법

1. Docker 소개 복습 및 설치 준비

Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있도록 돕는 플랫폼입니다. 컨테이너는 가볍고 이식성이 뛰어나며, 애플리케이션과 그 의존성을 묶어 어디에서든 동일하게 실행될 수 있도록 합니다. 이전 포스트에서 Docker의 기본적인 개념과 이점에 대해 다루었습니다. 이번 포스트에서는 Docker를 실제로 설치하고, 기본적인 사용법을 익혀 컨테이너를 생성하고 관리하는 방법을 알아보겠습니다.

1) Docker 설치 전 확인 사항

Docker를 설치하기 전에 몇 가지 준비 사항을 확인해야 합니다.

  • 운영체제: Docker는 Linux, macOS, Windows에서 모두 지원됩니다. 각 운영체제에 맞는 설치 가이드를 따라야 합니다.
  • 시스템 요구사항: Docker를 실행하기 위한 최소 시스템 요구사항을 충족해야 합니다. 특히, 메모리와 디스크 공간이 충분한지 확인하는 것이 중요합니다.
  • 가상화 지원: Docker는 가상화 기술을 기반으로 작동하므로, 시스템에서 가상화가 활성화되어 있는지 확인해야 합니다.

    • Linux: 대부분의 Linux 배포판은 가상화를 지원하며, Docker 설치 시 자동으로 설정됩니다.
    • macOS: Docker Desktop for Mac을 사용하면 가상화 환경을 자동으로 구성해줍니다.
    • Windows: Docker Desktop for Windows를 사용하려면 Hyper-V가 활성화되어 있어야 합니다.

2. Docker 설치

운영체제에 맞는 Docker 설치 방법은 공식 문서를 참조하는 것이 가장 정확합니다. 여기서는 각 운영체제별로 간단한 설치 절차를 안내하고, 설치 과정에서 발생할 수 있는 일반적인 문제에 대한 팁을 제공합니다.

1) Linux 설치

대부분의 Linux 배포판(Ubuntu, Debian, CentOS 등)은 Docker 설치를 지원합니다. 일반적으로, apt (Debian/Ubuntu) 또는 yum (CentOS/RHEL)과 같은 패키지 관리자를 사용하여 Docker를 설치합니다.

# Ubuntu/Debian
sudo apt update
sudo apt install docker.io

# CentOS/RHEL
sudo yum update
sudo yum install docker-ce

설치가 완료되면 Docker 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

sudo systemctl start docker
sudo systemctl enable docker

2) macOS 설치

macOS에서는 Docker Desktop for Mac을 사용하는 것이 권장됩니다. Docker Desktop은 Docker, Docker Compose, Kubernetes 등을 포함하는 통합 환경을 제공합니다.

  1. Docker Desktop for Mac을 다운로드하여 설치합니다.
  2. Docker Desktop을 실행합니다.
  3. Docker 아이콘이 메뉴 바에 나타나면 설치가 완료된 것입니다.

3) Windows 설치

Windows에서도 Docker Desktop for Windows를 사용하여 Docker를 설치합니다.

  1. Docker Desktop for Windows를 다운로드하여 설치합니다.
  2. Hyper-V가 활성화되어 있는지 확인합니다. (Docker Desktop 설치 시 자동으로 확인 및 활성화)
  3. Docker Desktop을 실행합니다.
  4. Docker 아이콘이 시스템 트레이에 나타나면 설치가 완료된 것입니다.

4) 설치 확인

Docker가 제대로 설치되었는지 확인하기 위해 다음 명령어를 실행합니다.

docker version

위 명령어를 실행했을 때 Docker 클라이언트와 서버의 버전 정보가 표시되면 정상적으로 설치된 것입니다.

3. Docker 기본 명령어

Docker를 설치했으니, 이제 기본적인 Docker 명령어를 사용하여 컨테이너를 생성, 실행, 관리하는 방법을 알아보겠습니다.

1) docker run: 컨테이너 실행

docker run 명령어는 Docker 컨테이너를 생성하고 실행합니다.

docker run [옵션] <이미지> [명령어] [인자]
  • <이미지>: 실행할 Docker 이미지의 이름입니다. Docker Hub에서 가져오거나 로컬에 있는 이미지를 사용할 수 있습니다.
  • [명령어]: 컨테이너 내에서 실행할 명령어입니다. 이미지가 정의한 기본 명령어를 재정의할 수 있습니다.
  • [인자]: 명령어에 전달할 인자입니다.
  • [옵션]: 다양한 옵션을 사용하여 컨테이너의 동작을 제어합니다.

예시: docker run hello-world

hello-world 이미지를 실행합니다. 이 이미지는 간단한 메시지를 출력하고 종료됩니다. 만약 해당 이미지가 로컬에 없다면, Docker Hub에서 자동으로 다운로드합니다.

2) docker pull: 이미지 다운로드

docker pull 명령어는 Docker Hub 또는 다른 레지스트리에서 이미지를 다운로드합니다.

docker pull <이미지>[:태그]
  • <이미지>: 다운로드할 이미지의 이름입니다.
  • [:태그]: 이미지의 태그를 지정합니다. 태그를 지정하지 않으면 latest 태그가 사용됩니다.

예시: docker pull ubuntu:latest

ubuntu 이미지의 latest 태그를 다운로드합니다.

3) docker ps: 컨테이너 목록 확인

docker ps 명령어는 실행 중인 컨테이너 목록을 표시합니다.

docker ps [옵션]
  • [옵션]:

    • -a 또는 --all: 중지된 컨테이너를 포함한 모든 컨테이너를 표시합니다.
    • -l 또는 --latest: 마지막으로 생성된 컨테이너만 표시합니다.

예시: docker ps

실행 중인 컨테이너 목록을 표시합니다.

4) docker stop: 컨테이너 중지

docker stop 명령어는 실행 중인 컨테이너를 중지합니다.

docker stop <컨테이너 ID 또는 이름>
  • <컨테이너 ID 또는 이름>: 중지할 컨테이너의 ID 또는 이름입니다. docker ps 명령어를 통해 컨테이너 ID 또는 이름을 확인할 수 있습니다.

예시: docker stop <컨테이너 ID>

지정된 컨테이너를 중지합니다.

5) docker rm: 컨테이너 삭제

docker rm 명령어는 중지된 컨테이너를 삭제합니다.

docker rm <컨테이너 ID 또는 이름>
  • <컨테이너 ID 또는 이름>: 삭제할 컨테이너의 ID 또는 이름입니다.

예시: docker rm <컨테이너 ID>

지정된 컨테이너를 삭제합니다.

4. 실습: 간단한 웹 서버 컨테이너 실행

Docker의 기본적인 명령어를 사용하여 간단한 웹 서버 컨테이너를 실행하는 실습을 진행해 보겠습니다.

1) Nginx 이미지 다운로드

먼저, Nginx 웹 서버 이미지를 Docker Hub에서 다운로드합니다.

docker pull nginx:latest

2) Nginx 컨테이너 실행

다음으로, docker run 명령어를 사용하여 Nginx 컨테이너를 실행합니다.

docker run -d -p 8080:80 --name my-nginx nginx:latest
  • -d: detached mode로 실행합니다. 즉, 컨테이너를 백그라운드에서 실행합니다.
  • -p 8080:80: 호스트의 8080 포트를 컨테이너의 80 포트에 매핑합니다. 이를 통해 웹 브라우저에서 http://localhost:8080으로 Nginx 웹 서버에 접속할 수 있습니다.
  • --name my-nginx: 컨테이너의 이름을 my-nginx로 지정합니다.

3) 컨테이너 확인

docker ps 명령어를 사용하여 컨테이너가 실행 중인지 확인합니다.

docker ps

실행 중인 컨테이너 목록에 my-nginx 컨테이너가 표시되어야 합니다.

4) 웹 브라우저에서 접속

웹 브라우저를 열고 http://localhost:8080에 접속하여 Nginx 웹 서버의 기본 페이지가 표시되는지 확인합니다.

5) 컨테이너 중지 및 삭제

실험이 끝나면, docker stopdocker rm 명령어를 사용하여 컨테이너를 중지하고 삭제합니다.

docker stop my-nginx
docker rm my-nginx

5. Docker 컨테이너의 내부 구조 이해

Docker 컨테이너는 격리된 환경에서 실행되므로, 호스트 시스템과 독립적인 파일 시스템과 네트워크를 가집니다.

Docker 컨테이너 아키텍처 설명 뒤

1) 네임스페이스 (Namespaces)

Docker는 네임스페이스를 사용하여 컨테이너를 격리합니다. 네임스페이스는 시스템 리소스를 격리하여 컨테이너가 서로 간섭하지 않도록 합니다.

  • pid 네임스페이스: 프로세스 ID를 격리합니다. 각 컨테이너는 자체적인 init 프로세스를 가집니다.
  • net 네임스페이스: 네트워크 인터페이스를 격리합니다. 각 컨테이너는 자체적인 네트워크 스택을 가집니다.
  • ipc 네임스페이스: 프로세스 간 통신(IPC)을 격리합니다.
  • mnt 네임스페이스: 마운트 지점을 격리합니다. 각 컨테이너는 자체적인 파일 시스템 뷰를 가집니다.
  • uts 네임스페이스: 호스트 이름과 도메인 이름을 격리합니다.

2) 컨트롤 그룹 (cgroups)

cgroups는 컨테이너가 사용할 수 있는 시스템 리소스를 제한합니다. 이를 통해 컨테이너가 호스트 시스템의 리소스를 과도하게 사용하지 않도록 제어할 수 있습니다.

  • CPU 할당: CPU 사용량 제한
  • 메모리 할당: 메모리 사용량 제한
  • I/O 제어: 디스크 I/O 사용량 제한

3) 유니온 파일 시스템 (Union Filesystems)

Docker는 유니온 파일 시스템을 사용하여 이미지와 컨테이너의 파일 시스템을 관리합니다. 유니온 파일 시스템은 여러 개의 레이어를 하나의 파일 시스템으로 통합하여, 이미지의 변경 사항을 효율적으로 관리하고 컨테이너의 쓰기 가능한 레이어를 제공합니다. 각 레이어는 이미지의 기본 파일 시스템과 변경 사항을 저장하는 쓰기 가능한 레이어로 구성됩니다.

6. Docker 명령어 심화

앞서 배운 기본적인 명령어 외에도, Docker를 효율적으로 사용하기 위해 알아두면 유용한 명령어들이 더 있습니다.

1) docker logs: 컨테이너 로그 확인

docker logs 명령어는 컨테이너의 로그를 확인합니다.

docker logs [옵션] <컨테이너 ID 또는 이름>
  • -f 또는 --follow: 로그를 실시간으로 추적합니다.
  • -t 또는 --timestamps: 로그에 타임스탬프를 표시합니다.

예시: docker logs -f my-nginx

my-nginx 컨테이너의 로그를 실시간으로 표시합니다.

2) docker inspect: 컨테이너 상세 정보 확인

docker inspect 명령어는 컨테이너의 상세 정보를 JSON 형식으로 표시합니다.

docker inspect <컨테이너 ID 또는 이름>

예시: docker inspect my-nginx

my-nginx 컨테이너의 상세 정보를 확인합니다.

3) docker exec: 컨테이너 내부 명령어 실행

docker exec 명령어는 실행 중인 컨테이너 내부에서 명령어를 실행합니다.

docker exec [옵션] <컨테이너 ID 또는 이름> <명령어> [인자]
  • -it: 대화형 터미널을 연결합니다.

예시: docker exec -it my-nginx bash

my-nginx 컨테이너 내부에서 bash 셸을 실행합니다.

7. Docker 활용 팁과 주의사항

1) 이미지 관리

  • 이미지 태깅: 이미지에 태그를 지정하여 버전을 관리하고, 특정 버전을 쉽게 사용할 수 있도록 합니다. (예: ubuntu:20.04, my-app:1.0)
  • 이미지 최적화: Dockerfile을 사용하여 이미지를 빌드할 때, 레이어 수를 최소화하고 캐싱을 활용하여 이미지 크기를 줄입니다.
  • 이미지 삭제: 사용하지 않는 이미지를 삭제하여 디스크 공간을 확보합니다. (예: docker rmi <이미지 ID>)

2) 컨테이너 관리

  • 컨테이너 이름: 컨테이너에 의미 있는 이름을 지정하여 관리의 편의성을 높입니다.
  • 볼륨 사용: 컨테이너와 호스트 간에 데이터를 공유하기 위해 볼륨을 사용합니다.
  • 포트 매핑: 호스트와 컨테이너 간에 포트를 매핑하여 컨테이너 내부의 서비스에 접근합니다.

3) 보안

  • 최소 권한: 컨테이너 내부에서 애플리케이션을 실행할 때, 최소한의 권한을 사용합니다.
  • 이미지 스캔: 이미지를 빌드하기 전에, 보안 취약점을 검사합니다.
  • 업데이트: Docker 엔진과 이미지를 최신 버전으로 유지합니다.

8. 마치며

이번 포스트에서는 Docker를 설치하고 기본적인 사용법을 익혔습니다. docker run, docker pull, docker ps, docker stop, docker rm과 같은 명령어를 사용하여 컨테이너를 생성, 실행, 관리하는 방법을 실습했습니다. 또한, Docker 컨테이너의 내부 구조와 활용 팁을 알아보았습니다.

Docker는 컨테이너 기술을 활용하여 애플리케이션 개발과 배포를 간소화하는 강력한 도구입니다. 앞으로 Dockerfile 작성, 컨테이너 네트워킹, 볼륨 관리 등 Docker의 더 많은 기능을 배우고, 실제 애플리케이션 배포에 활용할 수 있습니다.

비슷한 글 추천

Comments (0)

No comments yet. Be the first to comment!