수리 공작소

Docker 개념 정리 본문

Studies/Docker & Kubernetes

Docker 개념 정리

suleee 2025. 2. 3. 15:00

※ 이 글은 [그림과 실습으로 배우는 도커 & 쿠버네티스] 책을 요약 정리하였습니다.

Docker 란?

  • 데이터 또는 프로그램을 격리시키는 기능을 하는 소프트웨어
  • 주로 서버에서 사용
  • 마치 여러 물건으로 어지러진 방을 조립형 창고 같은 것을 이용하여 분리하여 정리한 것
  • 이 조립형 창고 역할을 하는 것을 컨테이너라고 지칭

Docker Engine 이란?

  • Docker의 본체, 즉, 도커가 제공하는 기능의 가장 핵심적인 부분을 Docker engine (도커 엔진)이라고 함
  • 이는 컨테이너를 생성하고 구동시킴

Docker Image 란?

  • 컨테이너를 만들기 위해 필요함 (틀과 같은 역할)
  • 보통 운영체제(커널 제외한 부분) + 필요 소프트웨어를 포함
  • DockerHub 사이트에서 필요한 이미지를 다운 받을 수 있음 (주로 공식 이미지를 사용하는 것이 좋음)
  • 만일 필요한 파일만을 직접 넣고 초경량 이미지를 만들고 싶다면, 운영체제(커널 제외 부분)마저 포함하지 않은 빈 이미지인 docker scratch를 직접 커스텀 할 수 있다고 하지만 추천하지 않는다고 함

Docker를 사용하려면 호스트 컴퓨터도 리눅스 환경 필수

  • 왜? 도커가 리눅스 기반이고, 도커 컨테이너에는 운영체제의 일부 (커널을 제외한 부분)를 포함하고 있어서 이와 호환이 될 수 있는 운영체제의 커널 부분이 필요함. 즉, 둘 다 리눅스로 맞추어져야 함.
  • 이미 리눅스 환경을 포함하고 있는 Docker Desktop을 사용하거나, 윈도우에서 도커를 사용하려면 WSL, 맥에서 도커를 사용하려면 VMWare로 리눅스 환경 세팅 필요

도커 사용 이점인 프로그램 및 데이터 격리, 왜 필요?

  • 대부분의 프로그램은 단독으로 동작하지 않음 -> 어떠한 실행환경이나 라이브러리가 필요
  • 또, 다른 프로그램과 특정한 디렉터리 혹은 설정 정보를 공유하기도 함
    • 즉, 이렇게 서로 영향을 주는 사이에서 프로그램 하나를 업데이트와 같이 수정을 하면, 다른 프로그램에 영향을 준다는 의미
    • 원래는 한 물리적 서버에는 같은 논리적 서버가 2개 설치될 수 없음
    • 하지만 도커를 사용하여 격리 환경을 갖추면 같은 논리적 서버가 2개 이상 설치될 수 있음, 즉, 같은 서버 다른 버전을 여러개 설치할 수 있음
  • 위와 같이 격리를 시켜서 각각의 프로그램에 맞는 환경을 따로 조성할 수 있음
  • 또 다른 장점으로 이식성이 뛰어남
    • 컨테이너를 내보내기 하면 이대로 다른 도커에도 같은 환경을 조성할 수 있음
  • 궁극적으로 한 물리적 서버에 여러 논리적 서버를 환경에 맞게 마음껏 조성할 수 있으므로 비용절감! 자원절약!

컨테이너의 리눅스 배포판과 호스트 컴퓨터의 리눅스 배포판이 달라도 상관 없음

  • 각각의 배포판의 차이는 유저 스페이스의 각각이 명령체계와 패키지 관리 방식 등을 다르게 구현했을 뿐이지 커널 자체는 같은 것에 뿌리를 두고 있음 -> https://jh-labs.tistory.com/458 참고

도커의 생애주기

  • 생성 -> 실행 -> 정지 -> 폐기 -> 생성  -> 실행 -> 정지 -> 폐기 { .... }
  • 도커는 빠른 배포와 확장을 고려하여 설계됨
  • 여러 컨테이너에 어떤 수정이 필요할 때는 한 컨테이너에서 수정 후 이미지를 만들어 여러개를 동일하게 찍어내는 것이 가능
  • 이러한 이점을 잘 활용을 하면, 도커를 지우고 생성하는 과정이 반복됨
  • 때문에 도커의 생애주기라는 개념이 존재
  • 또, 이러한 특성 때문에 폐기 시점에 저장이 되어야 할 데이터가 마운트 된 곳에 잘 남아있는지, 중요한 데이터를 꼭 확인해야함 

도커의 단점? 유의점?

  • 리눅스만 지원
  • 호스트 컴퓨터에 여러 서버 환경을 조성 -> 호스트 컴퓨터에 의존도가 높다 
    • 물리적 컴퓨터 혹은 호스트 환경이 망가졌을 대의 대비책을 확실히 둬야 함

 

updated at 2025.12.08.

 

도커를 언제 사용하는지?

1. 프로젝트 실행 환경을 통일해야 할 때 

도커 이미지 안에 들어갈 수 있는 설정 내용들

  1. OS (최소한의 Linux)
    → Ubuntu, Alpine, Debian 등
  2. 필요한 언어 런타임
    → Node, Python, Java, Go 같은 런타임 버전까지 정확히 포함
  3. 필요한 라이브러리들
    → pip install, npm install 등 설치된 그대로
  4. 앱 코드 + 설정 파일
  5. 환경변수, 포트 설정 등 실행 규칙

이런 것을 동일하게 가져갈 수 있다.

 

2. 내 호스트 OS에 영향 없이 무언가를 설치하고 싶을 때

예를 들어 지금 내 호스트 os의 node 버전과 다른 버전의 node를 사용해보고 싶을 때.

-> 즉, 따로따로 돌리니까 버전 충돌의 걱정이 없다는 것.

 

3. 여러 서비스를 동시에 구성해야 할 때

- 일단 버전 충돌 문제 줄여주고

- 포트 충돌 문제 없고

- docker compose를 이용하면 여러가지 설정 포함해서 명령어 한번에 모든 서비스 실행 가능

- 또 보안적으로도.,,

 

https://www.linkedin.com/posts/avi-chawla_docker-explained-in-2-minutes-most-developers-share-7402981668388872193--9lh?utm_source=share&utm_medium=member_desktop&rcm=ACoAAEMQj7IBC1cinZwkCrrPiWfo-WssQmzpCpI

도커 클라이언트와 도터 데몬은 API