Continuous Challenge

[Docker] 도커(Docker) 시작하기 본문

Programming/[2020] Docker Project

[Docker] 도커(Docker) 시작하기

응굥 2020. 3. 11. 16:41
728x90
728x90
  • 도커란 무엇인가?

도커는 2013년 3월 Docker, Inc 에서 출시한 오픈 소스 컨테이너 프로젝트이며, 현재 전세계적으로 큰 인기를 끌고 있다.

또한 AWS, Google Cloud Platform, Microsoft Azure 등의 클라우드 서비스에서 공식으로 지원하고 있다.

 

  • 도커는 왜 인기를 끌게 되었나?

1. 복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행할 수 있다.

2. 개발, 테스트, 서비스 환경을 하나로 통일하여 효율적으로 관리할 수 있다.

3. 컨테이너(이미지)를 전 세계 사람들과 공유할 수 있다.

 

  • 어떻게 가능할까?

1. 리눅스 커널에서 제공하는 컨테이너 기술을 이용한다.

2. GitHub와 비슷한 방식의 Docker Hub를 제공한다.

 

  • 컨테이너 기술이란?

컨테이너는 가상화보다 훨씬 가벼운 기술이다.


가상머신과 도커

 

  • 가상머신의 등장

컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도로 1960년대에 가상화 개념이 처음 등장하였다.

컴퓨터 성능이 급격히 좋아지면서 PC에서도 흔히 사용하게 되었다. (예 - 맥에서의 인터넷 뱅킹)

 

서버의 성능은 더욱 좋아졌다. 그러다 보니 서버가 대부분의 시간을 낭비하게 된다.

-> 서버에 가상 머신을 여러 개 띄워서 일을 시키자

또한, IT 기술이 보편화되면서 서버도 많아졌다. 

-> 서버 자체를 가상 머신에 집어넣어서 돌리자

가상 머신에 각종 서버 프로그램, DB 등을 설치하여 애플리케이션이나 웹사이트를 실행

미리 구축한 가상 머신 이미지를 여러 서버에 복사하여 실행하면 이미지 하나로 서버를 계속 만들어낼 수 있음

=> 가상화 기술을 이용하여 서버를 임대해주는 서비스가 클라우드 서비스

 

그런데, 가상머신은 컴퓨터를 통째로 만들어내다 보니 각종 성능 손실이 발생하는 문제가 있다.

그리하여 인텔과 AMD는 CPU 안에 가상화 기능을 넣기 시작했지만 그래도 여전히 성능이 좋지 못하였다. (느림)

=> 호스트와 커널을 공유하는 반가상화 기술이 등장했다.

하지만, 가상머신은 항상 게스트 OS를 설치해야 한다.

- 이미지 안에 OS가 포함되기 때문에 이미지 용량이 커지기 때문에 네트워크로 가상화 이미지를 주고받는 건 꽤 부담스럽다.

- 오픈소스 가상화 소프트웨어는 OS 가상화에만 주력하기 때문에 배포와 관리 기능이 부족하다.

 

이러한 가상머신의 성능 문제로 인해 리눅스 컨테이너가 등장하였다.

 

  • 리눅스 컨테이너(LXC)

리눅스 컨테이너는 컨테이너 안에 가상 공간을 만들지만 실행 파일을 호스트에서 직접 실행한다.

이는 리눅스 커널의 cgroups와 namespace가 제공하는 기술이다.

 

도커(Docker)는 리눅스 컨테이너를 사용한다.

- 초기에는 LXC(Linux Container)를 기반으로 구현하였다.

- 버전 0.9부터는 LXC를 대신하는 libcontainer를 개발하여 사용하였다.

- 실행 옵션으로 선택 가능하다.

 

  • 도커의 특징

도커는 게스트 OS를 설치하지 않는다.

- 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치

- 이미지 용량이 크게 줄어듦

- 호스트와 OS 자원(시스템 콜)을 공유

 

  • 도커의 성능

도커는 하드웨어 가상화 계층이 없음

- 메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상 머신에 비해 월등히 빠름

- 호스트와 도커 컨테이너 사이의 성능 차이가 크지 않음(오차 범위 안)

 

그리고 도커는 이미지 생성과 배포에 특화되어 있다.

- 이미지 버전 관리도 제공하고 중앙 저장소에 이미지를 올리고 받을 수 있다. (push/pull)

