[Docker] Docker1 - Overview
Docker 개요
Docker란?
Docker는 애플리케이션을 컨테이너(Container)라는 단위로 패키징해서 실행할 수 있게 도와주는 플랫폼이다.
“어디서나, 똑같이 실행되게 하자!”라는 철학을 가진 도구이다.
Docker의 사용 이유?
- 이식성 : 어떤 OS, 어떤 환경에서도 동일하게 실행 가능하다.
- 가볍고 빠름 : VM보다 훨씬 빠르고 자원도 적게 사용한다.
- 의존성 관리 : 애플리케이션 실행에 필요한 모든 환경을 포함 가능하다.
- 버전 관리 : Dockerfile로 어떤 버전의 OS/라이브러리를 쓰는지 기록이 가능하다.
- 팀 협업에 최적 : “이 컨테이너 실행하면 됨”으로 협업 가능
Docker 핵심 개념
- Image(이미지) : 컨테이너의 “설계도”
- 실행 가능한 프로그램, 설정, 라이브러리 등이 포함된 패키지
- Container(컨테이너) : 이미지를 실행한 인스턴스
- 격리된 환경에서 프로그램이 동작
- 이미지로부터 여러 개의 컨테이너 생성 가능
- Dockerfile : 이미지를 만들기 위한 스크립트 파일
- “이 이미지 안에 어떤 걸 설치하고 설정할지” 정의
- Docker Hub : Docker 이미지 공유 저장소(Github 느낌)
- **$ docker pull <이미지명>** 하면 docker hub에서 가져옴이미지명>
- Docker-compose : 여러 개의 컨테이너를 한 번에 정의하고 실행할 수 있는 도구(예: 웹서버 + DB 같이 실행)
Docker 내부 구조
- Docker Engine : 컨테이너를 실행시키는 시스템
- 각가그이 컨테이너는 격리되어 있으나, 호스트 OS 커널 공유
1. Client(클라이언트)
- 사용자가 Docker 명령어를 입력하는 곳
- 입력된 명령어들은 전부 Docker Daemon에 전달돼서 실제 작업이 수행됨
2. Docker Host
- Docker가 설치된 머신(로컬 or 서버)
- Docker Daemon : Docker의 핵심 엔진으로, 클라이언트의 명령어를 받아서 이미지 생성, 컨테이너 실행 등을 실제로 처리한다.
- Images : 실행 가능한 소프트웨어 패키지(예: python, Redis, Alpine 등)
- Docker Daemon이 Registry에서 pull하거나 build해서 여기에 저장
- Containers : 이미지를 실행 중인 인스턴스로 만든 것
- 독립된 환경에서 실행됨(리눅스 시스템 격리)
3. Registry(레지스트리)
- Docker 이미지 저장소
- 보통은 Docker hub를 의미하지만, 기업에서는 자체 Registry도 사용한다.
- 그림에 있는 NGINX, Ubuntu, PostgreSQL 같은 이미지들이 여기에 저장돼 있다.
- 구성 요소
- images : 사용 가능한 기본 이미지들
- Extensions : 확장 기능(예: jFrog Aritifactory)
- Plugins: 모니터링, 네트워크, 보안 등을 위한 추가 기능(예: Grafana, VMware)
동작 흐름 예시
docker run python
1. $docker run -> 클라이언트에서 Docker Daemon에게 명령 전송
2. Daemon은 로컬에 python 이미지가 있는지 확인
3. 없으면 Registry에서 pull 해옴
4. 이미지로 컨테이너 생성 및 실행
5. 컨테이너는 Docker Host에서 실행되며, 사용자는 그 안에서 작업 가능