article thumbnail image
Published 2024. 1. 30. 21:36

https://www.udemy.com/course/docker-kubernetes-2022/

강의를 참고하였습니다.

Docker란

컨테이너를 생성하고 관리하기 위한 도구

 

컨테이너를 왜 사용해야할까

소프트웨어 개발에서 컨테이너는 표준화된 소프트웨어 유닛

기본적으로 코드 패키지이며 해당 코드를 실행하는데 필요한 종속성과 도구가 포함되어 있다.

 

도커로 빌드된 컨테이너가 있는 javascript 애플리케이션의 경우

해당 컨테이너에는 애플리케이션 소스 코드 뿐만 아니라 NodeJS 런타임 그리고 코드를 실행하는데 필요한 기타 도구가 있을 수 있다.

 

똑같은 컨테이너는 어디에서 누가 실행하든 항상 똑같은 동작을 실행한다.

 

따라서 도커를 정리하면 단순히 컨테이너를 생성하고 관리 프로세스를 단순화하는 도구라고 정리할 수 있다.

 

왜 컨테이너인가

우리는 왜 소프트웨어 개발에서 독립적이고 표준화된 애플리케이션 패키지를 원하는 걸까?

  1. 우리는 종종 다른 개발 환경을 가지게 되는데 도커는 개발 환경이든 프로덕션 환경이든 똑같이 만들어 줄 수 있다.
    1. Node.js 버전에 따라서 실행되지 않을 수 있다.
  2. 팀과 회사의 개발 환경에서 더 복잡한 종속성이 있는 프로젝트를 관리해야하는 경우
  3. 여러 프로젝트가 충돌하는 경우

 

Virtual Machine vs Docker Container

재현 가능한 환경적인 문제는 가상 머신을 통해 해결할 수 있지 않나?

 

가상 머신을 사용한다는건 호스트 운영체제 위에 가상 머신을 설치한다는 것

가상 머신에는 가상 머신 내부에서 실행되는 가상OS가 존재함

→ 가상으로 존재하는 다른 머신이기 때문에 원하는 무엇이든 설치가 가능

 

가상OS를 지닌 여러 버츄얼 머신에서 발생하는 오버헤드

 

VM이 여러 개 존재하는 경우 매번 새로운 컴퓨터를 머신 내부에 설치해야하고 설치한 가상 환경 자체도 컴퓨팅 파워를 사용하기 때문에 비효율적

→ 애플리케이션을 실행하는 환경에서 필요없지만 디폴트로 항상 동일하게 복제되는 많은 것들이 여전히 존재하게 되어 공간을 낭비하게 됩니다.

 

가상머신의 장단점

장점

  1. 분리된 환경
  2. 환경별 구성을 가질 수 있다.
  3. 환경 설정은 공유 및 신뢰성있게 재생성 될 수 있다.

단점

  1. 중복 복제, 낭비되는 공간이 발생하게 됩니다.
  2. 호스트 시스템 위에 추가 시스템이 실행되므로 성능 저하가 발생할 수 있습니다.
  3. 재생산 및 공유가 가능하더라도 원하는 모든 시스템에 가상머신을 설정해야하고 정확히 동일한 방식으로 구성해야 하기 때문에 까다로울 수 있습니다. 쉽게 공유할 수 있는 단일 구성 파일이 없습니다.

VM 혹은 개발 환경에서 프로덕션 환경으로 애플리케이션을 배포하려면 가상머신과 동일한 방식으로 프로덕션 머신을 구성해야합니다.

 

따라서 컨테이너가 이 문제를 해결 해줄 수 있고 도커는 단순히 컨테이너를 관리하기 위한 표준 도구라는 것이라고 생각하면 됩니다.

 

컨테이너가 VM보다 더 나은 이유

컨테이너를 사용하면 호스트 운영체제가 존재하지만 하나의 머신에 몇 대의 가상 머신을 설치하지 않습니다.

단순히 운영체제가 기본적으로 내장하고 있거나 컨테이너 에뮬레이트를 지원하는 내장 컨테이너를 활용합니다.

 

