본문 바로가기

DevOps/Docker

<Docker> 도커란 무엇인가

1. 소개

* 도커란 무엇인가

 - 도커를 한마디로 정의하자면, 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어이다. 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공하며, 운영체제(비슷한 것) 통째로 격리하는 기능을 갖고 있다. 도커를 사용하면 개인 컴퓨터를 마치 독립된 창고로 분리하고 데이터나 프로그램을 두는 것과 같다. 이 창고를 '컨테이너(Container)'라고 하며, 컨테이너를 다루는 기능을 제공하는 소프트웨어가 바로 도커이다.

 - 도커를 사용하려면 도커 소프트웨어의 본체인 '도커 엔진(Docker Engine)'을 설치해야 한다. 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다. 컨테이너를 만드려면 도커 엔진 외에도 컨테이너의 '빵틀'역할을 하는 '이미지(Image)'가 필요하다. 예를 들어, MySQL 컨테이너를 만드려면 MySQL 이미지가 필요하다.

 

 - 도커를 사용하는 데는 몇 가지 제약 사항이 있다. 종류에 상관없이 리눅스 운영체제가 필요하며, 윈도우나 macOS에서도 도커를 구동할 수는 있지만 내부적으로는 리눅스가 사용된다. 또, 컨테이너에서 동작시킬 프로그램도 당연히 리눅스용 프로그램이어야 한다.

 

* 왜 도커를 사용해야 하는가

 - 소프트웨어는 단일 프로그램이 아닌 여러 개의 프로그램으로 구성된 경우가 많다. 예를 들어, 워드프레스는 MySQL 데이터베이스를 따로 갖추지 않으면 사용할 수 없다. 이 때문에 프로그램 하나를 업데이트하면 다른 프로그램에도 영향을 미친다. 공유하는 대상을 어느 한쪽만을 위해 수정하면 다른 쪽에서 당연히 오류가 발생할 여지가 생긴다.

 - 도커 컨테이너를 사용해 프로그램을 격리하면, 여러 프로그램이 한 서버에서 실행되면서 발생하는 문제를 대부분 해결할 수 있다.

 

2. 서버

* 서버와 도커

 - 도커는 주로 서버에서 사용되는 소프트웨어다.. 서버란 service를 제공(serve)하는 것을 가리킨다. 개발 현장에서 '서버'라는 용어는 두 가지 의미를 가진다. 한 가지는 '기능적 의미의 서버'이고, 다른 한 가지는 '물리적 컴퓨터로서의 서버'를 가리킨다. 흔히 웹서버나 메일서버 등 xx서버로 쓰이는 것은 전자를 의미한다.

 - 서버의 기능이 소프트웨어에서 나온다는 말은 여러 가지 소프트웨어를 한 컴퓨터에 설치할 수도 있다는 의미다. 즉, 여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 함께 존재할 수 있다.

 - 이제 앞선 내용과 종합해서 생각해보자. 물리적 컴퓨터에 여러 기능적 의미의 서버를 함께 동작시키는 것이 도커의 장점과 관계 있다는 것은 이해될 것이다. 예산이나 환경의 문제로 한대의 물리적 서버에서 실행하던 웹 서버와 메일 서버, DB 등의 서버를 이제는 각각 독립적인 환경에서 안전하게 운용할 수 있게된다. 무엇을 업데이트하더라도 서로 영향을 미치지 않는다.

 - 또 일반적으로 한 대의 서버 컴퓨터에서는 웹 서버를 한 벌밖에 실행하지 못한다. 그러나 컨테이너 기술을 활용하면 여러 개의 웹 서버를 올릴 수 있다. 또 물리 서버 한 대에 여러 개의 웹 서버를 띄우면 그만큼 물리 서버 수를 줄일 수 있다.

 - 개발 측면에서의 이점은 개발 환경을 갖추거나 운영 환경으로 쉽게 넘어갈 수 있다는 점이다. 도커를 이용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있으므로 운영 서버와 개발 서버의 환경 차이로 인한 문제를 원천적으로 방지할 수 있다.

 

* 도커와 가상화 기술

 - 이쯤에서 도커는 가상화 기술이 아니냐는 의문이 들 수 있다. VirtualBox나 VMware 같은 가상화 기술은 가상의 물리 서버를만드는 것과 같다. 메인보드와 CPU, 메모리 등의 물리적인 부품을 소프트웨어로 구현하는 것이다. 즉, 가상화 기술은 매우 무거운 작업을 수행한다.

 - 그러나 도커는 다르게 접근한다. 도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제로 리눅스가 동작하는 것은 아니다. 운영체제의 기능 중 일부를 호스트 역할을 하는 물리 서버에 맡겨 부담을 덜어 둔 형태다. 컨테이너는 운영체제 일부 기능을 호스트 컴퓨터에 의존하기 때문에 앞서 말했던 것처럼 물리 서버도 컨테이너 내용도 리눅스 운영체제가 되는 것이다.

 

3. 결론

 - 도커는 프로그램과 데이터를 효율적으로 격리하며, 운영체제 수준에서 가상화를 제공하여 개발자와 시스템 관리자에게 매우 유용한 도구다. 도커를 이해하고 사용하는 것은 어플리케이션 개발, 배포, 그리고 유지 관리를 훨씬 더 간편하고 효율적으로 만든다. 도커의 강력한 기능을 활용하면, 더 나은 서비스를 제공하고 효율적인 운영 환경을 구축할 수 있다.

 

 

 


참고

 

 해당 포스팅은 그림과 실습으로 배우는 도커&쿠버네티스를 읽고 개인적으로 필요한 내용을 추가 및 정리한 글입니다.

 

 

 

그림과 실습으로 배우는 도커 & 쿠버네티스 - YES24

컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서!이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서다. 자세한

www.yes24.com