
'데이터 또는 프로그램을 격리시키는 기능'을 제공하는 소프트웨어
주로 서버에서 사용하는 것이 주 용도이다.
도커는 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다.
작게 쪼갠 독립된 창고에 데이터나 프로그램을 두는 것이다.
해당 조립형 창고를 컨테이너라고 한고 이 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커이다.
도커를 사용하기 위해 Docker Engine을 설치해야 한다. 그리고 도커 엔진을 사용해 컨테이너를 생성 혹은 구동시킬 수 있다.
Docker Engine이 있어야 컨테이너를 만들 수 있다고 설명했다. 그러나 컨테이너를 만들려면 "이미지"가 필요하다.
이미지는 종류가 다양하다.
아파치 컨테이너가 필요하면 아파치 이미지를 사용하고 MySQL 컨테이너를 만들려면 MySQL이미지를 사용해야 한다.
용량이 허락하는 한 하나의 도커에 여러 개 컨테이너를 만들 수 있다.
도커를 사용하는 데 몇 가지 제약사항이 있다.
종류와 상관없이 리눅스 운영체제가 필요하다.
- 윈도우나 macOS에서도 도커를 구동할 수 있으나 내부적으로는 리눅스가 사용된다.
컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램이다.
이는 도커가 리눅스 운영체제에서 사용하는 것을 전제로 만들어졌기 때문이다.
도커를 사용하는 근본적인 이유가 아닐까?
우선 프로그램을 독립된 환경에 격리해야 하는 이유는 무엇일까?
대부분의 프로그램은 프로그램 단독으로 동작하는 것이 아니라 어떤 실행환경이나 라이브러리, 다른 프로그램을 이용해 동작한다.
PHP로 작성된 프로그램을 실행하려면 PHP 실행환경이 필요하고
파이썬으로 작성된 프로그램은 다른 라이브러리가 사용되는 경우가 많다.
소프트웨어 역시 단일 프로그램이 아닌 여러 개의 프로그램으로 구성된다.
예를 들어, 워드프레스는 MySQL 데이터베이스를 따로 갖추지 않으면 사용할 수 없다.
다른 프로그램과 특정 폴더 또는 디렉터리를 공유하거나 같은 경로에 설정 정보를 저장하는 경우도 있다. 이 때문에 프로그램 하나를 업데이트 할 경우 다른 프로그램도 영향을 끼치게 된다.
이 경우 뿐 아니라 실행 환경이나 라이브러리, 디렉터리나 설정 파일에서도 같은 일이 일어날 수 있다. 공유하는 대상을 어느 한쪽만을 위해 수정하면 다른 쪽에서 오류가 발생하게 된다.
업데이트 할 때만 발생하는 것도 아니다.
서버에서는 여러 프로그램이 함께 동작하므로 서버를 처음 구축할 때부터 신중하게 따져봐야 한다.
설계할 때 문제없던 프로그램끼리도 실제로 설치할 경우 오류를 일으킬 수 있는데 이러한 문제의 원인은 대부분 프로그램 간 공유에있다.
디렉터리 역시 시스템 A,B가 같은 디렉터리를 사용할 경우 설정파일이 섞이거나 설정에 충동이 발생할 수 있다.
프로그램도 한 서버에서 실행시키는 것은 많은 어려움이 발생한다.
도커 컨테이너는 다른 컨테이너와 완전히 분리된 환경이다.
즉, 컨테이너 안에 들어있는 프로그램은 다른 프로그램과 격리된 상태가 된다.
도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에서 실행되면서 발샹하는 문제 대부분이 해결된다.