[Docker] 2. 도커의 동작 원리 & 도커의 허브, 이미지

sorzzzzy·2022년 4월 28일
6

Docker&Kubernetes

목록 보기
2/12
post-thumbnail

🏷 도커의 동작 원리

도커의 구조

도커의 구조를 자세히 살펴보자.

일단 물리 서버가 있고, 이 물리 서버에서 동작하는 리눅스 운영체제가 있다.
여기까지는 일반 서버와 다를 바 없다.

일반적인 서버라면, 운영체제 위에 프로그램이나 데이터가 직접 올라가겠지만,
도커를 사용하는 경우에는 운영체제 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작한다.
프로그램이나 데이터는 컨테이너 안에 위치한다.

✔️ 컨테이너 안에는 운영체제 '비슷한 것'이 들어있다

컨테이너 안은 어떤 구조로 되어있는지 알아보자.

사실 정말로 텅 빈 컨테이너는 의외로 잘 사용되지 않고, 모든 컨테이너들 안에는 '리눅스 운영체제 비슷한 무언가'가 들어있다.

'리눅스 운영체제 비슷한 무언가' 라고 한 이유는 실제 운영체제가 아닌 정말 비슷한 무언가이기 때문이다.

본래 운영체제는 커널그 외의 주변 부분으로 구성된다.
주변 부분이 프로그램의 연락 내용을 커널에 전달하고 커널이 하드웨어를 다룬다.

도커에서는 컨테이너가 완전히 분리되어 있으므로 밑바탕이 되는 리눅스 운영체제의 주변부분이 컨테이너 속 프로그램의 명령을 전달받을 수 없다.
따라서 컨테이너 속에 운영체제의 주변 부분이 들어있어 프로그램의 명령을 전달받고 이를 커널에 전달하는 구조로 되어있다.

컨테이너 속에 '리눅스 운영체제 비슷한 것'이 들어있다고 표현한 이유가 바로 이것이다!
전체 리눅스 운영체제가 들어있는 것이 아니라 주변 부분만 들어있기 때문이다.

간단하게 운영체제 전체를 컨테이너를 넣어도 되지 않을까? 싶지만,
주변 부분만 컨테이너에 넣고 커널은 밑바탕에 있는 것을 빌려쓰는 형태 덕분에 도커의 가장 큰 특징인 가벼움을 얻을 수 있다.


도커는 기본적으로 '리눅스용' 이다

✔️ 컨테이너에 들어가는 프로그램은 리눅스용 이어야 한다

도커는 기본적으로 리눅스 운영체제에서만 동작한다.
도커는 밑바탕에서 리눅스 운영체제가 동작하는 것을 전체로하는 구조로 되어있기 때문이다.

또 컨테이너 안에 들어있는 주변 부분도, 컨테이너에서 실행할 소프트웨어(프로그램) 또한 모두 리눅스용 이어야 한다.
윈도우나 macOS용 소프트웨어는 컨테이너에 넣어도 동작하지 않는다.

즉, 도커는 리눅스 컴퓨터에 독립적인 환경을 만드는 것이며, 리눅스에서만 동작하고 컨테이너에서 동작할 프로그램도 리눅스용 프로그램이다.

도커에 대한 이야기는 대부분 서버 환경을 전제로 한 것이 많은데,
리눅스 운영체제가 서버에서 사용되는 경우가 많고, 리눅스용 소프트웨어도 서버용 소프트웨어가 많기 때문이다.


✔️ 윈도우와 macOS에서 도커 구동하기

위에서 알아본 바로는, 도커는 리눅스 운영체제를 사용한다는 전제로 구조되었기 때문에 윈도우나 macOS 운영체제를 사용하는 컴퓨터에서는 도커를 사용할 수 없어야 한다.

그러나 실제로는 윈도우와 macOS에서도 도커를 사용할 수 있는데 크게 두 가지 경우가 있다.

  1. VirtualBox 또는 VMware 와 같은 가상환경 위에 리눅스 운영체제를 설치하고, 그 위에서 도커를 실행하는 방법
  2. 윈도우용 또는 macOS용 도커 데스크톱과 같은 도커를 실행하는 데 필요한 리눅스 운영체제를 포함하는 패키지를 설치해 사용하는 방법

