NAS & ODROID/Docker NAS

Docker NAS - 도커 설치와 이미지를 컨테이너로 실행하는 방법

awesometic 2019. 4. 30. 17:26
반응형
  • 퍼가실 땐 링크로 퍼가주시고, 인용할 경우 출처를 꼭 남겨주세요.
  • 막히는 부분이나 이상한 부분, 더 괜찮은 아이디어는 댓글로 자유롭게 달아주세요.
  • 제 블로그에는 구글 광고가 삽입되어 있습니다. 괜찮으시다면 광고 한 번씩 눌러주세요. 힘도 되고 책임감도 높여줘서 글의 퀄리티가 향상됩니다. :)

도커 사용법

도커의 기본적인 동작을 아셨다면, 이제 사용법을 간단히 써보려고 합니다.

일단 도커는 명령어로 실행하는 프로그램입니다. 흔히 아시는 검은색 바탕에 흰색 글자로 되어 있는 화면에서만 이미지를 실행시킬 수 있어요.

리눅스 기반 NAS(우분투, OMV 등)를 운용하셨던 분들에게는 받아들이기 어렵지 않겠습니다만

특히 제 블로그 가이드를 따라해보셨던 분들

처음 하시는 분들은 너무 생소하실 수 있습니다. 전혀 어렵진 않지만, 그래도 이 가이드는 도커에 집중하기 위해 리눅스 CLI 환경을 경험해보셨던 분들을 대상으로 작성하겠습니다.

도커 설치

도커 설치는 공식 홈페이지 문서에 자세하고 쉽게 나와 있습니다. x86, ARM, ARM64, 윈도우, 맥, 리눅스 등등 모두 있습니다.

이 글은 NAS 구축을 위한 도커 설치이므로 리눅스 설치 방법을 적어볼게요.

공식 홈페이지 문서에선 도커 공식 저장소를 패키지 매니저에 등록하고 최신 도커를 설치하도록 유도합니다. 근데 좀 번거로울 수 있으니 사실 리눅스에선 배포판별로 각 패키지 매니저(apt, pacman, yum, ...) 로도 설치할 수 있게 해놨습니다. apt를 사용하는 데비안 계열에선 도커 버전이 최신 버전과 두, 세 달 차이날 순 있지만 크게 상관은 없어요.

데비안, 우분투 리눅스를 사용한다고 가정하고 공식 저장소를 추가하지 않는 설치 방법은 아래와 같습니다.

sudo apt update
sudo apt install docker.io

그리고 만약 일반 사용자 계정으로 도커를 사용하신다면 sudo 명령어가 필요한데, 그 과정을 없애기 위해 아래 명령어를 입력합니다.

sudo usermod -aG docker $USER

$USER 대신 원하는 사용자 계정을 적어도 됩니다.

첫 실행

가장 간단한 도커 테스트 방법입니다.

docker run hello-world

그럼 아래와 같은 메세지가 나타납니다.

root@odroid:~# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
3b4173355427: Pull complete
Digest: sha256:92695bc579f31df7a63da6922075d0666e565ceccad16b59c3374d2cf4e8e50e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

출력 메세지에 어떤 과정을 통해 이런 메세지가 나왔는지 설명이 되어 있습니다.

영어니까 읽기 번거롭네요. 지금 레벨에선 굳이 알 필요 없는 말도 있는 것 같습니다.

제가 간단히 이 테스트 과정을 풀어보자면,

  1. run 옵션을 통해 hello-world란 이미지를 컨테이너로 실행 시도
  2. hello-world 이미지가 현재 로컬(시스템)에 없음, 도커 저장소에서 latest 태그를 이용해 가장 최신 hello-world 이미지 다운로드
  3. 다운받은 이미지를 자동으로 실행해 컨테이너 생성
  4. 컨테이너가 지정된 메세지 출력 후 종료됨

따라서 이 hello-world 이미지는 저 메세지를 출력하기 위한 이미지입니다. 그 이상, 그 이하의 어떤 행동도 하지 않고 바로 종료됩니다.

다시 말해서, 각 이미지는 특정 목적이 있다는 걸 알 수 있어요. 그 목적이 단순한 메세지 출력일 수도 있고, 복잡한 서비스 실행일 수도 있는 거죠.

