[Docker] 설치 및 사용법

[Docker] 설치 및 사용법

안녕하세요? 정리하는 개발자 워니즈 입니다. 오늘 소개해드릴 내용은 제가 가장 관심이 있고, 흥미를 갖는 부분인데요.
바로 docker에 대해서 소개를 드리려 합니다. 필자가 운영하는 프로젝트에서는 아직 docker를 도입해서 사용하고 있지는 않지만, 개인적으로 docker로 jenkins와 redmine등을 띄워서 사용하고 있습니다.

도커를 사용하면서 느낀거는 격리된 환경에서 VM장비에 영향을 주지않고, 뭐든 손쉽게 할수 있다는 장점이 있는데요.
공부 할 수 있는 문서를 찾다보니, 아래의 깃헙 주소를 알게 되었습니다.

도커 학습

1. 도커의 역사


도커는 2013년 3월 산타클라라에서 열린 Pycon Conference에서 dotCloud의 창업자인 Solomon Hykes가 The future of Linux Containers 라는 세션을 발표하면서 처음 세상에 알려졌습니다.

이 발표 이후 도커가 인기를 얻으면서 2013년 10월 아예 회사이름을 도커(Docker Inc.)로 바꾸고 2014년 6월 도커 1.0을 발표합니다. 2014년 8월 도커에 집중하기 위해 dotCloud 플랫폼을 매각하고 2015년 4월 $95M(약 1,100억원) 투자를 유치한 후 계속해서 빠르게 성장하고 있습니다. (현재까지 총 투자액은 $180M이며 2016년 6월 MS에서 $4B/₩4조에 인수하려 했다는 기사가 있습니다.)

2. 도커란?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

서버에서 이야기하는 컨테이너도 이와 비슷한데 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있습니다.

  • 컨테이너
컨테이너라 하면 배에 실는 네모난 화물 수송용 박스를 생각할 수 있는데 각각의 컨테이너 안에는 옷, 신발, 전자제품, 술, 과일등 다양한 화물을 넣을 수 있고 규격화되어 컨테이너선이나 트레일러등 다양한 운송수단으로 쉽게 옮길 수 있습니다.
  • 가상화 vs 반가상화
기존의 가상화 방식은 주로 OS를 가상화하였습니다.

우리에게 익숙한 VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었습니다.

이러한 상황을 개선하기 위해 CPU의 가상화 기술(HVM)을 이용한 KVMKernel-based Virtual Machine과 반가상화 Paravirtualization방식의 Xen이 등장합니다. 이러한 방식은 게스트 OS가 필요하긴 하지만 전체OS를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었습니다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었습니다.

하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VMVirtual Machine을 사용하는 느낌을 줍니다. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get이나 yum으로 패키지를 설치할 수 있으며 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있습니다. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있습니다.

  • 이미지
도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념입니다.

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.

3. 도커 설치

자 이제 본격적으로 도커 설치에 대해서 알아보겠습니다. 필자가 사용하는 리눅스는 레드헷 계열이기 때문에 그에 맞춰서 설치를 해보도록 하겠습니다.

  1. Docker CE Rpository on RHEL
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum makecache fast
    
  2. Install the latest version of Docker CE on RHEL
    sudo yum -y install docker-ce
    sudo yum -y install docker-ce--
    
  3. Docker start
    sudo systemctl start docker
    

4. 도커 사용법

도커를 설치하면 본격적으로 도커의 기본 이미지를 한개 띄워 볼수 있다.

  • 실행 명령어
    docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
    
  • 자주 사용하는 옵션

옵션 설명
-d 백그라운드 실행
-p 포트 연결(포워딩)
-v 볼륨 연결(마운트)
-e 환경변수
-name 컨테이너 이름
-rm 컨테이너 자동 제거
-it 터미널 입력을 위한 옵션
-link 컨테이너 연결
  • 간단한 실행
    docker run -d --name=grafana -p 3000:3000 grafana/grafana
    

    필자가 운영하는 곳은 grafana 대쉬보드를 잘 활용하고 있기에 해당 예제를 보여줍니다.

  • 프로세스 확인
    docker ps -a
    

    run명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull)를 한 후 컨테이너를 생성(create)하고 시작(start) 합니다.

  • 컨테이너 내부 접속
    docker exec -it grafana /bin/bash
    

    컨테이너 내부에 들어가기 위해 bash 쉘을 실행하고 키보드 입력을 위해 -it 옵션을 줍니다.

    exit로 bash 쉘을 종료하면 컨테이너도 같이 종료됩니다.

  • 컨테이너 중지
    docker stop [OPTIONS] CONTAINER [CONTAINER...]
    

    옵션은 특별한게 없고 실행중인 컨테이너를 하나 또는 여러개 (띄어쓰기로 구분) 중지할 수 있습니다.

    앞에서 실행한 tensorflow 컨테이너는 더이상 필요가 없으니 중지해 보겠습니다. 중지하려면 컨테이너의 ID 또는 이름을 입력하면 됩니다. tensorflow 컨테이너의 ID를 ps명령을 통해 확인하고 중지해 봅니다.

  • 컨테이너 제거
    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    

    종료 명령어도 옵션은 특별한게 없습니다. 종료된 컨테이너를 하나 또는 여러개 삭제할 수 있습니다. 종료된 ubuntu 컨테이너와 tensorflow 컨테이너를 삭제해보겠습니다.

  • 이미지 목록 확인

    docker images
    

  • 이미지 다운로드

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    

    run명령어를 입력하면 이미지가 없을 때 자동으로 다운받으니 pull명령어를 언제 쓰는지 궁금할 수 있는데 pull은 최신버전으로 다시 다운 받습니다.

  • 이미지 삭제

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    

    images명령어를 통해 얻은 이미지 목록에서 이미지 ID를 입력하면 삭제가 됩니다. 단, 컨테이너가 실행중인 이미지는 삭제되지 않습니다. 컨테이너는 이미지들의 레이어를 기반으로 실행중이므로 당연히 삭제할 수 없습니다.

  • 컨테이너 로그

    docker logs [OPTIONS] CONTAINER
    

5. 마치며

여기까지 도커에 대해 기본적인 내용부터 컨테이너를 실행하고 살펴보는 방법까지 알아보았습니다. 저는 기본적으로 컨테이너 1개만을 올려서 사용해봤었는데요. 계속해서 compose구성(docker의 명령어들의 집합)을 하고 배포시에는 오케스트레이션툴(스웜/쿠버네티스)까지 학습하며 정리해볼 예정입니다.
[1]도커 Compose 구성

워니즈 블로그
워니즈 깃헙

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다