[Docker] Docker, Containerization 이란?

dyomi·2024년 8월 16일

Containerization, 컨테이너화

컨테이너화란, 소프트웨어의 실행 환경을 패키징하여 어디서나 동일하게 실행할 수 있도록 하는 기술을 의미한다.

이 컨테이너는 운영 체제의 커널을 공유하면서 독립된 공간을 사용하므로 기존의 가상머신에 비해 적은 자원을 사용하고, 모든 환경(개발, 테스트, 프로덕션 등)에서 동일한 방식으로 동작해서 이식성이 좋다.

또한 격리된 공간을 사용함으로 시스템 간의 충돌을 방지하고, 가상머신보다 더 빠르게 생성 및 제거될 수 있어서 신속한 배포가 가능하다.

Docker

도커는 이러한 컨테이너화를 쉽게 구현할 수 있도록 도와주는 오픈소스 플랫폼으로, 도커를 사용하면 애플리케이션과 그 의존성을 패키징하고 컨테이너를 생성, 관리, 배포를 할 수 있다.

구성 요소로는 도커 컨테이너를 생성하고 실행시키는 핵심 기술인 도커 엔진이 있고, 컨테이너 실행에 필요한 모든 것을 포함하는 불변의 파일 시스템인 도커 이미지가 있다. 그리고 도커 이미지를 실행한 상태로, 애플리케이션의 격리된 실행 환경인 도커 컨테이너와 도커 이미지를 저장하고 배포하는 저장소인 도커 레지스트리가 존재한다. 추가로 Docker Hub는 가장 많이 사용되는 공개 레지스트리이다.

장점

도커와 컨테이너화의 장점은 개발 환경의 일관성과 빠른 배포와 확장성이다. 그리고 가상머신보다 적은 시스템 자원을 사용해서 자원의 효율성을 높이고 격리된 실행환경으로 다른 애플리케이션에 영향을 미치지 않는다.

특히나 도커는 마이크로서비스 아키텍처에 널리 사용되며, 각 마이크로 서비스를 개별 컨테이너로 패키징해서 독립적으로 배포하고 확장할 수 있다.

또한, CI/CD 파이프라인을 통해 테스트, 빌드, 배포 과정을 자동화하고 각 단계에서 동일한 환경을 유지할 수 있다.

클라우드 서비스 제공자들은 도커 컨테이너를 지원하는 플랫폼을 제공하여 클라우드 환경에서 쉽게 애플리케이션을 배포하고 관리할 수 있고, 대표적으로 AWS의 ECS, Azure의 AKS, Google Cloud의 GKE 등이 존재한다.

이 기술을 사용하면 애플리케이션의 개발, 테스트, 배포, 확장 및 유지보수가 보다 효율적이고 일관되게 이루어질 수 있다.



가상머신과 컨테이너의 차이?

가상머신은 독립적인 게스트 OS를 가지고 있어서 독립적인 플랫폼을 하나씩 증가시킬 때마다 불필요한 OS를 만드는 작업을 계속 해야된다. 즉, 확장성이 떨어진다. 그리고 메모리나 자원 관리가 유동적으로 되는게 아니라 처음부터 정해놓고 실행하기 때문에 비효율적이다.

컨테이너는 하나의 호스트 OS 위에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행된다. 불필요한 OS를 만드는 작업 및 인프라를 독립적으로 나누는 작업이 필요 없어서 확장성이 좋고 빠르다.

도커에서 사용되는 명령어

  • 도커 이미지
    docker pull : Docker Hub 또는 레지스트리에서 이미지를 다운로드한다.
    docker build: Dockerfile을 사용해서 이미지를 빌드한다.
    docker images: 현재 시스템에 저장된 이미지를 목록으로 표시한다.
    docker rmi: 도커 이미지 삭제
    docker tag: 이미지를 새로운 이름 또는 태그로 태그한다.

  • 도커 컨테이너
    docker run: 새로운 컨테이너를 생성하고 실행한다.
    docker ps: 현재 실행 중인 컨테이너 목록을 푶시한다.
    docker start: 정지된 컨테이너를 시작한다.
    docker stop: 실행 중인 컨테이너를 정지한다.
    docker restart: 컨테이너를 다시 시작한다.
    docker rm: 컨테이너를 삭제한다.
    docker exec: 실행 중인 컨테이너 안에서 명령을 실행한다.
    docker logs: 컨테이너의 로그를 출력한다.
    docker inspect: 컨테이너 또는 이미지의 상세 정보를 출력한다.
    docker commit: 현재 컨테이너의 상태를 이미지로 저장한다.

  • 도커 네트워크 및 볼륨
    docker network ls: 도커 네트워크 목록을 표시한다.
    docker network create: 새로운 도커 네트워크를 생성한다.
    docker network connect: 컨테이너를 네트워크에 연결한다.
    docker network disconnect: 컨테이너를 네트워크에서 분리한다.
    docker volume ls: 도커 볼륨 목록을 표시한다.
    docker volume create: 새로운 도커 볼륨을 생성한다.
    docker volume rm: 도커 볼륨을 삭제한다.

  • 도커 시스템
    docker info: 도커 데몬의 상세 정보를 출력한다.
    docker system df: 도커 디스크 사용량을 출력한다.
    docker system prune: 사용하지 않는 데이터(이미지, 컨테이너, 네트워크, 볼륨)를 모두 삭제한다.
    docker stats: 실행 중인 모든 컨테이너의 실시간 리소스 사용량을 표시한다.

  • Docker Compose
    docker-compose up: docker-compose.yml 파일을 기준으로 서비스 및 컨테이너를 시작한다. (옵션 -d는 백그라운드에서 실행)
    docker-compose down: 모든 컨테이너와 네트워크를 중지 및 삭제한다.
    docker-compose build: 모든 서비스에 대한 이미지를 빌드한다.
    docker-compose ps: 실행 중인 컨테이너의 상태를 표시한다.
    docker-compose exec: 특정 서비스 내에서 명령을 실행한다.
    docker-compose logs: 모든 서비스의 로그를 출력한다.



참고 자료
컨테이너 및 도커 개념정리

profile
기록하는 습관

0개의 댓글