Cloud/Docker

도커(docker)의 기본개념(basics)

jinmc 2020. 12. 4. 16:00
반응형

전에 일했던 회사에서, LEMP 스택(linux, nginx, mysql, php)을 사용하면서 

서버환경의 중요성과 까탈스러움을 알게 되었고, 

개발환경과 실제 환경의 차이를 없애기 위해서 가상머신을 사용했습니다.

 

최대한 실제환경을 똑같이 하기 위해서, Virtual Machine(VirtualBox)과 Vagrant를 사용하였으며,

Virtual machine인 만큼 잘 작동하였습니다.

물론, Simulated 된 가상환경을 사용하기도 하고. MAMP나 Laravel Valet 등의 php에 특화된 툴을 사용하기도 하였는데, 

Virtual machine이 아닌 관계로 에러가 나는 경우가 가끔 있었습니다.

하지만 Virtual Machine의 단점은, 너무 느리다는 점이었습니.

그런 면에서 Docker는 Virtual Machine 만큼의 안정성을 주면서, Virtual Machine보다 나은 퍼포먼스를 가져다 줄 수 있다는 점에서 

확실히 좋은 대안이 될 수 있을 것입니다.

 

도커에 대한 좋은 시작 포인트:

subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

하지만 도커의 장점은 사실 그것보다는 클라우드에 배포하는 데에 있습니다.

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

다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 다양하게 해줍니다. 백엔드, 데이터베이스, 메시지 큐 등 어떤 프로그램이든 컨테이너로 추상화 할 수 있고 어디서든 실행이 가능합니다.

 

vm 과 docker의 차이

컨테이너 (Container)

 

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. CPU나 메모리는 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로 손실이 별로 없습니다. 새로 컨테이너를 만드는 시간은 굉장히 빠르고,(1-2초) 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 가벼운 VM을 실행하는 느낌을 줍니다. 

 

이미지 (Image)

 

도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념입니다. 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다.(immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러가지 컨테이너를 생성할 수 있고, 컨테이너가 삭제되더라도 이미지는 남아 있습니다.

 

예를 들자면, Ubuntu 이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있고, mysql 이미지는 debian을 기반으로 mysql을 실행하는데 필요한 파일과 실행 명령어, 포트 정보등을 가지고 있습니다. 좀 더 복잡한 예로 gitlab 이미지는 centos를 기반으로 ruby, go database, redis, gitlab source, nginx 등을 가지고 있습니다.

 

Layer 저장방식

 

도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 큽니다. 처음에 받는 건 괜찮다고 하지만 파일 하나 추가했다고 다시 수백메가를 다운받는건 매우 비효율적입니다.

 

도커는 이를 레이어라는 개념으로 해결합니다. 기존의 이미지 위에 새로 수정한 파일을 레이어로 설정하여 그 위에 올리는 형식으로 추가합니다. 이미지는 여러개의 읽기 전용 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성됩니다. 

 

컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기 레이어를 추가합니다. 

기존의 이미지 레이어를 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.

 

이미지 경로

 

이미지는 url 방식으로 관리하며 태그를 붙일 수 있습니다. ubuntu 14.04 이미지는 docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library는 생략가능하여 ubuntu:14.04로 사용할 수 있습니다. 이러한 방식은 이해하기 쉽고 편리하게 사용할 수 있으며 태그 기능을 잘 이용하면 테스트나 롤백도 쉽게 할 수 있습니다.

 

Dockerfile

 

도커는 이미지를 만들기 위해 Dockerfile 이라는 파일에 자체 DSL 언어를 사용해 이미 생성 과정을 적습니다. 

Dockerfile의 문법에 대해서는 추후에 다시 다루도록 하겠습니다.

반응형