그 위에 도커 엔진을 실행하고 도커 엔진을 기반으로 컨테이너를 실행합니다

도커 엔진은 단순히 가벼운 도구일 뿐이고 여러 개의 컨테이너를 스핀업할 수 있습니다

 

이러한 컨테이너 안에는 코드와 중요한 도구 및 런타임 엔진이 포함되어 있지만 필요없는 도구나 운영체제의 모든 것 혹은 그와 유사한 것은 포함하지 않습니다.

 

또한 컨테이너의 좋은 점은 구성 파일을 사용하여 컨테이너를 구성하고 컨테이너를 설명할 수 있다는 것입니다.

이를 통해 다른 사람들이 해당 컨테이너를 사용할 수 있게 하고 이미지라 불리는 것을 통해 빌드할 수 있습니다.

이미지를 통해 다른 사람과 공유하여 모든 사람이 자신의 시스템에서 우리가 만든 컨테이너와 동일한 컨테이너를 시작할 수 있습니다.

 

 

도커 가상머신
운영 체제와 시스템에 미치는 영향이 적기 때문에
매우 빠르고 효율적입니다
운영체제에 많은 영향을 주고 속도가 느리며 비효율적인
구성을 가집니다
이미지와 구성 파일이 있기 때문에 공유하거나 재구축, 배포하는 것이 매우 쉽습니다. 공유, 재구축 및 배포를 수행할 순 있지만 컨테이너와 도커보다
까다롭습니다
앱에 필요한 모든 것을 캡슐화한 앱과 환경을 구성하지만
쓸데없이 부가적인 것은 없습니다.
환경을 캡슐화하지만 앱과 앱을 실행하는 환경 뿐 아니라 전체 가상머신 환경을 캡슐화합니다.

 

도커 setup

구운영체제는 Docker Toolbox를 설치해야함

 

Mac

  • Docker Toolbox
  • Docker Desktop

Windows

  • Docker Toolbox
  • Docker Desktop

Linux

  • Docker Engine

리눅스는 도커가 사용하는 기술과 컨테이너를 기본적으로 지원함

 

 

Docker Tools & Building Blocks

운영체제가 도커를 지원한다면 가상 머신이 필요없다.

  • Docker Engine
    • 컨테이너화된 애플리케이션을 생성하고 관리하기 위한 도구
  • Docker Desktop
    • 실제로 Docker Engine이 설치되고 작동하는지 확인하는 도구
    • 데몬이라고 불리는 프로세스를 포함하는데, 백그라운드에서 계속 실행되며 도커가 작동하는지 확인
  • Docker Hub
    • 웹에서 이미지를 호스팅하여 다른 시스템과 사람들에게 공유할 수 있게 해줌
  • Docker Compose
    • 도커를 기반으로 복잡한 컨테이너 또는 다중 컨테이너 프로젝트를 더 쉽게 관리
  • 쿠버네티스
    • 복잡하게 컨테이너화된 애플리케이션을 배포시 관리하는데 도움을 줌

 

First-demo

  • 컨테이너에서 실행 중인 애플리케이션에 HTTP 요청을 보내려면 통신하려는 컨테이너의 포트를 열어야한다. 그렇지 않다면 컨테이너에 잠긴 네트워크이므로 외부에서 연결이 불가능하다.
# 앞에있는 3000은 호스트의 로컬 포트, 뒤에 있는 3000 도커 컨테이너 내부 포트로 매핑하는 것
docker run -p 3000:3000 995d04b8f08bdfd467e10a83fffe7ab92b97bf95ad6867575d5f290e5bc2a4ea

 

'TIL > 개념정리' 카테고리의 다른 글

이미지와 컨테이너  (2) 2024.02.03
MySQL Workbench를 통한 덤프 데이터 생성하기  (0) 2024.01.31
Terraform을 활용한 ECS와 ECR 개념정리  (1) 2024.01.13
테라폼 기초  (0) 2024.01.05
테라폼 ec2 튜토리얼  (1) 2023.12.15
복사했습니다!