1. 도커 사용 이유

소프트웨어를 배포할 때 가장 큰 걸림돌은 실행 환경의 불일치다. 도커는 애플리케이션을 구동하기 위해 필요한 라이브러리, 설정 파일, 의존성 등을 하나로 묶어 컨테이너화한다. 이를 통해 개발 환경, 테스트 환경, 운영 환경 어디에서든 동일하게 동작하도록 보장할 수 있다. 격리된 환경에서 실행되므로 시스템 자원을 효율적으로 사용하면서도 독립성을 유지할 수 있다는 것이 가장 큰 장점이다.
2. 도커 VS 버추얼 머신 (VM)
버추얼 머신 (Virtual Machine)
- 구조: Infra → Host OS → Hypervisor (VMware, VirtualBox 등) → Guest OS → App
- 특징: 하이퍼바이저를 이용해 하드웨어를 가상화하고, 그 위에 독립된 Guest OS를 설치한다.
- 장점: 논리적으로 완전히 분리되어 있어 보안성이 높고, Host OS와 다른 운영체제를 구동할 수 있다.
- 단점: 각 VM마다 OS를 포함해야 하므로 용량이 매우 크고 부팅 속도가 느리며 하드웨어 리소스 소모가 심하다.
도커 (Docker)
- 구조: Infra → Host OS → Container Engine (ex. Docker Engine) → Container → App
- 특징: Host OS의 커널을 공유하며 컨테이너 엔진을 통해 프로세스를 격리한다.
- 장점: OS 수준의 가상화로 오버헤드가 적고 가볍다. 이미지 용량이 작고 컨테이너 생성 및 구동 속도가 매우 빠르다.
- 단점: Host OS의 커널을 공유하기 때문에 Host와 다른 OS(ex. Windows에서 Linux 커널 전용 기능 사용)를 완벽하게 분리하여 사용하는 데 제약이 있을 수 있다.
3. 컨테이너를 만드는 핵심 요소
도커파일 (Dockerfile)
컨테이너를 만들기 위한 레시피다. 어떤 베이스 이미지를 사용할지, 어떤 파일이 필요한지, 어떤 명령어를 실행해야 하는지 등을 텍스트 파일로 명시한다. 의존성 설치, 환경 변수 설정, 구동 방법 등을 기술한다.
이미지 (Image)
도커파일에 기술된 대로 생성된 실행 파일의 묶음이다. 실행에 필요한 파일, 라이브러리, 설정값 등이 포함되어 있으며, 실행 중인 상태를 스냅샷 찍은 것과 유사하다. 이미지는 불변 상태로 유지된다. 객체 지향 프로그래밍의 클래스 개념과 유사하다.
컨테이너 (Container)
이미지를 실행한 상태다. 개별적인 시스템 안에서 애플리케이션이 구동되는 실체다. 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있으며, 각 컨테이너는 독립된 공간을 가진다. 객체 지향 프로그래밍의 인스턴스와 유사하다.
4. 컨테이너 배포 및 이미지 공유
생성한 이미지를 다른 환경으로 전달하기 위해 컨테이너 레지스트리를 사용한다.
- 컨테이너 레지스트리 (Container Registry): 이미지를 저장하고 관리하는 저장소다.
- Push & Pull: 이미지를 레지스트리에 업로드하는 것을 Push, 내려받는 것을 Pull이라고 한다. 이를 수행하기 위해서는 도커와 같은 컨테이너 엔진이 반드시 설치되어 있어야 한다.
- 종류: 누구나 접근 가능한 Public Registry(Docker Hub 등)와 특정 권한이 필요한 Private Registry가 있다. 기업에서는 보안상의 이유로 내부망에 구축된 Private Registry를 주로 사용한다.
배포 워크플로우
- 로컬 환경에서 도커파일을 작성하고 빌드하여 이미지를 생성한다.
- 생성한 이미지를 컨테이너 레지스트리에 Push한다.
- 배포할 서버에서 해당 이미지를 Pull한다.
- 서버에서 이미지를 기반으로 컨테이너를 생성하여 실행한다.
4. 실습 : Nginx로 웹 페이지 띄우기
이론을 바탕으로 가장 가벼운 웹 서버인 Nginx를 이용해 정적 웹 페이지를 배포해보았다. 내 컴퓨터에 Nginx를 직접 설치하지 않고 오직 도커 컨테이너만 사용했다.
STEP 1. 실습 파일 준비
작업할 폴더를 하나 만들고 그 안에 두 개의 파일을 생성한다.
- index.html: 웹 브라우저에 표시될 내용이다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>도커 실습</title>
</head>
<body>
<h1>Docker 실습 성공</h1>
<p>Running the application by copying local files to the container.</p>
</body>
</html>
- Dockerfile: 이미지를 만들기 위한 설정 파일이다.
FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html
STEP 2. 이미지 빌드
터미널을 열고 해당 폴더로 이동하여 이미지를 생성한다.
docker build -t my-web-site .
STEP 3. 컨테이너 실행
빌드된 이미지를 컨테이너로 실행한다. 호스트의 8080 포트와 컨테이너의 80 포트를 연결한다.
docker run -d -p 8080:80 --name my-web-container my-web-site

STEP 4. 결과 확인


브라우저 주소창에 localhost:8080을 입력한다. 내가 작성한 HTML 내용이 정상적으로 출력되는지 확인한다. Docker Desktop 앱을 열어 Containers 탭에서 내 컨테이너가 초록색 불을 켜고 돌아가고 있는지 체크한다.
'전공공부' 카테고리의 다른 글
| vCPU 동작 원리 (0) | 2026.03.29 |
|---|---|
| AWS 네트워크 핵심 구성 요소 정리 (0) | 2026.03.29 |
| Kata Containers와 gVisor (0) | 2026.03.27 |
| 도커(Docker)의 단점과 카타 컨테이너(Kata Containers) (0) | 2026.03.27 |
| 도커(Docker)의 가상화 원리와 리눅스 커널 구조 (0) | 2026.03.26 |