🔷 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어
💡 운영체제 비슷한 것이라고 표현한 이유는, 운영체제 비슷한 무언가일 뿐, 실제 운영체제는 아니기 때문이다. 아래에 더 자세히 설명한다.
🔷 개인용 컴퓨터 또는 서버 상의 환경을 작게 분할하여 데이터나 프로그램을 넣는데, 이 때 분할한 공간을 컨테이너
라고 한다.
도커 엔진
을 설치해야 하며 도커 엔진
을 사용해 컨테이너를 생성하고 구동시킬 수 있다.💡 도커 엔진이라는 배 위에 각각 다른 프로그램이 든 컨테이너를 새로 올려놓는 그림을 연상하면 쉽다.
🔷 컨테이너를 만들기 위한 틀과 같은 역할을 하는 것을 이미지
라고 한다.
💡 이미지는 CD나 DVD를 만드는 ISO 파일과 비슷한 개념이다.
🔷 도커는 종류와 상관없이 리눅스(Linux)
운영체제를 필요로 한다.
💡 도커 엔진 아래에 반드시 리눅스라는 받침이 있어야하고, 컨테이너 안에서 동작하는 프로그램들도 리눅스용임을 명심하자.
🔷 프로그램은 단독으로 동작하지 않는다.
👉 그래서 하나의 프로그램이 업데이트되면 다른 프로그램에도 영향을 미치게 된다. 이는 소프트웨어 뿐만이 아니라 실행 환경, 라이브러리, 디렉터리, 설정 파일 모두 마찬가지다.
🔷 최소 버전을 같이 맞춰놓지 않는 경우, 프로그램 간 공유에서 문제 발생 확률이 높다.
🔷 도커 컨테이너는 다른 컨테이너와 완전히 분리된 환경이다
🔷 도커는 서버에서 사용되는 소프트웨어다. 그래서 도커에서의 서버의 의미를 확실히 알고 넘어가는 것이 좋다.
🔷 기본적으로 서버는 "어떤 서비스(service)를 제공(serve)하는 것"을 의미한다.
🔷 기능적 의미의 서버
ex) 메일 서버 = 메일 기능을 제공한다.
🔷 물리적 컴퓨터로서의 서버
물리적 컴퓨터로서의 서버
에 여러 개의 기능적 의미의 서버
를 함께 둘 수 있다.🔷 서버는 개인용 컴퓨터와 마찬가지로 운영체제가 동작하고, 그 위에 소프트웨어를 실행하는 것은 똑같다.
👉 여러가지 소프트웨어를 한 컴퓨터에 설치할 수도 있다는 말, 이는 곧 여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 함께 존재할 수 있는 이유를 보여준다.
💡 서버의 역할 특성상 서버용 운영체제를 사용하게 되는데 여기서 리눅스 또는 유닉스 계열이 주로 사용된다. 서버용 소프트웨어도 리눅스가 다수를 차지한다. 리눅스 계열의
Debian
,Ubuntu
,CentOS
등이 유명하다. 필자도 한번씩 다뤄본 적 있는 것들이다.
도커는 예산이 부족해 한 대의 서버에서 실행하던 수 많은 서버를 각각 독립적인 환경에서 안전하게 운용할 수 있다.
컨테이너 기술을 활용하면 여러 개의 웹 서버를 올릴 수 있어 매우 편리하다. 이를 통해 물리 서버 수를 줄일 수 있다.
🌟 컨테이너를 쉽게 옮길 수 있다는 것은 매우 큰 장점이다.
👉 도커를 이용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있으므로 운영 서버와 개발 서버의 환경 차이로 인한 문제를 원천적으로 방지할 수 있다.
(직접 제작해서 조금 조악한 그림이지만... 이해 바랍니다...)⚠ 운영체제의 역할을 모른다면 이 파트에서 헤맬 수 있다.
운영체제 1
🔷 리눅스 운영체제가 2개가 들어가는 구조처럼 보인다.
👉 이는 도커의 가장 큰 특징이다!
본래 운영체제는 커널
과 주변 부분
으로 구성되는데 주변 부분이 프로그램의 연락 내용을 커널에 전달하고 커널이 하드웨어를 다룬다.
도커에서는 컨테이너가 완전히 분리돼 있으므로 밑바탕이 되는 리눅스 운영체제의 주변 부분이 컨테이너 속 프로그램의 명령을 전달받을 수 없다.
그래서 컨테이너 속에 운영체제의 주변 부분이 들어 있어 프로그램의 명령을 전달받고 이를 밑바탕이 되는 커널에 전달하는 구조로 되어 있다.
🔷 커널은 밑바탕에 있는 것을 빌려 쓰고 주변 부분만 컨테이너에 넣은 형태 덕에 도커의 가장 큰 특징인 가벼움
을 얻을 수 있다.
💡 주변 부분은 프로그램에서 명령을 전달받거나 커널이 실행한 결과를 프로그램에 다시 전달하는 역할을 한다. 키보드로 입력한 내용을 전달받고 모니터에 데이터를 출력하는 것이 이러한 예다. 이 주변 부분을 커널과 합친 패키지가 배포판이다. 널리 알려진 배포판으로 레드햇과 CentOS, 우분투 등이 있다. 커널만으로 리눅스를 사용하는 경우는 거의 없으며, 배포본 형태로 사용하게 되므로 "난 우분투 리눅스를 써"라고 하듯 배포판의 이름으로 구별하는 경우가 많다.
💡 도커에 대한 이야기가 서버 환경을 전제로 한 것이 많은 이유도 도커는 기본적으로 서버에서 주로 사용되는 운영체제인 리눅스용이기 때문이다.
🤔 그럼 윈도우나 macOS에서는 어떻게 돌림...?
-> VMware 같은 가상 환경 위에 리눅스 운영체제를 설치하고 그 위에서 도커를 실행하는 방법과 '윈도우 or macOS용 도커 데스크톱'을 설치하는 방법이 있다. 후자의 경우에는 도커를 실행하는 데 필요한 리눅스 운영체제를 포함하는 패키지를 설치하기 때문에 가능하다.
🔷 하나의 금형으로 공장에서 물건을 대량 생산하듯이, 하나의 이미지로 똑같은 컨테이너를 여러 개 만들 수 있다.
🔷 반대로 만들어진 컨테이너를 개조해서 새로운 이미지를 만들 수도 있다.
🔗 도커 허브
🔷 이미 우리가 잘 알고 있는 소프트웨어들은 대다수가 도커 허브에 이미지로 등록되어있다.
도커 허브는 공식적으로 운영되는 도커 레지스트리
(도커 이미지를 배포하는 서비스)의 이름으로, 공개된 컨테이너 이미지가 모여 있는 곳이다. 이 곳에서 원하는 컨테이너의 이미지를 내려받을 수 있다.
회사 같은 경우에는 사내 서버로 비공개 도커 레지스트리를 두는 경우도 있다.
안전한 컨테이너 이미지를 고르기 위해 공식 이미지를 사용하는 것을 권장한다.
아니면 커스텀 이미지를 직접 만들어 사용해보아도 좋을 것이다.
💡 이미지를 이용해 한 컨테이너에 여러 개의 프로그램을 넣는 것도 가능하다. 물론 이는 유지보수나 도커의 장점을 누리기 어렵기 때문에 추천되지 않는 방식이지만 모든 프로그램을 넣은 컨테이너는 바로 실행할 수 있다는 장점 덕에 개발자들에겐 자주 쓰인다.