FE

"Docker 한눈에 보기: 개념, 구성, 장점 및 이유"

올바른생활부터 2024. 5. 14. 22:09
728x90
반응형
SMALL

팀 프로젝트를 하다가 “도커로 배포를 고려해보라는" 말을 듣고 도커가 무엇이고, 왜 도커를 사용해야 할까? 사용 목적이 궁금하여 이와같이 블로그에 도커 개념을 먼저 정리해보았다.

목차

1. Docker란 무엇인가?

2. 도커의 구성

3. 도커 컨테이너의 장점

4. 도커를 사용하는 이유

 

1. Docker란 무엇인가?

공식 문서에서는 Docker를 이렇게 소개하고 있다.

  • 애플리케이션 빌드, 공유 및 실행 방식 가속화”
  • Docker는 개발자가 번거로운 환경 구성이나 관리 없이 어디서나 애플리케이션을 빌드, 공유, 실행 및 검증할 수 있도록 지원한다.

즉, 도커는 애플리케이션 실행 환경을 컨테이너화 하여 쉽게 배포하고 이식할 수 있게 해주는 오픈소스 플랫폼이다.

도커의 주요 개념을 알아보자.

1) 버전 관리와 공유: 도커 이미지는 버전을 관리할 수 있으며, 도커 허브(Docker Hub) 같은 플랫폼을 통해 쉽게 공유할 수 있다.
2) 쉬운 배포: 컨테이너화된 애플리케이션은 어떤 환경에서든 동일한 방식으로 실행될 수 있다. 따라서 개발, 테스트, 운영 환경 간 일관된 배포가 가능해진다.
3) 이식성(Portability): 도커 컨테이너는 어떤 환경에서도 동일하게 실행될 수 있다. 이는 개발에서 운영까지 일관된 환경을 제공한다.
※ 사전에 따르면 이식성은 원시 프로그램을 다른 기종으로 옮기는 작업이 얼마나 쉬운가를 나타내는 정도
4) 분리된 환경: 각 컨테이너는 독립적으로 실행되므로, 다양한 애플리케이션과 서비스를 하나의 시스템에서 격리된 상태로 실행할 수 있다.

 

📢 도커를 예시를 들자면 “여행을 갈 때 여행용 가방에는 옷, 세면도구, 충전기 등 여행에 필요한 모든 것을 넣는다. 이 가방 하나만 있으면, 어디로든 떠날 수 있고, 필요한 것들이 모두 준비되어 있기 때문에 편리하게 여행을 즐길 수 있다. 어느 호텔에 묵든, 어느 도시에 가든, 그 가방 안의 물건들로 기본적인 생활을 할 수 있다. 이처럼 도커 컨테이너는 프로그램을 실행하기 위해 필요한 '모든 것'을 담고 있다. 그 안에는 코드부터, 실행에 필요한 라이브러리, 설정 파일까지 모든 것이 포함되어 있다. 이렇게 하면, 프로그램을 어디서든 동일한 환경과 조건으로 실행할 수 있게 된다.

2. 도커의 구성

1) 컨테이너(container)란?

  • 운영체제는 Linux, Window, MacOS 등이 있고, Linux에서도 아래 이미지와 같이 많은 배포판이 존재한다. 각 배포판에 따라 Linux 계열도 다르다. 그래서 운영체제와 배포판 등에 따라 기술 및 정책도 다르며, 이에 따라 명령어도 조금씩 달라지면서 새로 만든 애플리케이션을 실제 작업한 노트북에서 테스트 환경이나 실서비스 운영환경으로 옮길 때마다 온갖 이상한 오류를 직면하게 된다.

  • 또한, 하나의 서버에 여러 개의 애플리케이션을 설치하는 것도 문제였다. 서로 사용하는 라이브러리의 버전이 다르거나 한다면 충돌이 발생하는 문제가 생긴 것이다. 그래서 소프트웨어를 다른 컴퓨팅 환경으로 이동하면서도 안정적으로 실행하는 방법이 없을까?라는 고민이 생겼고, 그렇게 탄생한 기술이 컨테이너이다.
  • 컨테이너는 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공한다. 즉, 애플리케이션이 동작하기 위해 필요한 라이브러리나 모듈 등을 묶어준다.

  • 애플리케이션을 구동하는 환경을 컨테이너 박스에 넣고 하나로 만든 것이다. 컨테이너를 옮기면 안에 넣었던 소프트웨어들이 모두 함께 움직이기 때문에 하나하나 관리할 필요가 없게 된다.

