Docker, Kubernetes

Docker란? 간단한 설명(Docker Hub-image-container / pull-run-build)

15호의 개발자 2021. 11. 25. 12:16
반응형

Docker(도커)란?

Docker에 대한 사전적 정의에 대해 알아보자.

"Docker"의 사전적 의미: 부두에서 컨테이너를 다루는 노동자

 

컨테이너를 다루는 노동자를 의미하는 만큼 Docker 로고를 보면 고래 위에 컨테이너가 있는 모습을 볼 수 있다. 실제로 컨테이너라는 개념은 도커를 사용하는 데 있어서 매우 중요하다.

Docker Logo

 

도커는 개발환경을 쉽게 세팅할 수 있고 컴퓨터 자원을 훨씬 적게 차지할 수 있는 기술로써, 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구이다. 리눅스의 컨테이너 기술을 이용해서 가상화를 하지 않고 프로세스만 격리해서 빠르게 실행시키는 기술이며, 가상 머신처럼 독립된 실행환경을 만들어주는 도구라고 할 수 있다. 단, 가상머신(VM)은 아니며, 마치 운영체제에 운영체제를 설치하는 것처럼 실행 된다. 하지만 운영체제는 실제로 설치되지 않으므로 설치 용량이 적고 빠르다는 장점이 있다.

 

위의 말이 잘 와닿지 않는다면 아래의 예시를 참고하면 좋을 것이다.

내 컴퓨터는 윈도우 운영체제를 사용하고 있다. 내 컴퓨터로 코딩을 한 후 배포만 하면 되는데, 배포할 서버가 리눅스 환경이다. 서버 환경 세팅을 해야하는 상황인데 여간 쉬운 게 아니다. 이때 Docker를 이용하면 다른 머신에서도 같은 환경을 구현할 수 있다.

즉, 하나의 같은 서버(위 예시의 경우 윈도우)에서 각기 다른 환경(위 예시의 경우 리눅스)의 컨테이너를 설정할 수 있게끔 도커가 도와준다. 각기 다른 환경이란 파이썬 서버, 자바 서버, DB 서버 등 자유롭게 가능하며, 이러한 환경들은 각각 독립적으로 존재하기 때문에 모듈식으로 관리할 수 있다. 원하는 개발 환경을 Docker 설정파일에 저장하기만 하면 도커는 이를 어떤 머신이든지 해당 환경을 시뮬레이션 해준다.

 

도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다. 참고로 Go 언어로 작성되어 있으며, '도커'라고 칭하는 것은 대게 도커 엔진(Docker Engine, 도커의 주 프로젝트이다.) 또는 도커에 관련된 모든 프로젝트를 의미한다. 가상머신(VM)과는 달리 도커 컨테이너는 성능의 손실이 거의 없다.

 

컨테이너 도구로는 Docker(도커) 외에도 Containerd(컨테이너디), CRI-O(크라이오), Podman(파드맨) 등이 있다. 현업에서는 도커가 가장 많이 쓰인다.

 

 

Docker 개념

위에서도 언급했듯이 Docker에서 container 개념은 중요하다. container는 아래와 같다.

 

  • host: 운영체제가 설치된 컴퓨터
  • container: 하나의 운영 체제 안에서 커널을 공유하며 개별적인 실행 환경을 제공하는 격리된 공간으로써, host에서 실행되는 격리된 각각의 실행 환경이다. 예를 들어 말하자면, 메신저 프로그램이나 음악 감상 프로그램을 컨테이너로 구현할 수 있다.

host와 container 모두 독립적인 시스템이므로 각자 file system을 가지고 있다.

 

도커의 컨테이너 개념은 유닉스, 리눅스에서는 예전부터 사용하던 개념이다. 하지만 워낙 어려운 탓에 일부 전문가들만 사용했었다. 이를 사용하기 쉽게 만들어 주기 위해 컨테이너 사용 방법을 명령어로 정리한 것이 도커이다.

 

각각의 컨테이너에는 OS 전체가 설치 되어있는 것이 아니라, 앱을 실행하는 데에 필요한 library와 실행파일만 설치되어있다. 그렇기 때문에 VM(가상머신)과는 구분되는 것이다. 이러한 컨테이너 기술을 이용한 소프트웨어가 바로 Docker이다.


참고로 도커는 리눅스 전용이다. 윈도우나 맥OS에서도 가상머신을 깔고 그 위에 Linux OS를 설치하면 사용할 수는 있다. (도커가 알아서 VM을 설치하고 그 위에 Linux도 알아서 깔아준다. 단, 리눅스가 아니면 속도저하는 있다.)

 

 

Docker Hub - image - container

도커를 사용함에 있어서 docker hub, imgae, container의 개념에 대해 알고 있어야 한다.

 

  1. Docker Hub(도커 허브): 도커 공식 홈페이지에서는 도커 허브를 통해 다양한 이미지를 배포하고 있다. 일종의 app store 같은 개념이라고 생각하면 된다.
  2. Image(이미지): 도커에서 Image는 서비스 운영에 필요한 파일과 설정값 등을 포함하고 있는 것을 의미한다. 쉽게 말하자면 program이라고 생각하면 된다.
  3. Container(컨테이너): Container는 개별 프로그램을 실행하는 데 필요한 환경을 설정해주는 기술이다. 운영체제 수준의 격리 기술이지만 OS와는 엄연히 다르므로 주의해야 한다. 일종의 process와 같다고 생각해도 된다. Image를 실행한 것이 Container이며, Image는 여러 개의 Container를 가질 수 있다.

참고로, 도커로 이미지에 접속하는 것은 불가능하고 컨테이너에만 접속할 수 있다.

 

 

pull - run - build

pull, run, build의 개념도 알고 있어야 한다.

  1. pull: 도커 허브에서 image를 다운받는 행위
  2. run: image를 실행하는 행위 (image가 container가 되고, container 안에 있는 것이 실행되면서 프로그램(image)를 사용할 수 있게 된다)
  3. build: image를 기반으로 컨테이너를 실행하는 등의 build 작업을 진행하는 행위

 

 

 (출처: 생활코딩, 노마드코더)

반응형