본문 바로가기
카테고리 없음

[Docker] Docker란?

by TDRemon 2022. 10. 1.
반응형

안녕하세요. TDR입니다.

예전부터 관심은 있었으나 기회가 없어서 사용해보지 못하다가 필요에 의해서 Docker를 공부하게 되서 공부한 김에 정리를 해볼려고 글을 쓰게 됐습니다.

Docker 란?

리눅스 OS 상에서 동작하는 컨테이너(Container)를 컨트롤하는 소프트웨어 입니다. 물론 컨테이너만 다루는 것이 아닌 도커 엔진이라는 것이 이미지(Image)나 네트워크(Network), 볼륨(Volume)등도 컨트롤 하지만 실제 동작하는 것은 컨테이너이기 때문에 쉽게 얘기하면 그렇다는 것입니다. 그렇다면,

Container란?

가장 큰 특징은 "격리성"이라고 할 수 있습니다. 외부 환경과는 별도의 공간에서 외부의 영향을 받지 않는 상태의 일종의 sandox와 같은 상태입니다.

즉, 도커는 컨테이너를 다루기 편하게 해주는 소프트웨어다~ 라고 정리할 수 있습니다. 그렇다면 핵심은 도커가 아닌 컨테이너인데 컨테이너의 장점을 알아보면,

1. 외부와 격리되어 독립된 실행 환경을 갖출 수 있다.

개발자들은 크게 와 닿지 않을 수 있지만, 서버 엔지니어나 인프라 엔지니어의 경우 큰 의미를 갖습니다. 예를들어, 서버 한대에 2개의 서비스를 동작 시켜야 하는데, 서비스1은 Apache 2.4를 써야하고 서비스2는 Apache 2.2를 써야한다고 가정해 봅시다. 일반적으로 하나의 PC에는 하나의 Apache 밖에 설치할 수 없습니다. 그래서 서버를 2대로 해서 각각 설치하는 방법도 있지만 그러면 불필요하게 서버가 한대 늘어나게 됩니다. 이럴 때, 서비스들을 컨테이너로 만든다면 각각의 컨테이너에 필요한 Apache를 설치해서 구동시킬 수 있습니다.

2. 빌드 & 배포의 용이성

개발자가 커밋한 코드를 서버에 배포한 후 테스트를 하면 동작을 안해서 개발자에게 문의하면 이런말을 참 정말 많이 들어 볼 수 있습니다. "제 PC(개발자 PC)에서는 잘 동작하는데요?" 그럴때마다 "그럼 니 PC를 서버로 띄우던가!"라고 말해주고 싶지만 그러면 싸움이 나기 때문에 늘 참고 차근차근 설명을 해줘야 합니다. 이런 일이 발생하는 이유는 대게, 첫째 OS가 달라서, 둘째 개발자도 모르는 사이에 필수 라이브러리가 갖춰져 있어서, 셋째 로컬 환경으로 네트워크에 대해서 고려를 안해서 정도가 큰 이유입니다. 이러한 이슈를 Container를 사용하면 쉽게 해결할 수 있습니다. 

개발자가 Container에서 테스트를 한 후 그대로 Registry에 push를 하면 서버에서는 해당 Image를 받아서 실행시키기만 하면 되기 때문입니다. Container 안에는 해당 서비스가 구동하는데 필요한 모든 환경이 갖춰져 있기 때문에 여기서 동작을 안한다면 개발자에게 다시 확인을 해달라고하기만 하면 됩니다. (물론 다른 서비스와의 의존성도 있고 네트워크 환경 설정도 있지만 일단 pass)

그럼 컨테이너의 단점은 없냐? 하시면 당연히 있습니다.

1. 상태 확인이 번거롭다

일반 서버에 설치된 프로그램들은 쉘창에서 ps를 때리면 한눈에 확인이 가능합니다. 하지만 한 서버에 여러 컨테이너로 구동을 시켜놓았다면 일일이 해당 컨테이너에 접속해서 확인을 해야합니다. 서버 대수가 적으면 이것도 뭐 그럴수 있다고 할 수 있지만 서버 대수가 2자리 숫자만 넘어가도 일일이 들어가서 확인하는 것 자체가 노동입니다. 그래서 보통은 자동화를 하는데 자동화 하는 것도 일이고, 구성이 변경이 되거나 하면 자동화 스크립트도 수정해줘야 하는 등 관리 포인트가 되어버립니다.

2. 컨테이너를 컨트롤하는 도커의 관리가 필요하다

컨테이너를 쓸려면 일반적으로 도커를 사용합니다. 그럴려면 도커에 대해서도 알아야하고 도커로 컨테이너를 컨트롤 할 수 있는 기술도 익혀야하고 컨테이너마다 연결해줘야 하는 디스크 or 볼륨 관리도 해야하고 포트도 중복되지 않게 관리해야 합니다. 즉, 위에서 말한 장점을 누리기 위해서 익혀야 하는 기술 및 신경써야 할 부분들이 늘어난다는 것입니다.

이번에는 도커와 컨테이너의 장단점에 대해서 간략히 알아 보았습니다. 다음에는 Container와 Image에 대해서 알아보도록 하겠습니다.

반응형

댓글