도커란

docker는 응용 프로그램과 모든 종속성을 도커 컨테이너 형태로 함께 패키지화하여 모든 환경에서 응용 프로그램이 원활하게 작동하도록하는 컨테이너화 플랫폼이다.

container는 코드와 그것의 모든 의존성을 패키징하는 소프트웨어의 표준 단위

Docker의 사용 예

Java 프로그램을 만들기 위해 개발자는 자신의 개발컴퓨터에 java와 그 외에 tomcat 설치 등 기타 작업을 합니다.

테스터는 이 응용 프로그램을 테스트하기 위해 위에서 했던 작업을 통해 환경을 구성하여 테스트하게됩니다.

테스트가 완료되면 production 서버에 배포를 해야합니다. 그래서 다시 production환경에도 위와 같은 작업들을 반복하여 환경을 설정합니다.

1) 설정을 위한 시간과 노동

2) 같은 프로그램임에도 불구하고 버전이 달라질 경우는? tomcat7 vs tomcat9

위의 문제들은 docker를 활용하여 완화시키는 방법

개발자는 docker hub(github와 같은 저장소)에서 이미지를 사용하여 환경을 구성시키고 이 이미지를 저장하고 테스터는 이미지를 다운받아 사용한다.

Docker와 Virtual Machines

가상 머신(VM)은 하드웨어를 가상화하는 반면, 도커는 운영 체제를 가상화합니다.

가상 머신은 하이퍼바이저를 이용하여 자원(메모리, 네트워크 대역폭, cpu)을 할당받아 사용함으로써 다른 영역들과 독립적으로 작동한다.

VM은 시스템 자원을 많이 잡아먹는다. 각 VM마다 운영 체제의 전체 복사본, 응용 프로그램, 필요한 바이너리 및 라이브러리가 설치되어있어야 합니다. 또한 한 번 메모리를 할당받게 되면 해당 영역이 다른 VM의 영역과 차단되기 때문에 메모리 단편화같이 남는 부분이 생기게 됩니다.

도커는 여러 컨테이너를 동일한 시스템에서 실행하고 OS커널을 다른 컨테이너와 공유할 수 있습니다(=하나의 OS를 사용).

docker vs vm

Docker Architecture

docker_architecture

도커는 클라이언트-서버 아키텍처를 사용하며 각각을 설명하자면 다음과 같습니다.

  • Docker daemon docker cli로부터 오는 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 객체를 관리합니다.
  • Docker Client dockr rest api를 이용하여 docker daemon에 요청을 전송합니다.
  • Registry docker image를 저장합니다. docker hub(github와 같은)에서 이미지를 올리거나 가져올 수 있습니다.
  • Images 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같이 응용 프로그램을 실행하는 데 필요한 소프트웨어 패키지
  • Containers 도커 이미지의 실행 가능한 인스턴스.

Docker 설치하기

기본적으로 CE(Community Edition) 버전과 EE(Enterprise Edition)버전이 있다.

CE버전은 개개인의 개발자들과 혹은 작은 팀 단위에서 컨테이너 기반의 app들을 경험하고 시작하기 위한 무료 버전이고, EE버전은 엔터프라이즈 규모의 개발자들과 팀들을 위한 버전으로 유료이다.

CE 버전 설치

설치 전 요구사항
  • 우분투 계열의 64비트 OS

  • 오래된 버전의 도커 삭제

    sudo apt-get remove docker docker-engine docker.io containerd runc
    
설치하기
  1. apt 패키지 업데이트

    sudo apt-get update
    
  2. HTTPS를 통해 저장소를 사용할 수 있도록 패키지 설치

    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    
  3. 도커 공식 GPG 키 추가

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  4. 안정적인 저장소를 설정

    sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    
  5. 패키지 업데이트

    sudo apt-get update
    
  6. 도커 CE , containerd 최신 버전 설치

    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  7. 설치 확인

    sudo docker run hello-world
    

    이 명령어를 실행하면 테스트 이미지를 다운받게 되고 해당 이미지를 실행시켜 컨테이너를 구동하게 된다.

  8. 추가 선택 사항

docker daemon은 tcp포트 대신 유닉스 소켓에 바인드 한다. 유닉스 소켓은 기본적으로 root유저에 의해 소유하게 되므로 docker 명령어를 치기 위해서는 sudo의 권한으로 실행해야 한다. sudo 코드를 치기를 원하지 않는다면 그룹을 만들고 이에 권한을 주는 방식으로 해결하자.

  1. 그룹 생성

    sudo groupadd docker
    
  2. 그룹에 사용자 추가

    sudo usermod -aG docker $USER
    
  3. 세션 나갔다가 다시 접속

  4. 적용되었는지 확인

    docker run hello-world
    

이 외에도 선택적으로 추가 설정할 것이 있지만, 나는 여기까지

마치며

  • 도커가 무엇인지 대략적으로 흝어볼 수 있었다.
  • VM과 비교하여 장점을 나열했으나 단점 또한 알고있어야 한다.
  • 다음 포스트에서 기본적인 도커 사용법을 익혀보자.