[docker] 도커(docker) 개념 과 정의 및 용어정리

업데이트:

안녕하세요👋
서비스를 배포할 때 다들 AWS등의 클라우드를 많이 사용하실 텐데요 24시간 돌아가는 서비스에서 여러 서비스를 함께 구동할 때 필요한 것이 바로 docker입니다!
오늘은 docker의 개념과 정의에 대해 이론적으로 작성해보도록 하겠습니다

🙏요약

이번 글에서는 도커의 개념과 정의에 대해 설명하겠습니다

  1. 도커란?

📝도커란?

image

도커는 컨테이너 기반 오픈소스 가상화 플랫폼 입니다

컨테이너 내부에 개발에 사용한 환경을 저장해서 어느 곳이든 이미지라는 형태로 규격화되어 옮겨가며 사용할 수 있습니다. 다양한 프로그램과 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공해줘서 프로그램의 배포나, 관리를 단순하게 해줍니다. 여러분이 사용하는 백엔드 프레임워크, 데이터베이스 하물며 OS까지 컨테이너로 추상화할 수 있습니다.

컨테이너
컨테이너란 격리된 공간에서 프로세스가 동작하는 기술입니다. 가상화 기술의 일종인데 평소 알고있는 vm과는 차이가 있습니다. vm같은 가상머신은 사용해보신분들은 알겠지만 상당히 느립니다. 왜냐하면 호스트 위에 OS전체를 가상화하여 설치하고 컴퓨터의 일부 자원을 할당받아동작하는 기술이기 때문입니다.

image

도커 공식 홈페이지에서 도커를 소개하는 이미지



각각의 가상환경을 띄워서 그안에서 프로그램을 동작하는 vm과 다르게 도커는 컴퓨터의 자원을 자신그대로 인것처럼 모두 활용하며 여러 프로그램을 동시에 띄울 수 있고 띄우는 환경은 모두 다르게 이미지라는 형태로 저장해서 띄우게 됩니다. 배포시 환경을 각각 다르게 결정해서 저장하는 것과 환경이 다른 여러개의 프로세스를 컴퓨터 자원(cpu,메모리)의 낭비 없이 띄우는 것 이것이 도커의 큰 장점이자 도커의 소개입니다

이러한 컨테이너 기술은 갑자기 막 생겨난 것은 아닙니다 리눅스 커널에 이미 이러한 기술이 있었고 설정 파일들을 통해 자체적으로 프로그램을 백그라운드로 실행시킬 수 있었습니다. 하지만 사용도 불편하였고 컴퓨팅 파워가 좋지 않던 시절에는 이러한 동작방식이 부담이되었습니다. 하지만 지금 컴퓨팅 파워보다 여러 설정파일을 받아도 엉키고 실행환경이 달라지는게 더 복잡해진 만큼 컨테이너의 활용도는 무궁무진해졌다고 할 수 있습니다 도커는 이러한 리눅스 컨테이너 기술을 바탕으로 사용하기 쉽고 편리하게 dockerhub라는 저장소까지 운영하며 사용자에게 큰 만족감을 주고 있습니다.

하지만 리눅스 기반의 컨테이너 기술을 사용하기에 리눅스 환경에서만 사용이 가능하고 윈도우나 맥에서 사용할 경우 vm으로 리눅스를 띄우고 그 위에서 사용해야 합니다 (물론 도커에서 방법과 동작할 수 있는 프로그램을 제공하고 있습니다)

이미지
이러한 도커에서 중요한 개념중 하나는 이미지 입니다. 도커 이미지란 컨테이너를 생성하기 위한 정보를 저장해둔것 이라고 정의하겠습니다. 예를들어 내가 실행시키고 싶은 프로그램은 개발환경 a b c 와 프로그램 d e 가 필요해 라고 한다면 실제 a b c d e의 설정 파일들이 이미지에 저장되어 있고 이를 통해 컨테이너를 생성해 동작시킬 수 있는 것입니다. 이러한 이미지는 docker hub에 올리거나 docker registry 저장소를 직접 만들어 관리할 수 있습니다 깃허브 처럼 누구나 쉽게 이미지를 만들어 올리고 배포할 수 있습니다.

그럼 만약 위의 이미지 (a b c d e)를 가지고 있고 새로운 프로그램을 또 띄우고 싶은데 새로운 프로그램은(a b d f g)가 필요하다고 가정해 봅시다 이때 (f g) 는 없으니 새로 받아야 하지만 (a b d)는 이전 프로그램을 실행시키기 위한 이미지가 가지고 있죠? 이때 굳이 (a b d)를 또 다운받을 필요가 없이 (f g)의 설정만 받아서 실행하면 되겠죠? 이러한 방식을 도커의 레이어 방식이라고 합니다

image

이러한 레이어의 개념과 사용의 편리함은 도커가 성공하는데 아주 큰 역할을 했다고 생각합니다

긴글 봐주셔서 감사합니다 앞으로도 유용한 내용을 많이 공유하겠습니다 그럼 안녕 👋

댓글남기기