간단히 말하면 윈도우나 macOS 위에 리눅스 운영체제를 끌어들여 도커를 실행하는 것이다.

도커를 사용하려면 어떤 형태로든 리눅스 운영체제를 갖춰야 한다는 것을 기억하자!


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

도커 허브와 도커 이미지를 알아보자.
간단히 설명하면 이미지는 컨테이너를 만드는 '빵틀' 과 같은 것이고, 도커 허브는 인터넷 상에 도커 이미지를 모아놓은 곳이다.

도커의 장점은 도커 허브와 이미지에서 기인하는 바가 크다.

이미지와 컨테이너

컨테이너를 생성하려면 먼저 이미지를 만들어야 한다.
이미지는 컨테이너를 찍어내는 '빵틀' 과 같은 것으로, 컨테이너의 설계도 역할을 한다.

✔️ 이미지는 금형과 같다

로봇 장난감을 원하는 아이에게 로못을 만드는 금형은 아무 필요가 없는 것처럼, 이미지 또한 이미지 자체로는 큰 쓸모가 없다.

이미지는 컨테이너를 만드는데 사용한다.
우리가 실제 사용하는 것은 컨테이너이며, 이미지를 그대로 사용하는 일은 없다.

이미지는 하나만 있으면 똑같은 것을 여러 개 만들 수 있으며, 따라서 동일한 컨테이너를 여러 개 배치하기 편하다.


✔️ 컨테이너로도 이미지를 만들 수 있다

이미지로만 컨테이너를 만들 수 있는 것이 아니라 컨테이너로도 이미지를 만들 수 있다.
이는 이미 만든 컨테이너에 손을 대서 컨테이너의 금형을 새롭게 만드는 과정이다.

이게 무슨 의미가 있나 싶을 수 있지만(?) 생각해보자.
컨테이너로부터 이미지를 만들 수 없다면, 수정 사항에 대해 여러개의 컨테이너를 일일이 수정해야 했을 것이다.

개조된 컨테이너로부터 이미지를 다시 만들고 나면, 새로 만든 이미지를 사용해 개조된 컨테이너를 여러 개 만들 수 있다.

정리하자면, 새로운 이미지를 사용해 개조된 컨테이너를 대량으로 만들 수 있게 된다.


✔️ 도커 엔진 간에 이동이 가능하다

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

컨테이너는 도커 엔진만 있으면 구동이 가능하므로,
다른 서버나 컴퓨터에 도커 엔진을 설치하고 새로운 도커 엔진에 이미지를 이용해 컨테이너를 생성하면 된다.

사실상 컨테이너 자체가 이동하는 것은 아니지만 이미지를 통해 컨테이너가 이동한 것과 같은 효과를 얻을 수 있다.


도커 허브와 도커 이미지

초보자가 컨테이너의 이미지를 처음부터 하나하나 만들어 낼 일은 사실상 거의 없다.
굳이 만든다면 빈 컨테이너에 운영체제(비슷한 것)를 포함시켜 만드는 경우는 있겠지만, 이런 경우에도 이미지는 주어진다.

그렇다면 이미지는 어디서 구해야 할까🤔?

✔️ 도커 허브란?

도커 허브는 공식적으로 운영되는 도커 레지스토리(도커 이미지를 배포하는 서비스)의 이름으로, 공개된 컨테이너의 이미지가 모여있는 곳이다.

도커 허브는 스마트폰의 앱스토어와 같은 존재로 다양한 공개 컨테이너 이미지가 제공된다.
누구든지 이미지를 등록하고 공개하는 등 편리하게 이용할 수 있고, 이미지의 종류도 다양하다.

도커 허브 - https://hub.docker.com/


✔️ 도커 허브에는 어떤 이미지가 공개돼 있을까?

도커 허브에는 매우 다양한 이미지가 존재한다.

  • 운영체제(비슷한것)만 들어 있는 이미지
  • 소프트웨어가 포함된 이미지
  • 소프트웨어가 여러 개 포함된 이미지

