Docker 시작하기 01 - Docker 설치 및 기본 사용법

Docker 시작하기 01 - Docker 설치 및 기본 사용법

2018, Sep 05    

도커를 안쓰고 잘 버티다가 새로운 프로젝트 들어가기 전 조금 여유가 있어 한번 사용해보기로 했습니다.

대다수의 개발자가 이미 Docker 를 사용하고 있는 시점에서 좀 늦은 감이 있지만, 처음 사용해본 감상으로는 완전 신세계 였습니다.
@_@ 아무리 컨테이너 기반이라 하더라도 분명 VM 기반 일텐데 마치 리눅스를 설치해서 사용하고 있는 느낌이었습니다. 정정합니다. Windows 7, 8 에서만 VM 위에서 돌아가는 거라고 하죠 그 외의 대다수의 OS 에서는 유닉스 기반이기 때문에 그리고 이미지가 Docker hub 를 통에 올릴 수 있고 공유 되는 생태계는 마치 서버관리계의 github? 을 보는 느낌이었습니다.


Docker란?

도커는 2013년 Docker. Inc 에서 출시한 리눅스 컨테이너를 기반으로한 컨테이너 관리 시트템 입니다. 기존의 가상화 시스템들은 호스트를 통짜로 가상화 시키기 어떻게 해도 무거울 수 밖에 없는 구조 였습니다.
이런 단점들을 해결하기 위해 리눅스 컨테이너라는 기술이 등장하게 되었습니다. 리눅스 컨테이너는 기존의 가상화 시스템과는 달리 리눅스 커널의 groupsnamespace 를 이용해 필요한 어플리케이션이나 라이브러리, 실행되는 프로세스들을 따로 격리시키는 방식을 채택했습니다.

결과적으로 컨테이너들끼리는 서로 간섭받지 않지만 실행파일을 호스트가 직접 실행 하는 방식을 채택하여 가벼운 가상환경을 구축할 수 있게 되었습니다.

도커는 이런 장점들이 있습니다.

  1. AWS, Google Cloud, Azure 에서 공식지원한다.
  2. 복잡한 리눅스 어플리케이션을 컨테이너로 묶어서 실행할 수 있다.
  3. 개발, 테스트, 서비스 환경을 하나로 통일할 수 있다.
  4. 컨테이너의 기반이 되는 이미지를 쉽게 클라우드(docker hub)를 통해 공유할 수 있다.
  5. OS를 가상화 하는 것보다 훨씬 가볍다.


Docker 설치

windows 7 기준으로 설명하겠습니다.

  • Docker를 설치하기 위해서 OS 의 가성화 설정을 변경해야 합니다. Microsoft® Hardware-Assisted Virtualization Detection Tool 를 설치하셔서 실행해 주세요.
  • 그리고 Docker Toolbox(클릭) 다운받아 설치합니다.
    Windows 버전별로, OS 별로 설치법이 다르기 때문에 다른 OS 를 사용하시는 분들은 해당 OS의 설치법 등을 검색하셔야 할 것 같습니다. 설치는 default 설정 그대로 설치하시면 됩니다.
  • 설치후 바탕화면에 있는 Docker QuickStart Terminal 을 클릭해 Docker 를 기동합니다.
    터미널 화면이 뜨면서 $ 프롬프트가 보인다면 제대로 설치가 완료된 것입니다.

설치된 docker machine 을 확인하려면 docker-machine ls 를 윈도우 커맨드에 입력해서 확인할 수 있습니다.


우분투 이미지 받아서 실행해보기

단 한줄의 명령으로 우분투를 윈도우에서 실행할 수 있습니다.

$ docker run -it ubuntu bash

이 명령 한줄로 docker 는 로컬에 우분투 이미지가 있는지 검색 후 없으면 클라우드에서 자동으로 이미지를 내려받습니다. 그리고 나서 입력한 bash 를 실행해서 프롬프트를 화면해 표시해 줍니다. 같이 입력한 [-i] 옵션과 [-t] 옵션은 각각 키보드 인풋과 가상 터미널을 사용한다는 걸 의미합니다.

이제 터미널에서 ls 를 실행해보시면 어디서 많이 보던 폴더 구성이 보이실 겁니다.


필수적인 Docker 명령어들

  • run 먼저 앞서 사용했던 run 에 대해 알아보겠습니다.
    이미지를 가지고 컨테이너를 생성하는 명령어 입니다.
    컨테이너를 생성하면서 여러 옵션을 설정하거나 컨테이너 생성과 동시에 주어진 COMMAND 를 컨테이너 안에서 실행할 수 있습니다. 기본적으로는 docker run [OPTIONS] IMAGE [COMMAND] 형식으로 실행하게 됩니다.
    • 필수적인 옵션들
      • -d, –detach 컨테이너 생성시 컨테이너 ID를 반환하고, 컨테이너는 백그라운드 에서 실행합니다.
      • -p, –publish 호스트의 포트와 컨테이너의 포트를 바인딩합니다. -p [호스트포트]:[컨테이터포트] 와 같이 사용합니다. 포트는 복수로 등록할 수 있습니다.
      • –name 컨테이너의 이름을 설정합니다. –name 옵션을 지정하지 않을경우 도커가 자동으로 컨테이너에 이름을 할당합니다.
      • -i, –interactive STDIN(키보드 인풋) 을 사용합니다. 키보드를 컨테이너에서 사용할 수 있게 합니다.
      • -t, –tty 가상 터미널을 사용합니다. 설정할 경우 터미널을 사용할 수 있습니다.
  • start docker start [컨테이너명] 으로 종료된 상태의 컨테이너를 실행합니다.
  • ps docker ps 로 현재 실행중인 컨테이너를 표시합니다.
    • 옵션
      • -a, –all 실행중인 컨테이너 포함해서 모든 컨테이너를 표시합니다.
  • stop 실행중인 컨테이너를 종료합니다.
  • restart 실행중인 컨테이너를 재시작합니다.
  • attach 스탠다드 인풋, 아웃풋, 에러 스트림을 포함하여 컨테이너에 접속합니다.
  • exec docker exec [옵션] [컨테이너명] [커멘드] 의 형태로 실행합니다. exec는 이미 실행중인 컨테이너에 새로운 프로세스를 추가하여 실행됩니다.
  • rm docker rm [컨테이너명] 으로 해당 컨테이너를 삭제합니다.
  • rmi docker rmi [이미지명] 으로 해당 이미지를 삭제합니다.