[Docker] 도커란?

Bam·2025년 6월 7일
0

Docker

목록 보기
1/7
post-thumbnail

요즘 채용공고들을 살펴보면 Docker를 기술 요구사항에 포함시키는 회사들이 정말 많아졌습니다. 체감상 절반 이상?

그래서 도커가 도대체 무엇이고 어디에 어떻게 사용하는지 알아보려고 합니다.

도커란?

먼저 도커 공식문서에서는 다음과 같이 도커를 소개하고 있습니다.
이를 번역 및 요약해보자면 도커는 애플리케이션과 인프라를 분리하여 소프트웨어를 빠르게 배포할 수 있게 만들어주는 플랫폼이라고 합니다.

좀 더 풀어서 설명하자면 스프링부트로 서버 프로그램을 하나 만들었을 때, 크게 웹 서버 역할을 하는 아파치 톰캣, RBDMS(또는 기타 DBMS), 자바 프로그램 이 세 가지가 합쳐져서 실행됩니다.

위와 같은 사황에서 도커는 세 가지 프로그램을 각각의 독립된 환경으로 격리시키는 역할을 한다라는 것 입니다.

이때 각 격리된 환경을 도커는 컨테이너 Container라고 부릅니다. 그리고 이 컨테이너를 다루는데 도움을 주는 기능들을 제공하는 것이 바로 도커 Docker입니다.


독립된 환경에 분리하는 이유

도커가 애플리케이션과 인프라를 분리시켜준다는 것은 알겠는데 왜 분리를 하는걸까요?

소프트웨어는 여러 개의 프로그램으로 구성되는 경우가 대다수입니다. 당장 위에서 예시를 든 스프링부트 서버 프로그램도 자바 실행 환경, 스프링 프레임워크, DBMS, DB와 연결하기 위한 JDBC 라이브러리 등 무수히 많은 다른 프로그램으로 구성되어 있습니다.

그렇기 때문에 소프트웨어를 구성하는 프로그램의 설정을 변경하거나 업데이트를 하게 되면 해당 프로그램을 사용하는 모든 소프트웨어에 영향을 주게 됩니다.위 그림처럼 두 개의 소프트웨어가 MySQL 8.0 버전을 사용하고 있습니다.그런데 어느날 MySQL이 9.0 버전을출시하게 되었고 소프트웨어 B는 그에 맞춰 업데이트를 진행하도록 설계 및 개발이 되었지만 소프트웨어 A가 오직 8.0 버전에서만 동작하도록 설계되어 있다고 한다면 오류가 소프트웨어 A에서 오류가 발생하게 됩니다.그래서 이런 오류를 방지하고자 소프트웨어 A를 위한 MySQL 8.0 환경이 포함된 컨테이너와 B를 위한 컨테이너를 격리해서 소프트웨어마다 독립된 환경을 보장해줄 필요가 있는 것입니다.


도커 엔진과 이미지

컨테이너를 분리하고 관리하기 위해 도커를 사용한다고 했었습니다. 그리고 이 도커를 사용하려면 도커 엔진을 설치해야합니다. 도커 엔진을 이용해서 컨테이너를 생성하고 실행시킬 수 있습니다. 도커 엔진은 주어진 용량 내에서 여러 개의 컨테이너를 생성할 수 있습니다.

도커 엔진이 컨테이너를 만들기 위해서는 이미지 Image라는 것이 필요합니다. 이미지는 컨테이너를 만들기 위한 템플릿입니다.

이미지는 애플리케이션을 실행하기 위한 정보들(설정, 의존성, 환경 정보, 애플리케이션 등)을 포함하고 있습니다. 그래서 Docker가 이미지를 실행하게되면 컨테이너가 만들어집니다.

애플리케이션에서는 Dockerfile이라는 이름의 스크립트 파일을 정의해서 이미지를 만들도록 합니다.
이 파일엔 Docker가 실행되며 수행할 명령어들이 한 줄 씩 적히게 되어 도커가 이 파일을 기반으로 이미지를 생성하게 됩니다.
이는 추후에 좀 더 자세히 알아보도록 하겠습니다.

이미지는 다음과 같은 특징들을 가집니다.

  • 읽기 전용: 실행 중인 컨테이너는 이미지를 기반으로 쓰기 허용 계층을 하나 얹어서 사용
  • 캐싱: 레이어(이미지 명령 줄) 단위로 캐시하여 중복 빌드 시간을 절약
  • 버전 관리: 이미지마다 태그를 붙여서 관리

도커는 Linux 기반으로 동작한다

Docker는 반드시 Linux 운영체제를 이용해서 동작하게 되어있습니다.

그런데 우리는 보통 Windows 또는 macOS를 사용하죠? 게다가 이 두 운영체제에서 도커는 멀쩡히 잘 작동합니다.

그 이유는 Windows, macOS를 위한 도커 앱은 내부적으로 Linux 운영체제가 사용되기 때문입니다. Windows, macOS에서는 먼저 리눅스 가상머신이 실행되고 그 위에 도커 엔진이 동작하는 방식으로 작동이 되고 있는 것 입니다.

이렇듯 도커는 Linux 환경에서만 동작하기 때문에 각 컨테이너의 내부에는 소프트웨어의 명령을 Linux 시스템에서 동작할 수 있도록 Linux 라이브러리, 유틸리티 등이 포함되어 있습니다.


도커 허브

도커를 처음 사용하는 입장에서는 위 예시처럼 스프링부트, MySQL, 아파치 톰캣 등이 포함된 이미지를 손수 만드는 것이 쉽지않습니다. 처음 사용하지 않더라도 번거로울 수 있죠.

그래서 사전에 제작된 이미지를 구할 수 있도록 도커 측에서 공식적으로 도커 허브를 운영하고 있습니다.

https://hub.docker.com/

이런식으로 MySQL 등 공식적으로 제공하는 이미지가 있기 때문에 사용하고자하는 이미지를 가져오기만 하면 됩니다.

docker pull mysql:latest

필요한 공식 이미지를 하나하나 pull해도 되고 다른 개발자가 만들어놓은 여러 소프트웨어가 포함된 이미지를 가져다 사용해도 됩니다. 특히 아파치 + MySQL과 같은 조합은 정말 많이 사용되기 때문에 검색을 해보면 다른 개발자가 만들어놓은 이미지가 많습니다.

초보자의 경우 신뢰성있는 콘텐츠에 있는 항목에서 이미지를 다운받는 것을 권장드립니다.


도커 설치

도커는 공식 홈페이지에서 다운로드합니다.

Docker Desktop이라는 프로그램을 다운받게 되는데요. 이 앱은 가상 환경, 경량 Linux OS, 도커 엔진이 포함된 패키지 형태로 제공되는 앱이라서 이 앱을 다운받기만 하면 필요한 환경들을 따로 설치할 필요 없이 바로 도커를 설치하고 실행할 수 있게 됩니다.

0개의 댓글