본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 25. · 11 Views
Docker 소개 및 설치 완벽 가이드
Docker의 기본 개념부터 설치, 첫 컨테이너 실행까지 초급 개발자를 위해 쉽게 설명합니다. 가상머신과의 차이점, Docker 아키텍처를 이해하고 실제로 컨테이너를 띄워보는 실습까지 다룹니다.
목차
1. Docker란 무엇인가
김개발 씨는 입사 첫 주에 당황스러운 경험을 했습니다. 분명히 자신의 노트북에서는 완벽하게 돌아가던 웹 애플리케이션이, 서버에 배포하니 전혀 작동하지 않는 것이었습니다.
"제 컴퓨터에서는 됐는데요..." 이 말을 몇 번이나 반복했는지 모릅니다.
Docker는 한마디로 애플리케이션을 컨테이너라는 격리된 환경에 담아 실행하는 기술입니다. 마치 이사할 때 물건을 박스에 담아 옮기면 어디서든 똑같이 꺼내 쓸 수 있는 것처럼, Docker는 프로그램과 그 실행에 필요한 모든 것을 하나의 패키지로 묶어줍니다.
이것을 이해하면 "내 컴퓨터에서는 됐는데"라는 말을 더 이상 하지 않아도 됩니다.
다음 코드를 살펴봅시다.
# Docker가 하는 일을 간단히 표현하면
# 1. 애플리케이션 패키징
docker build -t my-app .
# 2. 어디서든 동일하게 실행
docker run my-app
# 3. 필요한 모든 의존성이 컨테이너 안에 포함됨
# - 운영체제 라이브러리
# - 런타임 환경 (Node.js, Python 등)
# - 애플리케이션 코드
# - 설정 파일
# 결과: 개발 환경 = 테스트 환경 = 운영 환경
김개발 씨는 입사 3개월 차 주니어 개발자입니다. 첫 번째 프로젝트를 맡아 열심히 개발을 마쳤고, 드디어 배포하는 날이 왔습니다.
그런데 서버에 올리자마자 에러가 쏟아졌습니다. Node.js 버전이 달랐고, 필요한 라이브러리도 설치되어 있지 않았습니다.
선배 개발자 박시니어 씨가 다가와 말했습니다. "Docker 써봤어요?
이런 문제를 깔끔하게 해결할 수 있어요." 그렇다면 Docker란 정확히 무엇일까요? 쉽게 비유하자면, Docker는 마치 이삿짐 컨테이너와 같습니다.
이사할 때 가구와 물건을 컨테이너에 넣으면, 어느 집으로 옮기든 그대로 꺼내 쓸 수 있습니다. 컨테이너 안의 물건 배치는 변하지 않습니다.
Docker도 마찬가지입니다. 프로그램과 그 프로그램이 필요로 하는 모든 것을 하나의 컨테이너에 담습니다.
Docker가 없던 시절에는 어땠을까요? 개발자가 만든 프로그램을 서버에 배포하려면, 서버 관리자에게 설치 문서를 전달해야 했습니다.
"Python 3.9를 설치하시고, pip로 이 라이브러리들을 설치하시고, 환경 변수를 이렇게 설정해주세요." 문서가 수십 페이지에 달하기도 했습니다. 그리고 한 글자라도 다르면 프로그램이 작동하지 않았습니다.
더 큰 문제는 환경의 차이였습니다. 개발자의 맥북과 운영 서버의 리눅스는 근본적으로 달랐습니다.
같은 리눅스여도 배포판이 다르면 라이브러리 경로가 달랐습니다. 이런 미묘한 차이가 수많은 버그를 만들어냈습니다.
바로 이런 문제를 해결하기 위해 Docker가 등장했습니다. Docker를 사용하면 **"한 번 만들면 어디서든 실행된다(Build once, run anywhere)"**가 가능해집니다.
개발자의 노트북에서 만든 Docker 이미지는 테스트 서버에서도, AWS 클라우드에서도, 동료의 컴퓨터에서도 똑같이 작동합니다. 환경 설정에 쏟던 시간을 개발에 집중할 수 있게 됩니다.
Docker의 핵심 개념을 정리해보겠습니다. **이미지(Image)**는 컨테이너를 만들기 위한 설계도입니다.
**컨테이너(Container)**는 이미지를 기반으로 실제 실행되는 인스턴스입니다. 하나의 이미지로 여러 개의 컨테이너를 만들 수 있습니다.
실제 현업에서는 어떻게 활용할까요? 예를 들어 마이크로서비스 아키텍처를 구축한다고 가정해봅시다.
사용자 서비스, 주문 서비스, 결제 서비스를 각각 다른 컨테이너로 분리하여 독립적으로 배포하고 확장할 수 있습니다. 넷플릭스, 우버, 에어비앤비 같은 글로벌 기업들이 이런 방식으로 Docker를 활용하고 있습니다.
다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다.
"그러니까 제 개발 환경을 통째로 패키징해서 서버에 올리면 되는 거군요!" Docker를 제대로 이해하면 배포 과정이 훨씬 간단해지고, 환경 문제로 인한 야근도 줄어듭니다. 이제 Docker의 세계로 함께 들어가 봅시다.
실전 팁
💡 - Docker는 리눅스 컨테이너 기술을 기반으로 하지만, Windows와 Mac에서도 Docker Desktop을 통해 사용할 수 있습니다
- 공식 Docker Hub에서 수많은 이미지를 무료로 다운로드하여 바로 사용할 수 있습니다
2. 가상머신 vs 컨테이너 비교
김개발 씨가 Docker를 공부하다가 의문이 생겼습니다. "잠깐, 이거 예전에 배웠던 가상머신이랑 뭐가 다른 거지?" 대학교 수업 시간에 VMware로 리눅스를 설치해본 기억이 났습니다.
그것도 윈도우 안에서 다른 운영체제를 실행하는 거였는데, 컨테이너와 무엇이 다른 걸까요?
**가상머신(VM)**은 하드웨어 전체를 가상화하여 완전한 운영체제를 실행하는 반면, 컨테이너는 운영체제의 커널을 공유하면서 애플리케이션만 격리합니다. 마치 가상머신이 건물 전체를 새로 짓는 것이라면, 컨테이너는 같은 건물 안에서 방만 나누는 것과 같습니다.
이 차이로 인해 컨테이너는 훨씬 가볍고 빠릅니다.
다음 코드를 살펴봅시다.
# 가상머신 구조 (개념적 표현)
# ┌─────────────────────────────────────┐
# │ Application │
# ├─────────────────────────────────────┤
# │ Guest OS (전체 OS) │ <- 수 GB
# ├─────────────────────────────────────┤
# │ Hypervisor │
# ├─────────────────────────────────────┤
# │ Host OS │
# └─────────────────────────────────────┘
# 컨테이너 구조 (개념적 표현)
# ┌─────────────────────────────────────┐
# │ Application │
# ├─────────────────────────────────────┤
# │ Container Runtime (Docker) │ <- 수십 MB
# ├─────────────────────────────────────┤
# │ Host OS │
# └─────────────────────────────────────┘
# 실제 크기 비교
# VM 이미지: 수 GB ~ 수십 GB
# Docker 이미지: 수십 MB ~ 수백 MB
박시니어 씨가 화이트보드 앞에 섰습니다. "둘의 차이를 아파트에 비유해서 설명해줄게요." 가상머신은 마치 땅을 사서 건물을 새로 짓는 것과 같습니다.
기초 공사부터 시작해서 배관, 전기, 인테리어까지 모든 것을 새로 만들어야 합니다. 당연히 시간과 비용이 많이 듭니다.
하지만 완전히 독립된 공간을 가질 수 있습니다. 컨테이너는 이미 지어진 아파트에서 방을 하나 빌리는 것과 같습니다.
건물의 기반 시설(전기, 수도, 가스)은 다른 세대와 공유하지만, 방 안에서는 완전히 독립적인 생활을 할 수 있습니다. 입주도 금방 끝납니다.
기술적으로 살펴보면, 가상머신은 **하이퍼바이저(Hypervisor)**라는 소프트웨어 위에서 완전한 운영체제를 실행합니다. Windows 안에서 Ubuntu를 돌린다면, Ubuntu의 커널, 시스템 프로세스, 드라이버가 모두 필요합니다.
당연히 무겁습니다. 반면 컨테이너는 호스트 운영체제의 커널을 공유합니다.
리눅스 위에서 Docker 컨테이너를 실행하면, 컨테이너 안의 프로세스는 호스트의 리눅스 커널을 그대로 사용합니다. 별도의 운영체제를 부팅할 필요가 없으니 당연히 가볍습니다.
숫자로 비교해보면 차이가 더 명확합니다. 가상머신 하나를 시작하는 데 보통 몇 분이 걸립니다.
반면 컨테이너는 몇 초, 때로는 1초도 안 걸립니다. 메모리 사용량도 가상머신은 GB 단위인 반면, 컨테이너는 MB 단위입니다.
그렇다면 가상머신은 쓸모없는 것일까요? 그렇지 않습니다.
보안이 극도로 중요한 환경에서는 가상머신의 완전한 격리가 필요합니다. 컨테이너는 커널을 공유하기 때문에, 이론적으로 커널 취약점을 통한 탈출이 가능합니다.
또한 Windows 컨테이너를 Linux에서 실행하거나 그 반대의 경우처럼, 완전히 다른 운영체제가 필요할 때도 가상머신이 필요합니다. 실무에서는 두 기술을 함께 사용하는 경우가 많습니다.
클라우드 서비스 제공업체는 가상머신으로 고객들을 격리하고, 그 가상머신 안에서 고객은 컨테이너로 자신의 서비스를 운영합니다. AWS EC2 위에서 Docker를 실행하는 것이 대표적인 예입니다.
김개발 씨가 고개를 끄덕였습니다. "결국 용도에 따라 선택하면 되는 거군요.
일반적인 애플리케이션 배포에는 컨테이너가 훨씬 효율적이고요." 박시니어 씨가 웃으며 대답했습니다. "정확해요.
요즘은 대부분의 서비스가 컨테이너로 배포됩니다. 그래서 Docker가 필수 기술이 된 거예요."
실전 팁
💡 - 가상머신이 필요한 경우: 완전한 OS 격리, 다른 OS 실행, 높은 보안 요구사항
- 컨테이너가 적합한 경우: 빠른 배포, 마이크로서비스, CI/CD 파이프라인, 개발 환경 통일
3. Docker 아키텍처 이해
김개발 씨가 터미널에 docker run을 입력하고 엔터를 눌렀습니다. 화면에 로그가 주르륵 올라오더니 컨테이너가 실행되었습니다.
"신기하다... 근데 이게 어떻게 동작하는 거지?" 명령어 한 줄 뒤에서 어떤 일이 일어나는지 궁금해졌습니다.
Docker는 클라이언트-서버 아키텍처로 동작합니다. 사용자가 입력하는 명령어는 Docker Client가 받아서 Docker Daemon에게 전달하고, Daemon이 실제 작업을 수행합니다.
마치 식당에서 손님(Client)이 주문하면 주방(Daemon)에서 요리를 만드는 것과 같습니다. 이 구조를 이해하면 Docker의 동작 원리를 명확히 파악할 수 있습니다.
다음 코드를 살펴봅시다.
# Docker 아키텍처 구성요소
# 1. Docker Client (CLI)
docker pull nginx # 클라이언트가 명령 전송
docker build -t my-app . # 빌드 요청
docker run -d nginx # 실행 요청
# 2. Docker Daemon (dockerd)
# - 이미지 관리
# - 컨테이너 생명주기 관리
# - 네트워크, 볼륨 관리
# 백그라운드에서 항상 실행 중
# 3. Docker Registry (Docker Hub)
# - 이미지 저장소
# - public/private 이미지 호스팅
# 통신 흐름
# Client -> REST API -> Daemon -> Container
박시니어 씨가 아키텍처 다이어그램을 그리기 시작했습니다. "Docker가 어떻게 동작하는지 식당에 비유해서 설명해줄게요." 여러분이 식당에 가면 먼저 웨이터를 만납니다.
웨이터에게 주문을 하면, 웨이터는 그 주문을 주방에 전달합니다. 주방에서는 재료 창고에서 필요한 재료를 꺼내 요리를 만들고, 완성된 음식을 손님에게 내어줍니다.
Docker도 정확히 이런 구조로 동작합니다. Docker Client는 웨이터 역할을 합니다.
우리가 터미널에 docker run nginx라고 입력하면, Docker Client가 이 명령을 받습니다. Client는 이 명령을 해석해서 Docker Daemon에게 전달합니다.
REST API를 통해 통신하기 때문에, Client와 Daemon이 같은 컴퓨터에 있을 필요도 없습니다. Docker Daemon(dockerd)은 주방장 역할을 합니다.
실제로 컨테이너를 만들고, 실행하고, 중지하는 모든 작업을 수행합니다. Daemon은 백그라운드에서 항상 실행되고 있으면서 Client의 요청을 기다립니다.
이미지 관리, 컨테이너 생명주기 관리, 네트워크 설정, 볼륨 관리 등 Docker의 핵심 기능을 모두 담당합니다. Docker Registry는 재료 창고 역할을 합니다.
가장 유명한 Registry가 바로 Docker Hub입니다. 전 세계 개발자들이 만든 이미지가 여기에 저장되어 있습니다.
nginx, mysql, node 같은 공식 이미지부터 개인이 만든 커스텀 이미지까지 수백만 개의 이미지가 있습니다. 이제 실제 동작 흐름을 따라가 봅시다.
docker run nginx 명령을 실행하면, 먼저 Docker Client가 이 명령을 Daemon에게 전달합니다. Daemon은 로컬에 nginx 이미지가 있는지 확인합니다.
없다면 Docker Hub에서 이미지를 다운로드(pull)합니다. 이미지가 준비되면 Daemon은 이 이미지를 기반으로 새로운 컨테이너를 생성하고 실행합니다.
**이미지(Image)**와 **컨테이너(Container)**의 관계도 중요합니다. 이미지는 읽기 전용 템플릿입니다.
마치 붕어빵 틀과 같습니다. 컨테이너는 이미지로부터 만들어진 실행 인스턴스입니다.
붕어빵 틀(이미지) 하나로 붕어빵(컨테이너)을 여러 개 만들 수 있는 것처럼, 하나의 이미지로 여러 컨테이너를 실행할 수 있습니다. 김개발 씨가 이해했다는 표정을 지었습니다.
"아, 그래서 이미지는 한 번 다운로드하면 계속 재사용할 수 있는 거군요!" 박시니어 씨가 덧붙였습니다. "맞아요.
그리고 이미지는 레이어로 구성되어 있어서, 공통 부분은 여러 이미지가 공유해요. 그래서 디스크 공간도 효율적으로 사용하죠."
실전 팁
💡 - docker info 명령으로 현재 Docker 환경의 상세 정보를 확인할 수 있습니다
- Docker Desktop을 사용하면 GUI로도 컨테이너와 이미지를 관리할 수 있습니다
4. Docker Desktop 설치하기
"이론은 충분히 들었어요. 이제 직접 설치해보고 싶어요!" 김개발 씨가 노트북을 열며 말했습니다.
박시니어 씨가 웃으며 고개를 끄덕였습니다. "좋아요, Docker Desktop을 설치하면 Windows나 Mac에서도 쉽게 Docker를 사용할 수 있어요."
Docker Desktop은 Windows와 Mac 사용자를 위한 Docker 설치 패키지입니다. Docker Engine, Docker CLI, Docker Compose, Kubernetes 등 필요한 모든 것이 포함되어 있습니다.
마치 올인원 패키지처럼 설치 한 번으로 Docker 개발 환경이 완성됩니다. GUI 대시보드도 제공하여 컨테이너 관리가 편리합니다.
다음 코드를 살펴봅시다.
# Windows (PowerShell 관리자 권한)
# 1. Docker Desktop 다운로드
# https://www.docker.com/products/docker-desktop
# 2. WSL2 백엔드 활성화 (권장)
wsl --install
wsl --set-default-version 2
# Mac (Homebrew 사용)
brew install --cask docker
# Linux (Ubuntu/Debian)
# Docker Engine 직접 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 설치 확인
docker --version
# Docker version 24.0.7, build afdd53b
# Docker 서비스 상태 확인 (Linux)
sudo systemctl status docker
Docker를 설치하는 방법은 운영체제마다 조금씩 다릅니다. 하나씩 살펴보겠습니다.
Windows 사용자라면 Docker Desktop이 최선의 선택입니다. 먼저 Docker 공식 웹사이트(docker.com)에서 Docker Desktop for Windows를 다운로드합니다.
설치 파일을 실행하면 마법사가 안내해줍니다. Windows에서 Docker를 사용하려면 **WSL2(Windows Subsystem for Linux 2)**가 필요합니다.
Docker Desktop 설치 과정에서 WSL2 설치를 안내해주지만, 미리 설치해두면 더 좋습니다. PowerShell을 관리자 권한으로 열고 wsl --install 명령을 실행하면 됩니다.
설치가 완료되면 시스템 트레이에 Docker 고래 아이콘이 나타납니다. 이 아이콘이 움직이지 않고 가만히 있으면 Docker가 정상적으로 실행 중인 것입니다.
처음 시작할 때는 Docker Engine이 초기화되는 데 시간이 조금 걸릴 수 있습니다. Mac 사용자도 Docker Desktop을 사용합니다.
공식 웹사이트에서 다운로드하거나, Homebrew를 사용한다면 brew install --cask docker 명령 한 줄로 설치할 수 있습니다. M1/M2 칩을 사용하는 Mac이라면 Apple Silicon 버전을 선택해야 합니다.
Mac에서도 설치 후 Applications 폴더에서 Docker를 실행하면 메뉴 바에 고래 아이콘이 나타납니다. 처음 실행 시 시스템 권한을 요청할 수 있으니 허용해주세요.
Linux 사용자는 Docker Engine을 직접 설치합니다. Ubuntu를 예로 들면, 먼저 패키지 목록을 업데이트하고 Docker 공식 저장소를 추가합니다.
그 다음 apt-get install docker-ce docker-ce-cli containerd.io 명령으로 설치합니다. 자세한 설치 스크립트는 Docker 공식 문서에 운영체제별로 정리되어 있습니다.
Linux에서 주의할 점이 하나 있습니다. 기본적으로 Docker는 root 권한이 필요합니다.
매번 sudo를 붙이기 귀찮다면, 현재 사용자를 docker 그룹에 추가하면 됩니다. sudo usermod -aG docker $USER 명령을 실행하고 로그아웃했다가 다시 로그인하면 적용됩니다.
김개발 씨가 설치를 마치고 터미널을 열었습니다. "설치가 잘 됐는지 어떻게 확인해요?" 박시니어 씨가 대답했습니다.
"간단해요. docker --version을 입력해보세요.
버전 정보가 나오면 성공이에요."
실전 팁
💡 - Docker Desktop은 개인 사용자와 소규모 기업(250명 미만)은 무료입니다
- 설치 후 Docker Desktop Settings에서 리소스(CPU, 메모리) 할당량을 조절할 수 있습니다
- WSL2 백엔드를 사용하면 Hyper-V 백엔드보다 성능이 좋습니다
5. 첫 번째 컨테이너 실행
Docker 설치를 마친 김개발 씨의 눈이 반짝였습니다. "드디어 컨테이너를 실행해볼 수 있겠네요!" 박시니어 씨가 고개를 끄덕이며 말했습니다.
"가장 전통적인 첫 번째 컨테이너가 있어요. 바로 hello-world입니다."
docker run 명령어는 컨테이너를 실행하는 가장 기본적인 명령어입니다. docker run hello-world를 실행하면 Docker Hub에서 hello-world 이미지를 다운로드하고, 이 이미지로 컨테이너를 만들어 실행합니다.
마치 처음 프로그래밍을 배울 때 "Hello, World!"를 출력하는 것처럼, Docker의 첫 걸음도 hello-world로 시작합니다.
다음 코드를 살펴봅시다.
# 첫 번째 컨테이너 실행
docker run hello-world
# 출력 결과:
# Hello from Docker!
# This message shows that your installation appears to be working correctly.
# 무슨 일이 일어났는지 확인
docker images
# REPOSITORY TAG IMAGE ID SIZE
# hello-world latest d2c94e258dcb 13.3kB
# 실행된 컨테이너 확인 (종료된 것 포함)
docker ps -a
# CONTAINER ID IMAGE COMMAND STATUS
# abc123def456 hello-world "/hello" Exited (0)
# 실용적인 예: nginx 웹서버 실행
docker run -d -p 8080:80 --name my-nginx nginx
# -d: 백그라운드 실행
# -p 8080:80: 호스트 8080포트를 컨테이너 80포트에 연결
# --name: 컨테이너 이름 지정
터미널에 docker run hello-world를 입력하고 엔터를 눌렀습니다. 처음 실행하면 "Unable to find image 'hello-world:latest' locally"라는 메시지가 나타납니다.
당황할 필요 없습니다. Docker가 로컬에서 이미지를 찾지 못해서 Docker Hub에서 다운로드하겠다는 뜻입니다.
잠시 후 "Hello from Docker!"라는 반가운 메시지가 나타납니다. 이 메시지가 보인다면 Docker가 정상적으로 작동하고 있는 것입니다.
축하합니다. 첫 번째 컨테이너를 성공적으로 실행했습니다.
이제 무슨 일이 일어났는지 자세히 살펴봅시다. docker run hello-world 명령을 실행하면 Docker는 다음 단계를 거칩니다.
먼저 로컬에 hello-world 이미지가 있는지 확인합니다. 없으면 Docker Hub에서 다운로드합니다.
이미지가 준비되면 새 컨테이너를 생성합니다. 그리고 컨테이너 안에서 지정된 명령을 실행합니다.
hello-world의 경우 메시지를 출력하고 종료됩니다. docker images 명령을 실행해보세요.
방금 다운로드한 hello-world 이미지가 목록에 있을 것입니다. 크기가 고작 13KB 정도밖에 안 됩니다.
컨테이너 이미지가 얼마나 가벼울 수 있는지 보여주는 좋은 예입니다. docker ps -a 명령은 모든 컨테이너를 보여줍니다.
-a 옵션 없이 docker ps만 실행하면 현재 실행 중인 컨테이너만 보입니다. hello-world 컨테이너는 메시지를 출력하고 바로 종료되었기 때문에 -a 옵션이 필요합니다.
이제 좀 더 실용적인 컨테이너를 실행해봅시다. docker run -d -p 8080:80 --name my-nginx nginx 명령을 실행합니다.
이 명령은 nginx 웹서버를 컨테이너로 실행합니다. 옵션들을 하나씩 살펴보면, -d는 detached 모드로 백그라운드에서 실행하라는 뜻입니다.
-p 8080:80은 호스트의 8080 포트를 컨테이너의 80 포트에 연결합니다. --name my-nginx는 컨테이너에 이름을 붙여줍니다.
명령 실행 후 웹 브라우저를 열고 http://localhost:8080에 접속해보세요. "Welcome to nginx!" 페이지가 나타납니다.
축하합니다. 여러분은 방금 웹서버를 컨테이너로 실행했습니다.
설치 과정도 없이, 설정 파일을 건드리지도 않고, 명령어 한 줄로 웹서버를 띄운 것입니다. 김개발 씨가 감탄했습니다.
"와, nginx 설치하려면 원래 꽤 복잡했는데, 이렇게 쉬울 수가!" 실행 중인 nginx 컨테이너를 멈추려면 docker stop my-nginx를 입력합니다. 다시 시작하려면 docker start my-nginx입니다.
컨테이너를 완전히 삭제하려면 docker rm my-nginx를 사용합니다.
실전 팁
💡 - docker run의 주요 옵션: -d(백그라운드), -p(포트매핑), --name(이름지정), -e(환경변수)
- 컨테이너 안으로 들어가려면
docker exec -it 컨테이너이름 /bin/bash를 사용합니다
6. Docker 버전 확인 및 기본 설정
박시니어 씨가 말했습니다. "Docker를 본격적으로 사용하기 전에, 기본적인 설정과 유용한 명령어들을 알아두면 좋아요." 김개발 씨가 메모장을 꺼냈습니다.
"네, 나중에 헤매지 않으려면 지금 잘 정리해둬야겠어요."
Docker를 효율적으로 사용하려면 버전 확인, 시스템 정보 조회, 리소스 정리 등 기본적인 관리 명령어를 알아야 합니다. docker version으로 클라이언트와 서버 버전을 확인하고, docker info로 전체 시스템 상태를 파악합니다.
또한 Docker Desktop 설정에서 CPU, 메모리 할당량을 조절하여 성능을 최적화할 수 있습니다.
다음 코드를 살펴봅시다.
# 버전 확인 (간단)
docker --version
# Docker version 24.0.7, build afdd53b
# 버전 확인 (상세 - 클라이언트/서버 모두)
docker version
# Client: Docker Engine - Community
# Version: 24.0.7
# Server: Docker Engine - Community
# Version: 24.0.7
# 시스템 정보 확인
docker info
# Containers: 5 (Running: 1, Paused: 0, Stopped: 4)
# Images: 12
# Server Version: 24.0.7
# Storage Driver: overlay2
# CPUs: 8
# Total Memory: 15.63GiB
# 디스크 사용량 확인
docker system df
# TYPE TOTAL ACTIVE SIZE RECLAIMABLE
# Images 12 3 3.2GB 2.1GB (65%)
# Containers 5 1 102MB 98MB (96%)
# 사용하지 않는 리소스 정리
docker system prune
# WARNING! This will remove all stopped containers, unused networks, dangling images...
# 더 강력한 정리 (사용하지 않는 이미지도 포함)
docker system prune -a
Docker를 설치했다면, 가장 먼저 제대로 설치되었는지 확인해야 합니다. docker --version 명령은 Docker 버전을 간단히 보여줍니다.
"Docker version 24.0.7" 같은 한 줄이 출력됩니다. 이 명령이 작동하면 Docker CLI가 제대로 설치된 것입니다.
좀 더 자세한 정보가 필요하다면 docker version을 사용합니다. 이 명령은 Docker Client와 Server(Daemon) 양쪽의 버전 정보를 모두 보여줍니다.
둘의 버전이 다르면 호환성 문제가 생길 수 있으니 주의하세요. docker info는 Docker 환경의 전체적인 상태를 보여줍니다.
현재 실행 중인 컨테이너 수, 저장된 이미지 수, 사용 중인 스토리지 드라이버, 할당된 CPU와 메모리 등 유용한 정보가 가득합니다. 문제가 생겼을 때 디버깅의 첫 단계로 이 명령을 실행하면 좋습니다.
Docker를 사용하다 보면 이미지와 컨테이너가 점점 쌓입니다. 디스크 공간이 부족해지기 전에 주기적으로 정리해주는 것이 좋습니다.
docker system df 명령은 Docker가 사용하는 디스크 공간을 보여줍니다. 이미지, 컨테이너, 볼륨, 빌드 캐시가 각각 얼마나 공간을 차지하는지, 그리고 얼마나 회수 가능한지 알 수 있습니다.
docker system prune 명령은 사용하지 않는 리소스를 정리합니다. 멈춘 컨테이너, 사용되지 않는 네트워크, 태그 없는 이미지(dangling images)가 삭제됩니다.
-a 옵션을 추가하면 현재 컨테이너에서 사용하지 않는 모든 이미지도 삭제합니다. Docker Desktop을 사용한다면 GUI에서도 다양한 설정을 할 수 있습니다.
Settings 메뉴에서 Resources 탭을 열면 Docker에 할당할 CPU, 메모리, 디스크 공간을 조절할 수 있습니다. 기본값은 시스템 리소스의 일부만 사용하도록 되어 있습니다.
무거운 컨테이너를 실행해야 한다면 이 값을 늘려주세요. General 탭에서는 Docker 시작 옵션을 설정할 수 있습니다.
"Start Docker Desktop when you log in"을 체크하면 컴퓨터를 켤 때 자동으로 Docker가 시작됩니다. 개발을 자주 한다면 편리한 옵션입니다.
김개발 씨가 마지막으로 물었습니다. "Docker를 공부하려면 어디서부터 시작하면 좋을까요?" 박시니어 씨가 대답했습니다.
"일단 오늘 배운 기본 명령어들을 충분히 연습하세요. 그 다음엔 Dockerfile을 작성해서 직접 이미지를 만들어보고, Docker Compose로 여러 컨테이너를 함께 관리하는 법을 배우면 됩니다.
단계별로 차근차근 하면 어렵지 않아요." Docker의 첫 발을 성공적으로 내딛었습니다. 이제 여러분도 컨테이너의 세계로 들어왔습니다.
실전 팁
💡 - 정기적으로 docker system prune을 실행하여 디스크 공간을 확보하세요
- Docker Desktop의 Troubleshoot 메뉴에서 로그 확인과 초기화 기능을 사용할 수 있습니다
docker stats명령으로 실행 중인 컨테이너의 실시간 리소스 사용량을 모니터링할 수 있습니다
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
백업 및 복구 전략 완벽 가이드
메일 서버와 중요 데이터를 안전하게 보호하는 백업 전략을 알아봅니다. Maildir 백업부터 증분 백업, 오프사이트 백업, 그리고 재해 복구 계획까지 실무에서 바로 적용할 수 있는 내용을 담았습니다.
Roundcube 웹메일 인터페이스 완벽 가이드
Docker 컨테이너 기반으로 Roundcube 웹메일을 구축하고, Nginx 리버스 프록시부터 플러그인 관리, 테마 커스터마이징까지 전체 과정을 다룹니다. 초급 개발자도 쉽게 따라할 수 있는 실무 중심 가이드입니다.
SSL/TLS 인증서 설정 완벽 가이드 (Let's Encrypt)
메일 서버 운영에 필수적인 SSL/TLS 인증서 설정 방법을 다룹니다. Let's Encrypt를 활용한 무료 인증서 발급부터 자동 갱신까지, 실무에서 바로 적용할 수 있는 내용을 담았습니다.
Dovecot으로 IMAP/POP3 메일 서버 구축하기
Linux 환경에서 Dovecot을 활용하여 IMAP과 POP3 메일 서버를 구성하는 방법을 다룹니다. 메일 저장소 설정부터 사용자 인증, 쿼터 관리까지 실무에서 필요한 핵심 설정을 단계별로 학습합니다.
SMTP 서버 구성 Postfix 완벽 가이드
리눅스 환경에서 Postfix를 활용한 메일 서버 구축의 모든 것을 다룹니다. 아키텍처 이해부터 보안 설정까지, 실무에서 바로 적용할 수 있는 핵심 내용을 담았습니다.