Docker

[Docker] 1-1. 도커란 무엇인가

patrick-star 2023. 5. 15. 22:57
728x90

1. 도커란 무엇인가

도커란?

한마디로 정의하면 데이터 또는 프로그램을 격리시키는 기능을 제공하는 SW

이 기능은 주로 서버에서 사용된다.
마치 개인용 컴퓨터에서 여러 가지 프로그램이 동작하듯 서버에서도 여러 가지 SW들이 함께 동작한다.

도커는 이렇게 다양한 프로그램과 데이터를 각각 독립된 환경으로 격리하는 기능을 제공한다.
뿐만 아니라 다른 사람들에게 똑같은 작업 환경을 전달하는 기능도 제공한다.

컨테이너와 도커 엔진

개인용 컴퓨터 또는 서버 상의 환경을 마치 코스트코에서 판매하는 조립형 창고 같은 작은 방으로 분할한다고 생각해보자.
그 창고에 데이터나 프로그램을 둔다.

이때, 조립형 창고를 컨테이너(container)라고 하고 이러한 컨테이너들을 다루는 기능을 제공하는 SW가 도커(Docker)이다.

도커를 사용하려면 도커 SW의 본체인 도커 엔진(Docker Engine)을 설치해야 한다. 도커 엔진을 이용해서 컨테이너를 생성하고 동작시킨다.

컨테이너 생성을 위해 필요한 이미지(image)

컨테이너를 만들기 위해서 도커 엔진 뿐만 아니라 이미지(image)도 필요하다.

이미지가 갖고 있는 SW의 종류에 따라 다양한 이미지를 사용한다.

ex) 아파치 컨테이너를 만들려면 아파치 이미지 / MySQL 컨테이너를 만들려면 MySQL 이미지가 각각 필요하다

도커 엔진과 이미지를 가지고 용량이 허락하는 한 여러 개의 컨테이너를 만들어서 동작시킬 수 있다

도커는 Linux 컴퓨터에서 사용함

1) Docker를 구동하기 위해서는 리눅스 운영체제가 필요하다. Windows, macOS에서도 도커를 동작시킬 수는 있지만 내부적으로는 Linux를 사용한다

2) 컨테이너에서 동작시킬 프로그램도 Linux 용 프로그램이다.

이는 도커가 리눅스 운영체제에서 사용하는 것을 전제로 만들어졌기 때문이다.

데이터나 프로그램을 독립된 환경으로 격리해야 하는 이유

도커는 주로 서버 환경에서 격리를 위해서 사용한다고 했다. 그렇다면, 왜 독립된 환경이 필요한 걸까.
대부분의 프로그램은 프로그램이 혼자 동작하는 것이 아니라 어떤 실행 환경이나 라이브러리, 다른 프로그램을 이용해서 동작한다.

ex) PHP로 작성한 프로그램 ⇒ PHP 실행 환경이 필요
Python으로 작성한 프로그램 ⇒ Python 실행 환경 & 라이브러리가 필요

또한 다른 프로그램과 특정 폴더 또는 디렉토리를 공유하거나 같은 경로에 설정 정보를 저장하는 경우도 있다.
때문에 프로그램 하나를 업데이트 하면 다른 프로그램에도 영향이 갈 수 밖에 없다.

ex) 시스템 A와 시스템 B가 MySQL과 연동되는 상황

A는 MySQL 5.6.23에서 동작하도록 만들어졌는데 B 때문에 MySQL의 버전을 8.0.21 이상으로 업데이트 했다고 하자.
그러면, A는 동작하지 않을 것이다.

MySQL과 같은 SW 뿐만 아니라 실행 환경, 라이브러리, 디렉토리, 설정 파일에서도 동일한 일이 발생할 수 있다.

업데이트 뿐만 아니라 여러 프로그램과 함께 동작하면서 예상하지 못한 오류가 발생할 수 있다.

이러한 문제들이 나타나는 이유는 프로그램 간에 공유가 있기 때문이다.

프로그램의 격리란?

도커 컨테이너는 다른 컨테이너와 완전히 분리된 환경이라고 얘기했다.
즉, 컨테이너 안에 있는 프로그램은 다른 프로그램과 격리된 상태가 된다.

이렇게 도커 컨테이너를 이용해서 프로그램을 격리하면
여러 프로그램이 하나의 서버에 실행되면서 발생하는 문제를 대부분 해결할 수 있고

완전히 독립된 환경이기 때문에 여러 컨테이너에서 같은 프로그램을 실행할 수도 있다.

ex) 시스템 A와 시스템 B가 MySQL과 연동되는 상황

각각의 시스템을 컨테이너로 격리해서 각 시스템에 적합한 버전의 MySQL과 연동되도록 설정하면 된다.

도커로 사용할 수 있는 기능

① 응용 프로그램의 빠르고 일관된 전달(delivery)

Docker는 개발자들이 표준화된 환경에서 작업할 수 있도록 해서 개발 주기를 간소화한다. 이를 통해 애플리케이션과 서비스를 제공하는 로컬 컨테이너를 사용하여 개발자가 작업할 수 있다.

그리고 컨테이너는 CI/CD(Continuous Integration / Continuous Delivery)에 적합하다.

ex)

  • 개발자가 local하게 코드를 작성하고 자신의 작업물을 도커 컨테이너를 사용해서 동료들에게 공유한다.
  • 동료들은 도커를 사용해서 프로그램을 테스트 환경에 집어넣고 수동 또는 자동 테스트를 실행한다.
  • 버그를 발견했을 때 개발 환경에서 버그를 수정하고 테스트 환경에 재배포한다.
  • 테스트가 끝나면 고객에게 수정본을 제공하는 것이 업데이트된 이미지를 production 환경에 넣는 것 만큼 간단해진다.

② 즉각적인 배포와 스케일링 (Respon

출처

그림과 실습으로 이해하는 도커 & 쿠버네티스
공식문서