Docker란?

바다·2024년 6월 18일
0

CS

목록 보기
2/2
post-thumbnail

1. Docker란 무엇일까?

개발 공부를 시작하면 자주 듣게 되는 Docker !
개인 프로젝트를 진행하며, 개발환경을 분리하고 싶다는 생각에 Docker에 대해서 알아보기 시작했는데 내가 생각했던 것보다 훨씬 편리하고 중요한 개념인 것 같아 정리를 해보려고 한다!

Docker

DockerContainer기반 가상화 플랫폼으로, 응용 프로그램과 그 종속성을 격리된 환경인 Container로 패키징하여 실행하는 기술이다.

이를 통해 응용 프로그램을 서로 다른 환경에서도 일관되게 실행할 수 있고, 개발 환경과 운영 환경 사이의 차이로 인한 문제를 줄일 수 있다! 도커 컨테이너는 가볍고 빠르며 확장성이 좋아서 개발 및 배포 프로세스를 간소화하는 데 사용된다.

Docker Engine

Docker Engine은 컨테이너를 생성하고 관리하는 주체로서, 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트이다. 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에, 도커의 핵심은 도커 엔진이라고 할 수 있다

Container

Container는 가상화 기술 중 하나로, 대표적으로는 LXC(Linus Container)가 있다. 기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어진다.


2. Virtual Machine (가상 머신) vs Docker Container (도커 컨테이너)

기존에도 가상 머신은 있었는데요?

기존에도 가상화 기술은 존재해 왔는데, 왜 Docker를 사용하는 걸까?

VM

  • 호스트 운영체제 위에 가상화된 하드웨어 계층을 생성하고, 각 가상 머신은 독립된 운영체제, 커널, 드라이버 등을 가진다
  • 이로 인해 무겁고 높은 자원 소비가 필요하다
  • 운영체제의 부팅 과정이 필요하므로 시간이 오래 걸린다
  • 독립된 운영체제를 가지므로 메모리, 디스크 공간 등 자원을 많이 소비한다

Docker Container

  • Docker Container는 호스트 운영체제의 커널을 공유하며, 가볍게 격리된 환경을 생성한다
  • VM보다 더 가벼우며 효율적으로 실행이 가능하다
  • 이미지와 컨테이너 레이어를 사용하여 빠르게 생성되며, 실행 속도가 매우 빠르다
  • 컨테이너는 호스트 운영체제의 커널을 공유하므로 가볍고 효율적으로 자원을 활용한다

결론적으로, Docker Container는 가상화된 공간을 생성할 때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 없고,
가상 머신과 달리 커널을 공유해서 사용하기 때문에 용량이 작고,
위와 같은 이유 때문에 컨테이너를 이미지로 만들었을 때 배포하는 시간이 VM에 비행 빠르고, 사용할 때 성능의 손실 또한 거의 없다


3. Docker를 사용하는 이유

1) 환경 일치성

다양한 환경에서 동일한 실행 환경을 보장한다.
개발 환경과 운영 환경의 차이로 인한 문제를 방지하며, 응용 프로그램을 어디서든 실행할 수 있다.

2) 편리한 배포

도커 컨테이너는 이미지로 패키징되어 배포되기 때문에, 어플리케이션 배포가 간단해진다.
이미지를 공유하거나 배포할 때 용이하며, 빠른 확장이 가능하다.

3) 격리된 환경

도커는 각 컨테이너를 격리된 환경으로 실행하므로, 하나의 컨테이너에서 발생한 문제가 다른 컨테이너에 영향을 주지 않는다.

4) 자원 효율성

VM과 비교했을 때, 더 가볍고 빠르며 호스트 시스템의 리소스를 효율적으로 활용할 수 있다.

5) 스케일링

컨테이너 기반 아키텍처는 쉬운 스케일링이 가능하기 때문에, 요구에 따라 응용 프로그램을 확장할 수 있다.


4.Docker Image

Docker Image란 컨테이너를 실행할 수 있는 실행파일 ,설정 값들을 가지고 있는 것이라고 생각하면 된다.

  • 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있다
  • 컨테이너에 따른 상태값이 변하지 않으므로 라이브러리의 버전이 의도치 않게 바뀜에 따른 의존성 문제가 발생하지 않는다
  • 컨테이너는 이미지를 실행한 상태이며, 변하는 값은 컨테이너에 저장된다 (이미지는 변하지 않는다.)
  • 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있다

5. Docker File

Docker FileDocker Image 생성 과정에 대해 기술한 파일

  • 이미지를 만들고 실행하는 데 필요한 단계를 정의한 간단한 구문
  • Docker File의 각 명령어는 이미지에 레이어를 만든다

6. Docker Registry

Docker Image를 저장하고, Docker hub 이라는 public 레지스트리와 private 레지스트리가 있다.

일반적으로 고용 레지스트리에서 실행한다

docker pull, docker run -> 필수 이미지를 가져온다
docker push -> 레지스트리에 저장한다

7. Docker 사용 방법

1) Docker Image 빌드

Dockerfile을 작성하여 도커 이미지를 생성

2) Docker Container 실행

이미지를 기반으로 도커 컨테이너를 실행

3) Container 네트워킹

도커 컨테이너 간의 통신을 위해 네트워크 설정을 구성
필요한 호스트와 컨테이너 간의 포트 매핑을 설정

4) Container 관리

도커 컴포즈를 사용하여 여러 컨테이너를 정의하고 관리

5) 이미지 공유 및 배포

빌드한 이미지를 도커 레지스트리에 업로드하거나, 다른 개발자와 공유


공부할 때 참고한 영상들.. ⭐️

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글