[docker] 도커 & 쿠버네티스 개념 정리

minyeob·2023년 5월 24일
0

aws

목록 보기
6/18

1. 도커 & 쿠버네티스 입문서 정리

chapter 1. 도커란 무엇인가?

도커 : 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어

그렇다면 왜 프로그램들을 격리시켜야 할까?

서버에서는 여러 프로그램이 함께 동작하므로 설계할 때는 문제가 없었던 프로그램도 실제로 설치해보면 오류를 일으키는 경우도 있다. 이러한 문제의 원인은 대부분 프로그램 간 공유 때문에 벌어지는데 도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에서 실행되면서 발생하는 문제를 대부분 해결할 수 있다.

서버의 두가지 의미

서버 : 어떤 서비스를 제공하는것을 가리킨다.

기능적 의미의 서버 : 어떠한 기능을 제공하는것 (메일 서버, 웹 서버)

물리적 컴퓨터로서의 서버 : 물리적으로 존재하는 컴퓨터 (여러개의 기능적 서버를 둘 수 있음)

물리적 컴퓨터로서의 서버는 여러 기능적 의미의 서버를 함께 동작시키므로 도커의 장점과 관계가 있다.

컨테이너는 쉽게 옮길 수 있다.

이런 특성을 이용하면 똑같은 상태로 튜닝한 컨테이너를 팀원 전원에게 배포해 모두가 동일한 개발환경을 사용할 수 있다.

도커를 이용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있으므로 운영서버와 개발 서버의 환경차이로 인한 문제를 원천적으로 방지 할 수 있다.

도커와 가상화 기술의 차이

가상화 기술 : 메인보드,cpu,메모리 등의 물리적인 부품을 소프트웨어로 구현한 것으로, 실질적인 물리서버와 동등하므로 운영체제도 아무거나 설치 가능하고 어떤 소프트웨어를 구동해도 무방하다.

도커 : 운영체제의 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 운영체제가 될 수 밖에없다.

chapter 2. 도커의 동작 원리

도커의 구조

서버 컴퓨터(물리 서버) → 리눅스 운영체제(서버 운영체제) → 도커 엔진 → 컨테이너

컨테이너 속은 어떤 구조로 돼 있을까?

모든 컨테이너에는 ‘리눅스 운영체제 비슷한 무언가’가 들어 있다.(리눅스의 주변 부분)

참고 : 운영체제는 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할

본래 운영체제는 ‘커널’이라는 부분과 ‘그 외의 주변 부분’으로 구성 된다.

‘주변 부분’은 프로그램에서 명령을 전달받거나 커널이 실행한 결과를 프로그램에 다시 전달하는 역할을 한다.(키보드로 입력한 내용을 전달 받고 모니터에 데이터를 출력하는 것)

주변 부분을 커널과 합친것이 배포판(우분투,레드햇) 이라고 한다.. 몰랐음..

컨테이너 안에는 ‘주변 부분’만 넣고, 커널은 밑바탕에 있는 것을 빌려 쓰는 형태 때문에 도커의 가장 큰 특징인 ‘가벼움’을 얻을 수 있다.

도커의 밑바탕에는 리눅스 운영체제가 동작하는 것을 전제로 하는 구조이기 때문에 리눅스 운영체제에서만 동작할 수 있다.

도커 허브와 이미지, 그리고 컨테이너

이미지 : 컨테이너를 만드는 설계도 역할(빵틀)

도커 허브 : 인터넷 상에 도커 이미지를 모아놓은 곳

컨테이너를 생성하려면 먼저 이미지를 만들어야 한다.

이미지로만 컨테이너를 만들 수 있는 것이 아니라 컨테이너로도 이미지를 만들 수 있다.

컨테이너를 개조하여 그것을 토대로 새로운 이미지를 생산하는 것이 가능하다!

이러한 특성을 이용해 다른 물리 서버에 설치된 도커 엔진으로 컨테이너를 이동시킬 수 있다.

(이미지를 통해 컨테이너가 이동한 것과 같은 효과)

그럼 이미지는 어디서 구해야 하는 걸까?

‘도커 허브’는 공식적으로 운영되는 도커 레지스트리(도커 이미지를 배포하는 서비스)의 이름이다.

링크 : https://hub.docker.com/

누구나 자유롭게 등록 가능하기때문에 너무 많은 이미지들로 인해 이미지를 선택하는데 어려움을 느낄 수 있다.

따라서 안전한 이미지를 선택해야 하는 방법에 대해 알아보자.

  1. 공식 이미지를 사용한다
  2. 커스텀 이미지를 직접 만들어 사용한다.

도커를 사용할 때의 원칙 중 하나로, ‘한 컨테이너에 한 프로그램’이라는 것이 있다.

보안 및 유지 관리 측면에서 유리 하기 때문에

따라서 모든 프로그램이 담긴 컨테이너를 만들 순 있지만 도커의 이점을 얻기 어렵다.

추가 : 컨테이너를 구성할 때 주변 부분의 버전 및 배포판을 하나로 통일 해야 할까?

그렇지 않다. 호스트 컴퓨터 ↔ 컨테이너 , 컨테이너 ↔ 컨테이너 간에 배포판이나 버전 차이가 있어도 아무 문제가 없기 때문에 서로 다른 배포판을 사용할 수 있다.

도커 컨테이너의 생애주기와 데이터 저장

도커 컨테이너는 ‘쓰고 버리는’ 일회용품이다.

새로운 버전이 나오면 컨테이너 마다 업데이트 하는 것 보다는 새로운 버전의 컨테이너를 만드는 것이 유지보수 측면에서 좋다.

컨테이너를 폐기하면 그안에 있던 파일들은 사라지게 된다.. 곤란한데..

이런 일을 방지하기 위해 보통은 도커가 설치된 물리적 서버(호스트)의 디스크를 마운트해 이 디스크에 데이터를 저장한다.

이러한 특성을 통해 운영체제나 소프트웨어 부분은 컨테이너 형태로 만들었다가 쓰고 버리는 것을 반복하고 , 데이터는 다른 곳에 저장해두고 같은 것을 계속 사용한다.

도커의 장점과 단점

환경을 격리할 수 있다 라는 것이 가장 큰 핵심이다 이로 인해

  1. 독립된 환경 : 여러개의 컨테이너를 띄우기, 똑같은 애플리 케이션 띄우기
  2. 이미지를 만들 수 있다 : 교체가 쉽다, 업데이트가 쉽다, 환경 이동, 개발환경 구축이 쉽다
  3. 컨테이너에 ‘커널을 포함시킬 필요가 없다’ : 가볍다, 원하는 배포판 사용 가능

도커의 장점 :

  • 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다,
  • 서버 관리가 용이하다
  • 서버 고수가 아니어도 다루기 쉽다

도커의 단점 :

  • 리눅스용 소프트웨어 밖에 지원하지 않는다
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향이 미친다
  • 컨테이너를 하나밖에 사용하지 않는 다면 도커 엔진은 오버헤드다.

도커의 주 용도 :

  • 팀원 모두에게 동일한 개발환경 제공하기
  • 새로운 버전의 테스트
  • 동일한 서버가 여러 대 필요한 경우
profile
백엔드 개발자를 꿈꾸며 공부한 내용을 기록하고 있습니다.

0개의 댓글