- GitHub와 비슷한 형태로 도커 이미지를 공유하는 Docker Hub를 제공한다.

또한, 다양한 API를 제공하여 원하는 만큼 자동화가 가능하여 개발과 서버 운영에 매우 유용하다.

 

  • 도커 이미지와 컨테이너

- 베이스 이미지 : 리눅스 배포판의 유저랜드만 설치된 파일. 보통 리눅스 배포판 이름으로 되어 있다. 또는, 리눅스 배포판 유저랜드에 Redis나 Nginx 등이 설치된 베이스 이미지도 있다.

(유저랜드 : OS는 메모리 사용을 기준으로 커널 공간과 유저 공간으로 나눌 수 있다. 유저 공간에서 실행되는 실행파일과 라이브러리를 유저랜드(userland)라고 한다. 리눅스는 커널만으로 부팅할 수 없으므로 부팅에 필요한 최소 실행파일과 라이브러리 조합을 뜻하기도 한다. 보통 리눅스 배포판에서 유저랜드는 부팅에 필요한 실행 파일과 라이브러리 그리고 고유의 패키징 시스템을 포함한다.)

- 도커 이미지 : 베이스 이미지에 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 파일 하나로 만든 것을 의미. 도커 이미지는 베이스 이미지에서 바뀐 부분만 이미지로 생성하고, 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행한다. 도커에서는 이를 레이어라고 한다.

 

이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태이며, 저장소에 올리고 받는 건 이미지이다.

컨테이너는 이미지를 실행한 상태이며, 이미지로 여러 개의 컨테이너를 만들 수 있다.

(운영체제에 비유하면 이미지는 실행파일이고, 컨테이너는 프로세스이다.)

 

  • 도커는 이미지의 바뀐 부분을 어떻게 관리하는가?

유니온 파일 시스템 형식(aufs, btrfs, devicemapper)

 

도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성한다.

컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행한다.

Docker Hub 및 개인 저장소에서 이미지를 공유할 때 바뀐 부분만 주고 받는다.

 

  • 서비스 운영 환경과 도커

지금까지의 서버 환경

-  지금까지는 물리 서버를 직접 운영하였다.

- 호스팅 또는 IDC 코로케이션 서비스를 사용하였다.

- 서버 구입과 설치에 돈이 많이 들고 시간이 오래 걸렸다.

 

가상화가 발전하면서 클라우드 환경으로 변화하였다.

- 가상 서버를 임대하여 사용한 만큼만 요금을 지불한다.

- 클릭 몇 번 만으로 가상 서버를 생성한다.

- 자동으로 서버를 추가하고 삭제하기까지 가능해졌다.

 

  • 서버 배포는 어떻게?

Immutable Infrastructure 이라는 패러다임 등장

호스트 OS와 서비스 운영 환경(서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리

한 번 설정한 운영 환경은 변경하지 않는다(Immutable)는 개념

 

서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행

서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포

클라우드 플랫폼에서 서버를 쓰고 버리는 것과 같이 Immutable Infrastructure도 서비스 운영 환경 이미지를 한 번 쓰고 버림

 

Immutable Infrastructure의 장점

편리관리

- 서비스 환경 이미지만 관리하면 됨

- 중앙 관리를 통한 체계적인 배포와 관리

- 이미지 생성에 버전 관리 시스템 활용

확장

- 이미지 하나로 서버를 계속 찍어낼 수 있음

- 클라우드 플랫폼의 자동 확장(Auto Scaling) 기능과 연동하여 손쉽게 서비스 확장

테스트

- 개발자 PC, 테스트 서버에서 이미지를 실행만 하면 서비스 운영 환경과 동일한 환경이 구성됨

- 테스트가 간편

가볍다 - 운영체제와 서비스 환경을 분리하여 가볍고(Lightweight) 어디서든 실행가능한(Portable) 환경 제공

 

  • 도커(Docker)

고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고 이미지 저장과 배포(운반)을 의미한다.

도커(Docker)는 부두 노동자를 뜻하는데 이는 컨테이너를 다루는 도커의 기능과 비슷하다.

 

도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술이다.

 

 

(참고 : https://www.slideshare.net/pyrasis/docker-fordummies-44424016 )

 

도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!

도커 무작정 따라하기 - 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다! 도커의 기본 개념부터 설치와 사용 방법까지 설명합니다. 더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~ http://www.pyrasis.com/private/2014/11/…

www.slideshare.net

 

728x90
728x90
Comments