직접 수정하고 싶다면 간단한 이미지를, 편리하게 사용하고 싶다면 설정이 완료된 이미지 등 용도에 따라 원하는 이미지를 선택하면 된다.

같은 소프트웨어라도 다양한 변종의 이미지가 제공된다.
따라서 운영체제(비슷한것)와 소프트웨어의 조합은 버전에 따라 더 다양해진다.


✔️ 안전한 컨테이너 이미지를 고르는 법

이미지의 종류가 다양하다 보니 이미지를 고를 때 어려움을 느낄 수 있다.
또한 도커 허브는 누구나 자유롭게 이미지를 등록할 수 있기 때문에 안전하지 못한 이미지가 있을 수 있다.

안전한 이미지를 선택하는 주요 방법을 살펴보자.

1. 공식 이미지를 사용한다

  • 공식 이미지 : 도커에서 직접 배포 or 해당 소프트웨어를 개발/관리하는 기업이나 조직에서 제공하는 이미지
  • 공식 이미지를 사용하면 이미지 선택도 쉽고 보안도 챙길 수 있음
    ➡️ 특정 운영체제 및 버전을 사용해야 하는 상황인지 아닌지는 사전에 확인 필요

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

  • 필요한 최소한의 요소가 담긴 이미지에 필요한 소프트웨어를 추가로 설치해 커스텀 이미지 생성 가능
  • 운영체제(비슷한것)가 포함된 이미지에 소프트웨어를 넣은 정도는 그렇게 복잡하지 않음

잠깐🤚🏻 공식 이미지가 아닌 모든 이미지가 안전하지 않다는 의미는 아니다.
경험이 쌓일 때까지는 섣불리 판단하지 말고 신중하게 이미지를 선택해 사용하도록 하자!


✔️ 다양한 형태로 조합이 가능한 컨테이너

컨테이너는 이미지의 선택 외에도 다양한 조합을 고려해야 한다.

도커를 사용할 때 원칙 중 하나로, "한 컨테이너에 한 프로그램" 이라는 말이 있다.
말 그대로 하나의 프로그램만 담긴 컨테이너를 사용한다는 의미로, 보안 및 유지 관리 측면에서 유리하기 때문에 많이 쓰인다.

따라서 단순히 워드프레스를 구축한다고 가정했을 때에도 다양한 구성이 가능해진다.

워드프레스를 사용하기 위해서는 아파치(웹 서버 SW), MySQL과 같은 DBMS, 워드프레스로 세 가지 소프트웨어가 필요하다.

도커를 사용해 워드프레스를 구축하는 방법은,

  1. 각각 별도의 컨테이너로 구성하는 방법
  2. 한 컨테이너에 모두 집어넣는 방법

위와 같이 두 가지가 존재한다.



도커 포스팅을 정리하다 지인에게 선물받은 귀여운 아이템 하나 자랑하려고 한다.

바로
.
.
.
.
.
도커 각티슈!!!!!!!!!!!!!!!!!!!!!
도커 컨테이너처럼 생겨서 어디서 샀냐고 귀엽다고 했더니 바로 보내줘버리는ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

분해(?)되서 배송온 거 보고 이걸 어쩌나.. 했는데 5분만에 조립하고 팀원들과 같이 쓰려고 책상 한 가운데에 뒀다!

옆면도 매우 매우 도커 그 "자체"


나보다 팀원분들이 더 좋아하시고 주변에 개발자 친구들도 다 흥미로워 하는 거 같아서 선물 할까도 생각중이다ㅎㅎ
개발자라 그런지 이런 종류의 제품들이 있으면 별 거 아니더라도 눈이 가는 건 어쩔 수 없나보다^_^

https://incatos.shop/surl/O/11
구매는 여기서 가능하다!

profile
Backend Developer

2개의 댓글

comment-user-thumbnail
2023년 5월 5일

도커 휴지케이스 귀엽네요 ㅋㅋ
도움 많이 받고 갑니다!

답글 달기
comment-user-thumbnail
2023년 10월 21일

도움이 되었으니 하트 꾸욱 누르고 갑니다!

답글 달기