[GDSC] Docker, 컨테이너, 이미지

DevOps·2025-10-28·by 1000hyehyang

🐳 Docker: 이미지와 컨테이너, 그리고 레이어

Docker는 애플리케이션을 컨테이너(Container) 라는 단위로 감싸서 실행하게 해 주는 플랫폼이다. 쉽게 말하면 “애플리케이션이 돌아가는 작은 독립된 방을 만들어주는 기술”이다.

도커 이미지

컨테이너란 무엇일까? 도커는 컨테이너형 가상화 기술을 기반으로 만들어졌다. 우리가 흔히 아는 가상화에는 호스트 OS형 가상화가 있다. 이 방식은 운영체제 위에 가상화 소프트웨어를 설치하고, 그 위에 또 다른 게스트 OS를 올려 실행한다. 마치 하나의 컴퓨터 안에 또 다른 컴퓨터를 만드는 셈이다.

반면, 컨테이너형 가상화는 게스트 OS를 새로 만드는 대신, 호스트 OS의 파일 시스템을 분리하여 독립된 실행 공간을 만든다. 이 공간 안에는 새로운 파일 시스템과 애플리케이션이 함께 들어 있으며, 이 전체를 ‘컨테이너’라 부른다.

이 차이 때문에 두 방식의 성능에도 큰 차이가 생긴다. 호스트 OS형 가상화는 OS를 통째로 띄워야 하므로 부팅에 몇 분이 걸리지만, 컨테이너형 가상화는 단순히 파일 시스템을 분리하는 수준이라 몇 초 만에 실행된다. 또한 훨씬 가볍고 효율적으로 리소스를 사용할 수 있다.

가상화

이 컨테이너는 사실 하나의 격리된 프로세스다. 하지만 그 안에는 실행에 필요한 모든 파일, 라이브러리, 설정이 포함되어 있어서 어디서 실행하더라도 똑같은 환경이 만들어진다.

이때 중요한 점은, 컨테이너가 호스트 컴퓨터의 커널을 그대로 공유한다는 것이다. 즉, 완전히 새로운 운영체제를 띄우는 게 아니라 기존 시스템 위에 ‘가볍게 분리된 실행 공간’을 만드는 방식이다. 이게 가상머신(Virtual Machine)과의 가장 큰 차이점이다. 가상머신은 운영체제 전체를 복사해서 올리기 때문에 무겁고 느리지만, 컨테이너는 커널만 공유하기 때문에 훨씬 빠르고 효율적이다.

그렇다면 컨테이너는 어디서 이 실행 환경을 가져올까? 그 답이 바로 이미지(Image) 에 있다. 이미지는 컨테이너의 설계도이자 템플릿이다. 애플리케이션을 실행하는 데 필요한 파일, 라이브러리, 설정이 모두 포함된 하나의 패키지 형태다. 하나의 이미지로 여러 개의 컨테이너를 만들 수 있으며, 이미지 자체는 변경되지 않고 항상 같은 상태로 유지된다.

이미지는 여러 개의 읽기 전용 레이어(read-only layers) 로 쌓여 있고, 컨테이너가 실행될 때 그 위에 쓰기 가능한 레이어(writable layer) 가 하나 더 추가된다. 우리가 컨테이너 안에서 어떤 파일을 만들거나 수정하면 그 변경 내용은 이 쓰기 가능한 레이어에만 저장된다. 컨테이너를 삭제하면 이 레이어도 사라지지만, 원본 이미지는 그대로 남아 다음에 다시 사용할 수 있다.

이 구조를 OverlayFS(오버레이 파일시스템) 이라고 부른다. 이 덕분에 Docker는 “이미지(불변)”와 “컨테이너(가변)”를 깔끔하게 분리하고, 빠른 실행 속도와 재현 가능한 개발 환경을 제공한다.

예를 들어 ubuntu:24.04 이미지를 내려받고 실행하면 그 순간 ‘우분투 환경을 갖춘 하나의 독립된 공간’이 만들어진다. 컨테이너 안에서 apt updatels 같은 리눅스 명령을 입력하면 실제 우분투를 쓰는 것처럼 동작한다. 컨테이너를 삭제해도 이미지는 남아 있으니 언제든지 똑같은 환경을 다시 띄울 수 있다. 이 원리를 이해하면 Docker의 대부분 동작은 쉽게 예측할 수 있다.

image

 

앞으로 사용할 배포판: Ubuntu 24.04 LTS

배포판이란 리눅스 커널 위에 필요한 도구와 패키지를 더해 하나의 완성된 운영체제 형태로 만든 것이다.

나는 이번 학습용 배포판으로 Ubuntu 24.04 LTS를 선택했다. Ubuntu는 사용자가 가장 많고, 공식 문서와 커뮤니티 자료가 풍부하다. 또한 대부분의 Docker 기본 이미지나 서버 예제가 우분투 기반으로 되어 있다. 특히 “LTS(Long Term Support)” 버전은 최소 5년 동안 안정적인 보안 업데이트가 제공되기 때문에 실습 환경으로 적합하다. 24.04 버전은 2029년 5월까지 지원된다.

Ubuntu는 APT (Advanced Package Tool) 이라는 패키지 관리 시스템을 사용한다. 패키지 관리란 프로그램을 설치·업데이트·삭제하는 기능을 말한다. APT는 그 과정을 명령어 한 줄로 간단하게 처리할 수 있게 도와준다.

예를 들어:

sudo apt update        # 패키지 목록 갱신
sudo apt install git   # Git 설치
sudo apt upgrade       # 모든 패키지 최신 버전으로 업그레이드

이 명령들은 로컬 PC, WSL, 원격 서버, 컨테이너 안 어디서든 동일하게 작동한다. 즉, “환경이 달라도 같은 방식으로” 리눅스를 다룰 수 있다는 게 큰 장점이다.

또 하나 알아둘 점은, Ubuntu 24.04부터 기존의 /etc/apt/sources.list 파일 대신 새로운 Deb822 형식의 .sources 파일로 소스 관리 방식을 바꿨다는 것이다. 기본 저장소 파일은 /etc/apt/sources.list.d/ubuntu.sources에 위치한다. 이 방식은 패키지 서명(Signed-By)을 명확히 지정하도록 하여 보안과 관리의 일관성을 높였다. 기존 방식도 여전히 호환되지만, 앞으로는 .sources 형식이 표준이 될 예정이다.

 

정리

Docker는 이미지와 컨테이너라는 개념으로 환경을 분리하고, Ubuntu는 그 컨테이너 내부에서 동작하는 표준 리눅스 환경의 역할을 한다. Ubuntu 24.04 LTS는 안정적이고 문서화가 잘 되어 있으며, APT 패키지 관리 시스템을 통해 쉽고 빠르게 필요한 도구를 설치할 수 있다. 이 구조를 이해하면 앞으로 Docker 실습이나 리눅스 명령어 학습에서도 한결 명확한 그림을 그릴 수 있을 것이다.

댓글 로딩 중...