일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 백엔드
- 스프링 배치
- vm
- 스프링 시큐리티
- 스프링
- spring batch
- 영속성 컨텍스트
- CS
- 데이터베이스
- Spring Security
- 스프링 부트
- web server
- spring cloud
- 컨테이너
- 자바
- Java
- 배포
- spring boot
- CI/CD
- JPA
- 가상화
- computer science
- virtualization
- 도커
- Container
- HTTP
- 웹 서버
- Spring
- ORM
- mysql
- Today
- Total
개발 일기
[Docker] 도커란? - 도커 개념과 구조 본문
도커(Docker)란?
도커는 전 게시글에서 다룬 가상화 방법 중 컨테이너(Container) 기술을 기반으로 한 일종의 가상화 플랫폼이다.
부두에서 화물 컨테이너를 체계적으로 관리하는 Docker에서 따온 것으로 소프트웨어 컨테이너를 효율적으로 관리할 수 있도록 설계된 강력한 도구이다. 이를 통해 사용자는 소프트웨어 이미지를 컨테이너로 변환하고, 생성된 컨테이너를 운영하며, 컨테이너를 이미지로 다시 변환하는 과정 등을 간편하게 수행할 수 있다. 즉, 컨테이너를 관리하기 위해서 도커와 같은 툴 등이 쓰이는 것이다.
도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, 네임스페이스(namespace), cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다. 컨테이너에 필요한 커널을 공유해서 사용하고, 컨테이너 안에는 어플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 줄어든다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 장점이 있다.
도커의 활용 가치는 다양한 상황에서 빛을 발한다. 예를 들어, 개발 과정에서 다른 소프트웨어와의 충돌을 방지하기 위해 격리된 환경이 필요하거나, 완성된 애플리케이션을 배포하거나, 이미 배포된 애플리케이션을 실행해보고 싶을 때 도커는 큰 도움이 된다. 특히, 배포 과정에서 필요한 파일들을 도커를 사용하여 이미지로 패키징함으로써 복잡한 종속성 문제에서 벗어날 수 있다.
도커 구조
도커 데몬(Docker Daemon)
- dockerd
- Docker API 요청을 수신
- images, containers, networks, and volumes 등 Docker Object 관리
- 다른 데몬과 통신하여 도커 서비스 관리 가능
- 사용자가 도커 클라이언트를 통해 명령을 내릴 때, 도커 데몬이 이를 받아 해당 작업을 수행한다.
도커 클라이언트(Docker Client)
- 사용자가 도커와 상호작용하는 기본 방법(Docker API)
- 명령어 입력을 통해 도커 데몬에게 작업을 요청하는 공간
- docker run와 같은 명령어를 실행하면 클라이언트는 이러한 명령을 dockerd에 보내고 dockerd이를 수행합
- 둘 이상의 데몬과 통신 가능
도커 레지스트리(Docker Registry)
- 도커 이미지를 저장하고 공유할 수 있는 공간
- 도커 Hub가 가장 대표적으로 쓰이는 공개 Registry
- docker pull/run : 레지스트리에서 이미지 가져옴
- docker push : 레지트스리에 이미지 푸시
도커 허브(Docker Hub)
도커 허브는 SaaS(Software as a Service) 형태의 클라우드 서비스로, 사용자가 도커 이미지를 공유할 수 있게 해준다.
또한, 공식 이미지 라이브러리를 제공하여, 필요한 소프트웨어의 도커 이미지를 쉽게 찾아 사용할 수 있다.
도커 객체(Docker Object)
도커에서 사용되는 기본 단위들을 도커 객체라고 한다. 이미지, 컨테이너, 네트워크, 볼륨 등이 여기에 해당한다.
도커 파일(Docker File)
컨테이너를 어떻게 만들어야하는지 recipe
필요한 파일, dependencies, 환경변수, 실행 스크립트 등 포함
DSL(Docker Specific Language) 언어를 사용해 이미지를 생성할 수 있음
도커 이미지(Docker Image)
도커 이미지는 도커 파일을 빌드하여 만든 것으로 컨테이너를 생성하기 위한 지침이 포함된 읽기 전용 템플릿이다. 애플리케이션을 실행하는 데 필요한 모든 파일과 설정을 포함하고 있으며, 불변의 특성을 가진다. 하나의 이미지에서 여러 컨테이너를 생성할 수 있어 1:N 관계이다. Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드된다. 이는 다른 가상화 기술과 비교할 때 이미지를 매우 가볍고 작고 빠르게 만드는 이유 중 하나이다.
도커 컨테이너(Docker Container)
컨테이너는 실행 가능한 이미지 인스턴스이다. 독립적으로 실행되며, 시스템의 다른 부분과 분리되어 있다. 컨테이너는 가볍고 빠르게 시작될 수 있으며, 동일한 이미지를 기반으로 여러 인스턴스를 실행할 수 있다. 이는 개발, 테스트, 배포 과정을 효율적으로 만들어 준다.
Docker File to Docker Image
: Docker File은 도커 이미지를 만들때 사용하는 파일으로 docker build 명령어(빌드)를 실행시키면 도커 이미지를 만들 수 있다.
Docker Image to Docker Container
: Docker Image를 docker run 명령어를 실행시키면 Docker Container를 만들 수 있다.
Docker Compose
Docker Compose는 여러 Docker 컨테이너를 정의하고 실행하는 도구이다.
간단히 말해서, Docker Compose를 사용하면 여러 컨테이너로 구성된 애플리케이션을 하나의 파일에 설정하여 관리할 수 있다. 이 때 사용하는 파일을 'docker-compose.yml'이다.
즉, 두 개 이상의 Docker Container를 엮어서 실행시키는 것이다.
'DevOps > Docker Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스(Kubernetes) 교양 쌓기 (0) | 2024.05.21 |
---|---|
[Docker] 스프링 부트 Dockerfile 작성부터 EC2 환경에 배포까지 (0) | 2024.05.19 |
[Docker] 도커파일(Dockerfile) 작성하기 (0) | 2024.05.15 |
[Docker] 도커 명령어 정리 (0) | 2024.05.14 |
[Docker] 가상화(Virtualization) 및 Virtual Machine과 Container 차이 (0) | 2024.05.14 |