본문 바로가기
Software Tech/DevOps

[Docker] 컨테이너 가상화 소프트웨어

by SuperDev 2025. 2. 25.

도커를 이해하기 위해 먼저 운영체제, 프로그램, 스레드, 네임스페이스와 같은 개념을 이해해봅시다.

운영체제란, 컴퓨터에서 하드웨어와 소프트웨어의 자원을 관리하고 이를 위해 스케줄링을 해주는 시스템 소프트웨어를 의미하며, 사용자는 이 운영체제를 제어하기 위해 bash, zsh 등 "셸"이라는 프로그램을 사용합니다.

 

프로그램이란,  실행 가능한 명령어들의 집합을 의미하고, 하드디스크에 저장되지만 메모리에는 올라가지 않은 정적인 상태를 의미합니다. 이 프로그램을 실행 하기 위해 메모리에 올려 동작 시킨 상태를 프로세스라고 합니다. 즉, 하나의 프로그램을 여러 번 실행시키면 여러 개의 프로세스가 작동하게 됩니다.

 

스레드는 프로세스가 할당받은 자원을 이용하는 실행 단위이고, 여러 흐름의 단위를 의미합니다. 즉, 프로세스는 스레드의 컨테이너에 해당한다고 생각하면 쉽습니다.

 

네임스페이스는 프로세스를 실행할 때, 시스템 리소스를 구분하기 위해 사용되며, 리소스를 분리해서 실행할 수 있도록 도와주는 기능 입니다. PID, NET, IPC 등을 의미합니다.

 

가상화는 컴퓨터에서 활용하는 리소스를 추상화한 개념이며, 단일 컴퓨팅 자원을 여러 개의 논리적인 자원으로 나누어 동작시킬 수 있도록 합니다. 가상화는 하이퍼바이저를 이용하거나, 도커를 이용해서 구현이 가능한데, 하이퍼바이저는 호스트 운영체제 위에 게스트 운영체제가 설치되므로 무겁기도 하고, 초기 설정이 복잡하고 관리가 어려울 수 있습니다. (대표적인 가상머신 소프트웨어로 Virtual Box, VM웨어 등이 있습니다.)

 

 

1. 도커

도커는 오픈소스 소프트웨어로 컨테이너라고 부르는 가상화 방식을 사용하며, 다양한 개발 환경에서 컨테이너를 이용해 소프트웨어를 편리하게 배포할 수 있도록 도와주는 역할을 합니다. (PaaS)

 

컨테이너는 소프트웨어를 배포할 때, 필요한 코드, 라이브러리, 환경 설정 파일들을 격리시킨 후, 실행 가능한 패키지로 만들어 관리할 수 있습니다. 격리된 환경이므로 서로 충돌하지 않고, 가상머신에 비해 리소스 소모량이 적어 효율적인 리소스 관리가 가능합니다. 도커 클라이언트(docker-cli)를 통해서 명령을 내리고 이미지와 컨테이너를 관리합니다.

 

 

2. 도커의 동작 방식

도커의 구조는 크게 도커 클라이언트(docker-cli), 도커 데몬(docker-demon), 도커(docker-registry)로 구성됩니다. 클라이언트를 통해 도커에 명령을 내리고, 도커 호스트의 도커 데몬(백그라운트 프로세스)이 명령을 받아서 도커와 관련된 리소스를 관리합니다. 그리고 도커 호스트에 이미지가 없으면 Resistry에서 다운로드 합니다.

 

이미지(image)란, 컨테이너 형태로 소프트웨어를 배포하기 위해 필요한 모든 요소를 실행할 수 있는 컴파일 및 빌드한 패키지 입니다. 경량화된 패키지 이므로 비교적 적은 용량으로 관리가 가능합니다. 이미지는 여러 개의 레이어로 구성되어 있고, 도커 허브(Hub)와 같은 중앙 저장소에 저장하여 관리할 수도 있습니다.

 

 

 

3. 도커 기본 명령어

도커 설치 방법은 운영체제별로 다르고 구글이나 블로그에 잘 정리된 글이 많기 때문에 생략해도 될 것 같습니다.

docker-cli를 통해 이미지 및 컨테이너를 생성하는 명령어는 아래와 같습니다. (저는 명령어를 그때 그때 찾아보고 사용하고 있습니다...ㅎ)

 

 

4. 도커 네트워크

도커를 효율적으로 활용하기 위해서는 네트워크 구조를 알아야 합니다. 도커 네트워크는 컨테이너 간 통신을 가능하게 하는 기능으로 외부 네트워크와도 통신할 수 있습니다. 통신 지원을 위해 기본적으로 제공되는 네트워크 드라이버가 있는데, 내용은 아래와 같습니다.

네트워크 드라이버 내용
bridge (기본값) 기본으로 제공되며, 독립적인 네트워크를 생성하여 컨테이너 간 통신을 가능하게 합니다.
(기본적으로 docker0라는 인터페이스를 사용합니다.)
host 컨테이너가 호스트 네트워크를 직접 사용하도록 설정합니다. (성능 최적화)
overlay 여러 호스트의 컨테이너 간 통신을 가능하게 하는 네트워크 (Swarm 모드에서 사용)
macvlan 물리적 네트워크 인터페이스와 컨테이너를 직접 연결하여 MAC 주소를 할당합니다.
none 네트워크를 비활성화하여 외부 연결을 차단합니다.
# 네트워크 생성 및 사용
docker network create my_net
docker run -d --name container1 --network my_net nginx

# 호스트 네트워크 사용
docker run --rm --network host nginx

 

 

5. 도커 스토리지

도커는 컨테이너 내부의 데이터를 저장하고 관리하기 위해 스토리지 드라이버를 제공합니다. 드라이버에는 3가지 종류가 있는데, bind mount, volume, tmpfs 방식이 있습니다.

스토리지 드라이버 내용
Volume (추천) 호스트 시스템에 데이터를 저장하며 컨테이너 간 공유가 가능합니다.
Bind Mount 호스트의 특정 디렉토리를 컨테이너 내부에 마운트하는 방식 입니다.
tmpfs 컨테이너의 RAM을 사용하여 데이터를 저장합니다. (휘발성)
# 볼륨 생성 및 '/data'에 사용
docker volume create my_vol
docker run -d -v my_vol:/data --name container1 nginx

 

기초적인 내용을 대략적으로 우선 다루어 보았는데, 사실 깊게 들어가면 내용이 많아지기 때문에 실습을 통해 추후 자세하게 다룰 수 있으면 좋을 것 같습니다.

728x90

'Software Tech > DevOps' 카테고리의 다른 글

[Linux/Ubuntu] 리눅스는 무엇일까?  (0) 2025.03.29