도커, 컨테이너, 이미지ㅣ도커는 언제, 왜 사용할까? 주의점과 장단점까지

신영·2024년 3월 12일

AI Study

목록 보기
10/44
post-thumbnail

귀엽게 생긴 도커 로고, 보기와 달리 개념을 처음 들여다 보면 이해가 어려운 부분이 많다. 핵심 개념 위주로 빠르게 이해해 보자.

✅ 도커(docker)

도커는 '데이터 또는 프로그램을 격리시키는 기능'을 제공함으로써 앱을 신속하게 구축(build), 테스트(run), 배포(share)할 수 있는 소프트웨어 플랫폼이다.

개인용 컴퓨터나 서버에는 여러 프로그램이 함께 동작하고 있는데, 도커는 이렇게 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다.

격리하는 것의 이점은 뒤에서 자세히 설명하겠다.

✅ 컨테이너(container)

위에서 도커가 데이터나 프로그램을 격리시킨다고 했다. 이때, 격리되어 독립된 것을 창고, 즉 '컨테이너'라고 한다. 결국 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커인 것이다.

✅ 도커 사용을 위한 조건

  1. 도커를 사용하려면 도커 소프트웨어의 본체인 도커 엔진을 설치해야 한다. 그래야 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다.

  2. 컨테이너를 만들려면 도커 엔진 외에도 컨테이너 빵틀과 같은 역할을 할 이미지가 필요하다. 담고 있는 소프트웨어의 종류에 따라 다양한 이미지를 사용한다. 용량이 허락하는 한 하나의 도커에서 컨테이너를 여러 개 만들 수도 있다.

  3. 도커를 사용하는 데는 리눅스 운영체제가 필요하다. 컨테이너에서 작동시킬 프로그램도 리눅스용 프로그램이다. 이는 도커가 리눅스 운영체제에서 사용하는 것을 전제로 만들어졌기 때문이다.

✅ 도커, 왜 사용하는가?

앞에서 도커는 주로 서버 환경을 격리하기 위해 사용된다고 설명했다. 그렇다면 왜 격리하는가?

대부분의 프로그램은 프로그램 단독으로 동작하는 것이 아니라 어떤 실행 환경이나 라이브러리, 다른 프로그램을 이용해 동작한다. 예를 들어, 파이썬으로 작성된 프로그램은 pandas, numpy, tensorflow 등 여러 라이브러리를 사용한다.

소프트웨어 역시 단일 프로그램이 아니라 여러 개의 프로그램으로 구성된 경우가 많다. 또한 다른 프로그램과 특정한 폴더 또는 디렉터리를 공유하거나 같은 경로에 설정 정보를 저장하는 경우도 있다. 이 때문에 프로그램 하나를 업데이트하면 다른 프로그램에도 영향을 미친다.

예를 들어, 시스템 A와 B 모두 MySQL을 사용할 때, 시스템 A는 Python 3.8 버전이어야만 동작 가능한데, 시스템 B를 위해 Python 3.11로 업데이트했다면 시스템 A는 동작하지 않을 것이다.

실행 환경이나 라이브러리, 디렉터리나 설정 파일에서도 같은 일이 일어날 수 있다. 공유하는 대상을 어느 한쪽만을 위해 수정하면 다른 쪽에서 오류가 발생하게 된다.

업데이트뿐 아니라 설계할 때는 문제가 없더라도 실제로 설치해 보면 프로그램 간 공유 문제로 오류를 일으키기도 한다.

이런 상황에서 도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에서 실행되면서 발생하는 문제를 대부분 해결할 수 있다. 시스템 A가 Python 3.8 버전을 사용하고, 시스템 B는 Python 3.11 버전을 사용해야 하는 상황이라면 이들을 세트로 묶어 따로 격리하면 된다.

일반적인 환경에서는 한 대의 서버 혹은 컴퓨터에서 한 벌만 설치할 수 있는 소프트웨어가 대부분이다. 그러나 도커 컨테이너는 완전히 독립된 환경이므로 여러 컨테이너에서 같은 프로그램을 실행할 수 있다. 버전이 동일해도 상관 없다.

정리하자면, 컨테이너 서비스(독립된 환경에 프로그램을 격리)를 사용하는 이유는 다음과 같다.

• 일관성 있고 독립적인 환경
• 반복적인 어플리케이션 배포 가능
• 확장 가능성/유연성 보장
• 한대의 물리 서버에 여러 서비스 배포 가능

이러한 컨테이너를 다루는 도커는 언제 필요할까?

• 같은 팀 내에 협업이 필요하고, 서로 다른 환경에서 app이 실행될 때
• 확장 가능한 앱 배포를 원할 때
• 호스팅된 컴퓨터에 머지않아 많은 환경이 변경될 때(Migration, OS 업그레이드, ...)
• 새로운 기술을 시도하고 싶을 때

그러나 도커를 사용할 때 주의해야 할 점도 분명히 있다.

• 리눅스용 소프트웨어만 지원 가능
• 호스트 서버에 문제 생기면 모든 컨테이너에 영향을 미침
• 서비스가 작은 경우, 컨테이너 하나만 장기간 걸쳐 사용할 경우 큰 장점을 느끼기 어려움


📖'위키북스'의 '그림과 실습으로 배우는 도커 & 쿠버네티스'와 '천재교육'의 '프로젝트 기반 빅데이터 서비스 개발자 양성 과정' 내용을 바탕으로 작성하였습니다.

profile
Human×Tech Bridge Builder | EdTech | AI Service Developer

1개의 댓글

comment-user-thumbnail
2024년 3월 13일

개추 드렸습니다~~

답글 달기