[Docker] Docker 기초

기존에 혼자 Docker에 대해 잠깐 공부한 적 있지만 심도있게 다루지는 않았습니다.
카카오 테크 부트캠프를 시작하면서 클라우드 수업을 듣기 시작했고
docker는 매우 중요한 부분이라 생각해 다시 정리하면서 복습하고자 합니다.

Docker


개념

컨테이너 기반의 오픈소스 가상화 플랫폼으로 애플리케이션을 소프트웨어의 실행 환경과 함께 패키징해 손쉽게 배포, 실행 할 수 있도록 도와준다.

주요 개념

  • Image : 애플리케이션과 필요한 모든 종속성(라이브러리, 설정 파일 등)을 포함하는 읽기 전용 템플릿, 컨테이너를 만드는데 사용
  • Container : 이미지를 실행한 상태로 격리된 애플리케이션 실행 환경 제공, 독립적으로 실행되며 호스트 시스템 리소스 공유
  • Dockerfile : 이미지 정의하는 설정 파일, 이미지를 빌드하는데 필요한 명령어 포함
  • DockerHub : Docker 이미지 중앙 저장소로 공개 또는 개인 저장소로 사용 가능

동작 방식

  • Docker Daemon : Docker에 핵심 프로세스로 컨테이너 생성 및 관리
  • Client : 사용자와 데몬 간의 인터페이스 역할 수행
  • 이미지 생성 : Dockerfile을 이용해 이미지 생성, 각 명령어는 새로운 레이어 생성
  • 컨테이너 실행 : 이미지를 사용해 컨테이너 실행, 이미지의 읽기 전용 레이어 위에 쓰기 가능한 레이어 추가

최적화 방법

  • 다단계 빌드 사용 : 여러 단계에 걸쳐 빌드해 중간 산출물을 제거를 통해 불필요한 빌드 단계와 종속성을 제거하여 경량화
  • 캐시 활용 : Dockerfile 명령어 순서를 최적화하여 빌드 속도 개선
  • 불필요한 파일 제거 : 이미지에 포함되지 않아도 되는 파일을 .dockerignore 파일에 추가해 경량화
  • 경량 베이스 이미지 사용 : alpine과 같은 이미지 사용
  • 컨테이너 리소스 제한 : CPU와 메모리를 제한하여 시스템 리소스를 효율적으로 사용

Container


개념

  • 애플리케이션과 그 애플리케이션이 실행되는 환경을 패키징하는 가벼운, 독립적인 실행 환경이다.
  • 가상머신과 비슷하지만 훨씬 가볍고 빠르다.
  • 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 등 리소스를 쉽게 공유하고 별도의 실행 환경을 제공한다.

주요 특징

  • 경량성 : 호스트 운영 체제의 커널을 공유하기 때문에 가상머신보다 가볍고 빠른 실행이 가능하다.
  • 이식성 : 어디서나 동일하게 실행된다.
  • 격리성 : 컨테이너는 서로 독립적으로 실행된다. 각 컨테이너는 자체 파일 시스템, 네트워크, 프로세스 공간 소유

동작 원리

Docker 컨테이너는 Docker 이미지로 부터 생성되며 이미지는 컨테이너를 실행하기 위한 모든 파일과 설정이 포함된 불변 템플릿이다.

가상머신(Virtual Machine) vs Docker


Docker 탄생 배경


전통적인 배포 방식

소프트웨어 개발과 배포 과정에서 발생하는 다양한 문제점을 해결하기 위해 등장했다.

  • 환경 불일치 : 개발 환경과 운영 환경이 서로 다르다면 정상 작동하지 않을 수 있다.
  • 복잡한 설정 : 배포 시 수 많은 설정들을 하나하나 설정 하다보면 실수를 발생시킬수 있고 시간이 오래걸린다.
  • 리소스 낭비 : 각 애플리케이션 마다 별도의 운영 체제를 실행하고 이는 CPU와 메모리 같은 자원을 많이 소비한다.

도커

  • 일관된 환경 제공 : 개발, 테스트, 배포 환경을 모두 동일하게 만들어 준다.
  • 간편한 설정 : 애플리케이션이 실행되는 환경을 코드로 정의
  • 리소스 효율성 : 호스트 운영 체제의 커널을 공유해 가볍고 빠르다.

Docker 명령어 정리

  • run: 이미지에서 새로운 컨테이너 생성 및 실행
  • exec: 실행 중인 컨테이너 내에서 명령어 실행
  • ps: 현재 실행 중인 컨테이너 목록 표시
  • build: Dockerfile을 기반으로 이미지 빌드
  • pull: 레지스트리에서 이미지 다운로드
  • push: 이미지를 레지스트리에 업로드
  • images: 로컬에 저장된 이미지 목록 표시
  • login: 레지스트리에 로그인
  • logout: 레지스트리에서 로그아웃
  • search: Docker Hub에서 이미지 검색
  • version: Docker 버전 정보 표시
  • info: 시스템 전체 정보 표시
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Hugo로 만듦
JimmyStack 테마 사용 중