ㅇ도커를 가장 쉽게 이해해 보자!
Docker (도커)
Docker의 사전적 의미: 부두에서 컨테이너를 다루는 노동자
→ 컨테이너라는 게 도커를 이해하는데 중요한 개념이 된다.
근데 왜 로고에 고래가?
→ 그냥 고래가 회사를 잘 나타내서 쓴 듯..
(고래가 많은 콘테이너를 당신에게 전달하기 위해 나르고 있다는 뜻을 갖고있는다고 한다)
“the whale is carrying a stack of containers on its way to deliver those to you”.
Container 가 뭔데??
우리는 선박 컨테이너가 가장 먼저 떠오를 것이다.
컨테이너는 다양한 물건을 저장하고, 목적지까지 운반하는 데 사용한다.
이러한 컨테이너의 개념을 컴퓨터, 소프트웨어 상에서 이용하기 때문에 도커라는 게 있다.
Software 분야의 컨테이너
소프트웨어 분야의 컨테이너도 비슷한 개념이다.
소프트웨어 개발에 필요한 코드나 버전 세팅 같은 것들을 싹 다 한꺼번에 묶어서 컨테이너로 만든다.
컨테이너를 통해 다른 컴퓨터 환경이나 서버에서 운반할 수 있게 된다.
Docker를 사용하는 이유
컨테이너는 알겠는데... Docker는 근본적으로 왜 사용하는 거지??
Application의 개발과 배포가 편해진다.
- Application 환경(OS)을 한꺼번에 패키징하기때문에 편하다.
- Application 환경(OS)에 구애받지 않기 때문에 개발이 편리해진다.
- 여러 노트북에서 쉽게 (localization) 개발환경을 구축할 수 있다.
- 개발/테스트/프로덕션에서 소프트웨어 실행환경들의 차이를 작게 할 수 있다.
- 가볍기 때문에 사용하기 쉽고 리소스의 이용 효율도 좋다
e.g. Application 환경이 다를 경우
맥북으로 개발하다가 윈도우 컴퓨터로 개발해야 할 경우, 파일들을 이동시켜서 실행했는데 실행이 안됨.
→ 애플리케이션 환경(OS)이 다르기 때문에 개발에 문제가 생김.
Docker의 개념
Docker란 컨테이너 기반의 오픈소스 가상화 플랫폼이다
참고 내용
- Pycon US 2013에서 dotCloud의 창업자인 Solomon Hykes이 처음 소개
→ Docker 인기 많아지자 회사이름도 바꿈 - 현재 Go언어로 작성된 Linux 기반의 Container RunTime 오픈소스
→ 리눅스에서 유래된 기술 - 구글, 아마존, 마이크로소프트에서도 도커를 지원하고 있다
→ 업계에서 인정받고 많이 애용중
Container
- Container는 격리된 공간에서 프로세스가 동작하는 기술
→ 다른 OS에서도 문제 없이 개발을 가능 - Container를 만들기 위해서는 dockerfile, image라는게 필요하다.
- Container의 개념은 10년 전부터 존재했다 (도커가 콘테이너를 처음으로 만든게 아님 😱)
→ LXC, LXD ...etc라는 게 있었다
Docker vs Virtual Machine (VM)
Docker랑 가상머신(VM)이랑 혼동하기 쉽다.
하지만 둘은 다르고 차이점도 엄청 쉽다.
차이점은 그냥 개발환경 OS의 유무이다.
Docker은 기존의 OS위에서 Container Engine을 통해 가상환경을 만들어 개발한다.
VM은 가상환경을 만들때마다 OS를 설치하고 그 위에 개발한다.
VM은 새로운 OS를 설치하고 그에 필요한 세부적인 프로그램이 또 필요해서 용량을 많이 차지한다.
하지만 docker은 기존의 OS위에 바로 이용하기 때문에 용량을 덜 차지한다.
그렇게 때문에 부팅업 하는데 시간이 덜 걸린다.
Container 만드는 법
container를 만들기 위해서는 dockerfile과 image라는게 필요하다.
먼저 dockerfile에서 image를 만들고, image를 통해 container를 만드는 순서가 된다.
Dockerfile
dockerfile은 image를 생성하기 위한 용도로 작성하는 파일이다.
컨테이너를 어떻게 만들어야 하는지의 설명서와 같기 때문에 요리의 레시피라고 생각하면 이해하기 쉽다.
dockerfile 에 들어갈 내용 예시
- Application에 필요한 파일들
- 프레임워크나 라이브러리의 설치 (dependencies)
- 환경 변수 (enviroment variables)
- 어떻게 구동&실행하는지 스크립트 (run setup scripts)
Image
Image는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 Archive File이다
쉽게 말하자면 현재 구동되고 있는 Application의 내용을 캡쳐해서 이미지로 만들어 두는 것!
이렇게 만들어진 이미지는 변경이 불가능한 불변의 상태이다.
참고1) 객체지향처럼 image는 class라고 생각하고, container는 instance라고 생각하면 이해하기 쉽다
참고2) 더더더 쉽게 생각하면 그냥 image는 게임 program이라 생각하고 container는 게임 중인 process라고 생각하면 된다.
Container
컨테이너는 컨테이너
Image를 배포하는 법
Github을 이용해 봤으면 이해하기 쉬운 원리이다.
Container Registry라는 곳에 Push와 Pull을 통해 image를 주거나 받거나 한다.
Container Registry 종류
Public Registry
- Docker Hub
- Github Packages
Private Registry (특히 회사에서 자주 쓰임)
- Amazon AWS ECR
- Google Cloud Container Registry
- Microsoft Azure Container Registry
Docker Hub
도커 공식 홈페이지에서는 도커 허브를 통해 다양한 이미지를 배포하고 있다.
일종의 app store 와 비슷하다.
Container Orchestration Tools (컨테이너 오케스트레이션 툴)
여러개의 컨테이너를 한꺼번에 사용하는 Application을 실행하거나 관리하기 위한 방법
- docker-compose
- Kubernetes
Docker Compose
하나의 Host를 이용해서 여러개의 컨테이너를 조합해서 실행할 경우 사용하는 툴
Kubernetes
여러개의 Host를 이용해서 컨테이너를 적절하게 스케줄링하거나 컨테이너 자동 복구 또는 업데이트등 다양한 관리르 해주는 툴
'Docker' 카테고리의 다른 글
[Docker] Dockerfiler 작성 방법 (이미지 만드는 법) (0) | 2023.04.14 |
---|---|
Docker의 네트워크 방식 (0) | 2023.02.08 |
[Docker] 도커의 기본적인 명령어 (알아두면 좋은 것들 정리) (0) | 2023.02.06 |