2) 도커 이미지

  • 도커에는 컨테이너뿐만 아니라 도커 이미지(Docker Image)라는 또 하나의 중요한 개념이 있다. 이미지는 컨테이너를 생성하기 위해 필요한 설계도를 말한다. 도커는 이미지를 보고 컨테이너를 생성하게 된다. 쉽게 설명하면 도커가 찍어놓은(빌드한) 사진(Image)을 인화(실행)하면 컨테이너가 나오는 것이다. 사진은 여러 번 인화할 수 있고, 똑같은 사진이 인화되는 것처럼 다른 서버에서도 도커가 이미지를 이용해 컨테이너를 만들면 같은 환경을 구축할 수 있는 것이다.
  • 도커 이미지는 도커 파일(Docker File)로 만들 수 있다. 도커 파일은 도커가 어떻게 이미지를 만들지 이해하도록 적은 파일이다. 도커 파일에 사진(Image)을 어떻게 찍을지 적어 놓으면 도커가 그것을 읽고, 이미지를 생성하게 된다.

3) 도커 허브

  • 도커 허브란 도커 이미지를 저장하는 공간이다.
  • 도커 허브를 이용해 이미지를 공유할 수 있고, 인터넷만 연결되어 있으면 어디에서든 이미지를 다운로드할 수 있게 되었다.

  • 위 그림과 같이 도커 파일을 통해 이미지를 생성하면 도커 허브라는 저장소에 업로드하게 된다. 그리하여 각 서버에서는 간단하게 이미지를 다운로드하고, 컨테이너를 생성해 서비스를 시작할 수 있다.

3. 도커 컨테이너의 장점

1) 모듈성

  • 컨테이너화에 대한 Docker 접근 방식은 전체 애플리케이션을 분해하지 않고도 업데이트 또는 복구를 위해 애플리케이션의 일부를 분해하는 기능에 중점을 둔. 이러한 마이크로서비스 기반 접근 방식 외에도 서비스 지향 아키텍처(SOA)와 거의 같은 방식으로 멀티플 애플리케이션 간에 프로세스를 공유할 수 있다.

2) 계층 및 이미지 버전 제어

  • 각 Docker 이미지 파일은 일련의 계층으로 구성되며 이러한 계층들은 단일 이미지로 결합된다. 계층은 이미지가 변경될 때 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성된다.
  • Docker는 이러한 계층을 재사용하여 새 컨테이너를 구축하는데, 이때 구축 프로세스 속도가 빨라진다. 중간 변경 사항은 이미지 간에 공유되므로 속도와 크기, 효율성이 더욱 향상된다. 또한 계층화에는 버전 제어가 내재되어 있다. 새로운 변경 사항이 있을 때마다 변경 로그가 기본 제공되므로 컨테이너 이미지를 완벽하게 제어할 수 있다.

3) 롤백

  • 모든 이미지에는 계층이 있다. 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백하면 된다. 이 기능은 애자일 개발 접근 방식을 지원하며 툴 관점에서 실제로 지속적 통합 및 배포(CI/CD)를 수행하는 데 도움을 준다.

4) 신속한 배포

  • Docker 기반 컨테이너는 배포 시간을 몇 초로 줄일 수 있다. 각 프로세스에 대한 컨테이너를 생성하면 해당 프로세스를 새 애플리케이션과 빠르게 공유할 수 있다. 또한 컨테이너를 추가하거나 이동하기 위해 운영 체제를 부팅할 필요가 없으므로 배포 시간이 상당히 단축된다. 배포 시간이 단축되면 컨테이너에서 생성한 데이터를 쉽고 비용 효율적으로 생성하고 제거할 수 있다.
  • 따라서 Docker 기술은 효율성을 더욱 중요시하며 더욱 세분화되고, 제어 가능한 마이크로서비스 기반 접근 방식이다.

4. 결론

  • 도커를 사용하는 이유를 정리해보면 도커는 애플리케이션 실행에 필요한 모든 요소를 하나의 컨테이너에 패키징하여 환경에 구애받지 않고 언제 어디서나 일관되게 실행할 수 있게 해준다.

패키징: 애플리케이션 실행에 필요한 모든 요소(코드, 라이브러리, 설정 파일 등)를 하나의 컨테이너에 모아두는 것

참고

728x90
반응형
LIST