도커(Docker)

문지원(JiwonMoon)·2023년 1월 23일
0

VM vs Container

목록 보기
2/2
post-thumbnail

도커(Docker)란?

도커는 애플리케이션을 신속하게 구축, 테스트 및 배포를 할 수 있는 소프트웨어 플랫폼이다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다.
Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있다.

도커(Docker)의 작동방식

도커는 코드를 실행하는 표준 방식을 제공한다. 도커는 컨테이너를 위한 운영체제이다.
가상 머신(VM)이 서버 하드웨어를 가상화하는 방식과 비슷하게 컨테이는 서버 운영체제를 가상화한다. 도커는 각 서버에 설치되며 컨테이너를 구축, 시작, 또는 중단하는 데 사용할 수 있는 간단한 명령을 제공한다.

도커(Docker)를 사용하는 이유

도커를 사용하면 코드를 더 빨리 전달하고, 애플리케이션 운영을 표준화하고 코드를 원활하게 사용가능하고 리소스 사용률을 높여 비용을 절감할 수 있다. 또한 어디에서나 안정적으로 실행할 수 있는 단일 객체를 확보할 수 있다. 마찬가지로 간단한 구문을 사용해 완벽하게 제어할 수 있다.

  1. 더 많은 소프트웨어를 더 빨리 제공
    도커의 사용자는 평균적으로 도커를 사용하지 않는 사용자보다 7배 더 많은 소프트웨어를 제공한다 도커를 사용하면 필요할 때마다 격리된 서비스를 제공할 수 있다.

  2. 운영 표준화
    작은 컨테이너식 애플리케이션을 사용하면 손쉽게 배포하고, 문제를 파악하고, 수정을 위해 롤백할 수 있다.

  3. 원할하게 이전
    도커 기반 애플리케이션을 로컬 개발 시스템에서 AWS의 프로덕션 배포로 원활하게 이전할 수 있다.

  4. 비용절감
    도커 컨테이너를 사용하면 각 서버에서 좀 더 쉽게 더 많은 코드를 실행하여 사용률을 높이고 비용을 절감할 수 있다.

도커의 동작원리

기존의 물리서버가 있고, 이 물리서버에는 동작하는 리눅스 OS가 있다.
여기까지는 일반 서버와 다를 바 없다.

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

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

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

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

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

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

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

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

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

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

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

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

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

즉, 도커는 리눅스 컴퓨터에 독립적인 환경을 만드는 것이며, 리눅스에서만 동작하고 컨테이너에서 동작할 프로그램도 리눅스용 프로그램이다.
도커에 대한 이야기는 대부분 서버 환경을 전제로 한 것이 많은데,
리눅스 운영체제가 서버에서 사용되는 경우가 많고, 리눅스용 소프트웨어도 서버용 소프트웨어가 많기 때문이다.

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

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

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

VirtualBox 또는 VMware 와 같은 가상환경 위에 리눅스 운영체제를 설치하고, 그 위에서 도커를 실행하는 방법
윈도우용 또는 macOS용 도커 데스크톱과 같은 도커를 실행하는 데 필요한 리눅스 운영체제를 포함하는 패키지를 설치해 사용하는 방법
간단히 말하면 윈도우나 macOS 위에 리눅스 운영체제를 끌어들여 도커를 실행하는 것이다.

도커를 사용하려면 어떤 형태로든 리눅스 운영체제를 갖춰야 한다.

도커 컨테이너 vs. 도커 이미지 (Docker Container vs. Docker Image)

Docker 이미지와 컨테이너가 함께 작동하여 혁신적인 Docker 기술의 잠재력을 최대한 끌어낼 수 있다. 하지만, 그들은 특히 초보자에게는 알아차리기 어려울 수 있는 미묘한 차이를 가지고 있다.

도커 이미지(Docker Image)는 컨테이너(Container)를 만드는 데 사용되는 읽기 전용 템플릿(Read-only templates)이다.

컨테이너(Docner Container)는 이러한 템플릿에서 생성된 배포된 인스턴스(Deployed Instances)입니다.

정리를 하면 도커 이미지는 컨테이너를 만드는데 사용되는 읽기 전용 템플릿이고,
도커 컨테이너는 도커 이미지를 실행한 상태이다.
조금 더 살펴보면, 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 도커파일을 만든 후 도커파일을 빌드하여 이미지를 만든다.
이미지로 컨테이너를 생성하면 이미지의 목적에 맞는 파일이 들어있는 파일 시스템과
격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되는 것을 도커 컨테이너라고 하는 것이다.

References (참고 자료)

0개의 댓글