본문 바로가기

Programming/Infra

Docker란? (Docker의 기본개념)

Docker

도커는 컨테이너를 이미지 파일로 빌드하고 배포하여 어디서나 실행할 수 있도록 해주는 오픈소스이다.

사실 상 컨테이너는 리눅스의 기술이고 도커가 없어도 컨테이너를 구현할 수 있다.

하지만 도커를 이용하면 여러 장점이나 옵션들을 사용할 수 있다.

컨테이너를 git에 저장된 소스처럼 build/push/pull 할 수 있는 방법을 먼저 제공하면서 주목받았다.

Docker 설치 (https://www.docker.com/get-started)

 

 

그렇다면 위에서 말한 컨테이너(container)는 무엇일까?

Container

컨테이너 단위로 OS, 라이브러리, 어플리케이션을 하나로 패키징 할 수 있다.

하나의 OS 위에 여러 어플리케이션을 독립적으로 실행할 수 있도록 한다.

여러 어플리케이션의 격리된 환경을 지원하는 일종의 가상화 기술이다.

 

컨테이너가 왜 필요한가?

 

물리장비 하나에 그냥 3개의 어플리케이션 서버를 띄었다고 생각해보자.

만약 1개의 서버가 죽으면, 나머지 2개의 서버에도 영향을 미친다.

따라서 각각의 독립된 환경을 만들어주기 위해 컨테이너라는 기술이 필요하다.

Docker image와 Docker container

도커 이미지는 컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할을 한다.

도커 컨테이너는 도커 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화돼 실행되는 상태를 말한다.

즉, 도커 이미지 하나로 여러 개의 컨테이너를 생성할 수 있다.

Dockerfile

Dockerfile이란 위에서 설명한 Docker image를 만들기 위한 파일이다.
개발자는 Dockerfile을 작성하고 image로 빌드하여, 그 이미지를 이용해 컨테이너로 배포한다.

 

Dockerfile 기본 작성법은 다음 포스팅에서 다루도록 한다.

Docker image & Dockerfile 예시

내가 A라는 게임을 10대의 컴퓨터에 설치해야한다.
A라는 게임을 이용하기 위해서는 다음과 같은 절차가 필요하다.

 

1. 윈도우 설치

2. 그래픽 버전 업그레이드

3. 네트워크 설정

4. A 게임 설치

 

docker를 이용하지 않는다면, 10대의 컴퓨터에 모두 위와 같은 과정을 일일히 거쳐야한다.
docker를 이용한다면 위 일련의 과정을 Dockerfile로 작성하고, Docker image로 빌드한다.

 

이제 Docker image를 잘 만들어놨으니, 컴퓨터가 아무리 늘어나도 image를 이용해 설치해주면 한번에 해결이 가능하다.

DockerHub

GitHub은 애플리케이션 코드를 형상관리 하는 것이라면, DockerHub은 Dockerfile 코드를 형상관리 한다고 생각하면 된다.

Docker는 유료인가?

Docker의 행보를 보면 점점 유료화쪽으로 방향을 잡고 있는 듯 하다.
DockerHub의 무료 계정의 제한을 두고 Docker Desktop에도 유료화를 진행하고 있다.

 

다행인건, 개인적인 사용 & 학업 목적 & 소규모 회사에서는 아직 Docker Desktop이 무료다.
또한, Docker engine은 아직 무료이므로, Desktop을 이용하지 않고 docker자체는 이용할 수는 있다. (Docker engine도 언젠간 유료가 될지 모르겠지만...)