도커로 우분투 실행해보기

조금 나아가서, 이젠 우분투 이미지를 실행해봅시다.

hello-world와 마찬가지로 바로 run 명령어를 입력해도 되지만, 이번엔 이미지를 따로 다운로드해서 실행해 볼게요.

새로 나온 우분투 19.04를 체험해볼까요?

docker pull ubuntu:19.04
root@odroid:~# docker pull ubuntu:19.04
19.04: Pulling from library/ubuntu
b6f4ef9b288b: Pull complete
305214ff3f3f: Pull complete
bafc8e4e87f1: Pull complete
61986756c9f4: Pull complete
Digest: sha256:4319d5df5619d6e2e4c94158eb9929bf2f59ce217aa8fed72fb6e1b57757c859
Status: Downloaded newer image for ubuntu:19.04

pull 명령어로 도커 저장소의 이미지를 다운받을 수 있습니다. 미리 여러 이미지를 다운받고 필요한 걸 그때 그때 실행할 수 있는 거죠.

그리고 이미지 이름 뒤에 :TAG를 붙이면, 특정 태그가 달린 이미지를 다운받을 수 있어요. 모든 이미지는 latest태그를 기본적으로 갖고 있지만 개발자가 여러 태그를 직접 만들 수 있습니다. 우분투의 경우 latest, 16.04, 18.04, 19.04, .. 등 여러 가지 버전이 태그로 구분되어 있습니다. 도커 저장소의 우분투 이미지 페이지를 보시면 어떤 태그가 있는지 보실 수 있어요.

그리고 실행해볼게요.

docker run ubuntu:19.04
root@odroid:~# docker run ubuntu:19.04
root@odroid:~#

근데 아무 반응도 없네요.

이 우분투 이미지는 아직 뭔가를 하지 않는 이미지이기 때문에 아무 일도 하지 않고 컨테이너가 바로 종료되어 버립니다.

일을 시키면 종료되지 않게 할 수 있어요. 예를 들면, 실행하면서 그 우분투 이미지에 접속하는 거죠.

docker run -it ubuntu:19.04 bash
root@odroid:~# docker run -it ubuntu:19.04 bash
root@23a3d11615b1:/#

프롬프트의 모양이 바뀌었죠? hostname이 odroid에서 08dd1b6cb411로 바뀐 걸 볼 수 있습니다. 우분투 19.04 안에 들어온 거예요.

명령어를 입력해보면 알 수 있습니다.

root@23a3d11615b1:/# cat /etc/issue
Ubuntu 19.04 \n \l

run 옵션에 -it 옵션을 줘서 interaction 모드로 실행되게 하고, 이미지 이름 뒤에 bash를 붙여서 컨테이너가 올라가면 바로 bash를 실행하게끔 한 겁니다. 우분투 이미지 안의 배쉬를 실행함으로써 접속하게 된 거예요.

또한 실행한 컨테이너가 배쉬를 유지하는 일을 하고 있으니 이 컨테이너는 바로 종료되지 않는 거죠. 대신 실행한 배쉬에서 로그아웃하면 컨테이너도 바로 종료됩니다.

실행 중인 컨테이너를 보자면,

docker ps
root@odroid:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
23a3d11615b1        ubuntu:19.04        "bash"              About a minute ago   Up About a minute                       peaceful_dubinsky

CONTAINER ID23a3d... 인 컨테이너가 하나 실행 중이네요. 만약 우분투 19.04 배쉬를 종료하면,

root@odroid:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

아무 것도 남지 않게 됩니다.

정리

간단한 도커 이미지, 컨테이너 사용법을 적어봤습니다. 지금은 좀 난해할 수 있지만 익숙해지면 이보다 쉬운 가상 머신이 없어요.

앞으로 한 편 정도 더 도커 기본 지식을 다룬 후 NAS 구축에 필요한 이미지로 컨테이너를 실행해보겠습니다.

반응형

'NAS & ODROID > Docker NAS' 카테고리의 다른 글

Docker NAS - LinuxServer.io 활용하기  (0) 2019.05.07
Docker NAS - Docker 설치와 기본 지식  (6) 2019.04.28