도커란?

streetcat·2022년 3월 24일
0

도커란?

도커 사용 배경

집에서는 잘 되던 프로그램이 다른 컴퓨터에서 실행해보니 이상하게 잘 안 되는 경우를 본 적이 있었을 것이다. 또, 개발환경을 옮기는 것도 일이다. 밖에서 파이썬 프로그램을 개발한다 쳐보자. 파이썬 설치부터 패키지 설치, 개발환경 구축 등등.... 할 게 너무 많다. 불편하다.

그러던 중 2013년경, 도커라는 개념이 등장한다. 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 이를 사용하면 프로그램 환경을 어디서든 쉽게 설치하고 사용할 수 있다. 여기서 컨테이너의 개념을 조금 더 자세히 살펴보자.

컨테이너란?

현실 세계 속 컨테이너

이런 캠핑카에서 살아보고 싶다. 아무튼, 현실세계에서 일종의 컨테이너를 달고 다니는 캠핑카를 생각해보자.

길 한복판에다가 저렇게 물 나오고, 난방 되고 전기 나오고 아늑한 가구들이 채워진 집을 만들어서 살려면 어떻게 해야 될까. 아무리 조립식 집을 갖고다닌다 쳐도 집을 조립하고 가구들을 놓고 전기를 들이고 수도를 들이려면 상당히 많은 시간이 걸릴 것이다. 또, 만약 가져온 전자기기가 220볼트를 쓰는데 그 지역이 110볼트를 쓴다? 변압기를 또 설치하는 수고가 들 것이다. 여러모로 귀찮다.

반면 캠핑카는 그냥 주차장만 마련해두면 설치가 끝난다. 이미 차 안에 설치돼있는 배터리가 전기를 공급하고, 설치돼있는 수도에서 물이 펑펑 나온다. 전기 충전 시설이 있으면 콘센트를 차에 꼽기만 하면 된다. 그뿐인가. 110볼트를 사용하는 지역이어도 캠핑카에만 설치해서 배터리를 충전해주면 캠핑카 내부에서는 220볼트 전자기기를 자유롭게 사용 가능하다.

도커의 컨테이너

현실 속 컨테이너의 개념과 유사하다. 컨테이너 안에 미리 프로그램을 실행하는 데 필요한 모든 프로그램들이 내장되어 있다. 사용자가 할 건 단순히 컨테이너 안에 들어가서 코드를 실행하고 갖고 놀고 마음껏 사용하면 된다.

기존의 집을 통째로 지어올리는 듯한 개발환경을 제쳐두고 가볍게 사용할 수 있는 것이다. 당연히 개발이나 배포가 훨씬 간단해진다. 무엇보다, 모든 게 컨테이너 안에서 일어나고 밖의 세상 환경은 크게 신경쓸 필요가 없다. 즉, 도커 밖이 어떤 환경이든간에 개발환경 차이로 문제가 생길 일이 없는 것이다! (위의 전압 예시를 생각해보자)

그리고 캠핑카에 전기를 공급하는 것과 같이, 컨테이너도 환경변수 지정이나 docker-compose.yml 등의 파일을 사용하면 설정을 바꿀 수 있다.

여기서 오는 장점이자 단점도 하나 있다. 저장 공간이다. 파일을 생성해서 저장하면 로컬이 아닌 컨테이너 내부에 쌓이고, 컨테이너를 삭제하면 그대로 저장한 파일들이 함께 날아간다. 캠핑카에서 만들어지는 쓰레기를 버리러 나가지 않으면 캠핑카 안에 쌓이고, 캠핑카 폐기할 때 함께 폐기되는 것과 유사하다. 따라서 외부 저장소와 연결해서 중요 데이터를 백업해놓는 것이 안전하다.

마지막으로, 컨테이너는 어디까지나 가상머신처럼 동작한다는 점을 유의해야 한다. 말 그대로 주차장(로컬)에 주차한 캠핑카(컨테이너)처럼, 이미 있는 환경 내부에 작은 공간을 만들어서 그 안에서만 작동하는 것이다.

이미지란?

현실 속 이미지 예시

이미지는 캠핑카 설계도를 생각하면 된다. 설계도에 캠핑카 디자인부터 설치할 하수도, 난방장치, 배터리 출력, 전압 등을 모두 적어두고 그대로 공장에 갖다주면 동일한 컨테이너를 갖춘 캠핑카를 얼마든지 만들어낼 수 있다.

그런데 여기서 잠깐 생각해보자. 설계도를 바꾼다고 이미 만들어져있는 컨테이너가 자동으로 설계도대로 바뀔 리가 없다. 마찬가지로, 캠핑카 내부 구조를 바꾼다고 동일 설계도로 만든 다른 캠핑카들이 영향을 받을 리도 없고, 설계도도 안 바뀐다. 이 점 기억하고 다시 도커로 돌아가자.

도커 이미지

도커 이미지도 도커 컨테이너를 제작하기 위한 각종 정보들을 담고 있다. 이미지를 사용하면 동일한 컨테이너를 몇개든 만들 수 있다. 또, 위의 설계도와 마찬가지로, 이미지가 변해도 이미 생성된 컨테이너들에겐 어떠한 영향도 주지 않으며, 컨테이너들도 각자 내부에서 일어나는 프로세스가 다른 컨테이너, 혹은 이미지에게 어떤 영향도 주지 않은 채 독립적으로 작동한다.

정리

사용 이유

  • 개발환경을 편안하게 설치할 수 있도록 하기 위해서
  • 배포를 편안하고 빠르고 쉽고 효율적으로 하기 위해서
  • 환경변수 등의 편안한 관리를 위해서

작동 방식

  • 이미지를 통하여 컨테이너를 제작 후, 컨테이너를 사용해서 작업함
  • 이미지와 그를 통해 생긴 각 컨테이너는 독립적으로 작동
  • 컨테이너와 로컬은 분리되어 있음
  • 컨테이너 내부엔 개발에 필요한 각종 패키지나 프로그램이 설치돼있음
  • 환경변수는 환경변수 선언 또는 docker-compose 파일 등을 통해 변경 가능
profile
대학 다니는 백수 개발자입니다.

0개의 댓글