Linux환경에서 Docker(도커) 설치 및 컨테이너 실행하기


안녕하세요. 남산돈가스 입니다.

오늘은 요새 들어서 한참 뜨고 있는 도커라는 기술에 대하여 설치 및 사용법을 알아보려고 합니다.

일단, 도커라는 것은 컨테이너 기반의 오픈소스 가상화 플랫폼이라고 말할 수 있는데요.

이번 포스팅은 설치 및 사용법에 대한 게시글이기 때문에 도커에 대한 기본 설명은 '도커란 무엇인가?' 라는 아주 쉽게 이해할 수 있도록 정리되어있는 글이 있어 링크를 걸었습니다. 
위 링크에서 도커에 대한 기본 개념을 이해하시면 될 것 같습니다.

이어서 제가 보여 드릴 예제는 Ubuntu 기반 Linux환경에서 Docker Engine을 설치한 뒤, 검색엔진 오픈소스인 Elastic Search를 설치하여 구동하는 내용을 다루어보려고 합니다.

먼저, Linux 환경에 접속합니다. 최초 Linux 서버에는 Docker 명령어를 지원하지 않기 때문에 도커를 설치해줘야합니다.

리눅스에 도커를 설치하는 방법은 curl 명령어를 이용하여 설치 스크립트를 다운받아 실행하는 것이 제일 쉽게 제공되고 있기 때문에, 아래 명령어를 입력하여 설치를 진행합니다.


  • $ curl -fsSL https://get.docker.com/ | sudo sh


명령어를 실행하면, 다음과 같이 docker 가 설치 되는 과정이 출력됩니다.

docker 설치가 완료 되었다면, 정상적으로 설치가 되었는 지 확인하기 위해서 version 명령을 실행해봅니다.

* docker는 root 권한으로 설치하였기 때문에 docker 명령어를 이용하기 위해선 root 계정으로 변경하거나 sudo 를 이용하여 root 권한으로 docker 명령어를 실행할 수 있습니다.

  • $ sudo su - && docker version

버전정보를 보시면 클라이언트와 서버로 나뉘어져 있는 것을 확인할 수 있습니다. 왜냐하면, 도커는 하나의 실행파일이지만 실제로 클라이언트와 서버역할을 각각 할 수 있기 때문에, 도커 커맨드를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 받아 터미널에 출력해주는 원리이기 때문입니다.



위 터미널 처럼 버전정보를 확인 하셨다면 이제 정상적으로 docker를 이용하여 컨테이너를 실행할 준비가 되었습니다.

도커에서 컨테이너를 실행하기 위해서는 내가 필요로 하는 서비스 또는 환경에 대한 이미지가 필요합니다. 이런 이미지들은 도커허브 라는 곳 제공하고 있습니다. 이곳에는 엄청나게 많은 도커 이미지들이 Push / Pull 되어지고 있기 때문에, 개발자들이 필요로 하는 거의 모든 서비스들을 제공받을 수 있습니다. 


위와 같이, 도커 허브에서 이미지를 검색하는 방법 말고도, docker 명령어를 이용하여 특정 이미지를 검색할 수 있습니다. 이번 포스팅에서 다루어 볼 엘라스틱서치를 검색해보면,

  • $ docker search elasticsearch




이렇게 다양한 Elastic Search에 대한 이미지들이 제공되고 있습니다. 

그렇다면, 위에서 검색한 이 이미지들을 실제 리눅스 환경에서 컨테이너 위에 올려서 실행해보겠습니다.

docker 명령어 중 pull을 사용하면 docker hub에 있는 이미지를 내려받을 수 있습니다. 여기서 pull의 개념은 우리가 흔히 알고 있는 git의 pull의 개념과 같습니다. 

저는 위 search 결과 중 대표 이미지인 elasticsearch 를 pull하겠습니다.
  • $ docker pull elasticsearch:1.7
pull 명령은 $docker pull [이미지명]:[tag(버전)] 으로 실행하며 tag 가 없는 경우 기본적으로 최신버전으로 pull 됩니다. 저는 elasticsearch 1.7 버전을 pull 받았습니다. 



 elasticsearch 이미지를 pull 받고 난 뒤 images 명령을 사용하면 현재 pull 받은 이미지들의 목록을 확인할 수 있습니다.

  • $ docker images



elasticsearch 이미지를 pull 받았으니, 이제 이 이미지를 컨테이너 위에서 실행시켜야 합니다.

이미지를 실행하려면 run 명령어를 사용하는데, 옵션들이 다양하기 때문에 자주 사용하는 옵션을 간단히 설명하고 진행하겠습니다.

도커를 실행하는 명령어는 다음과 같습니다.

  • $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 

옵션설명
-ddetached mode 흔히 말하는 백그라운드 모드
-p호스트와 컨테이너의 포트를 연결 (포워딩)
-v호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e컨테이너 내에서 사용할 환경변수 설정
–name컨테이너 이름 설정
–rm프로세스 종료시 컨테이너 자동 제거
-it-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link컨테이너 연결 [컨테이너명:별칭]

위 옵션을 참고하여,

  • $ docker run -p 9200:9200 -p 9300:9300 --name es elasticsearch:1.7

이라는 명령어를 실행하면, 아래와 같이 elasticsearch 이미지가 도커 위에 실행 된 것입니다.


위 명령어를 간단하게 설명하자면, 먼저 -p 9200:9200 옵션으로 호스트(Linux 환경)의 포트 9200을 도커 환경의 포트 9200으로 포트포워딩 한다는 것을 의미합니다. 
 그리고 똑같이 -p 9300:9300 으로 9200 / 9300 포트를 설정한 것은 elasticsearch의 특징으로서 9200(클라이언트) 9300(내부) 포트를 설정한 내용입니다. 
 다음으로, --name을 이용하여 해당 도커 프로세스의 이름을 es라고 설정한 것이고
 마지막으론 elasticsearch:17 은 실행시킬 이미지의 이름:버전 에 해당합니다.

추가적으로, 위 터미널 환경에서는 elasticsearch가 포그라운드에서 실행되기 때문에 다른 조작을 할 수 없는 상태인데, 가볍게 run 명령 뒤에 -d 옵션을 붙여주시면 백그라운드에서 해당 프로세스를 실행시킬 수 있습니다.

현재 Elastic Search 서비스가 정상적으로 올라와 있는 지 확인하려면 

  • $ docker ps
명령어를 사용하면 아래와 같이 현재 실행 중인 도커 프로세스를 확인할 수 있습니다.






Elastic Search 서비스가 도커 컨테이너 환경에서 실행 된 것을 확인하였고, 이제 실제 서비스가 실행 중인지 확인하기 위하여, 브라우저에서 해당 Linux환경의 IP 에 9200 포트를 붙여 실행해보면 아래와 같이 상태코드 200과 함께 검색엔진 서비스인 Elastic Search가 실행 된 것을 확인하실 수 있습니다.

여기까지 Linux환경에서 간단히 Docker를 설치하고 컨테이너 위에 Elastic Search 서비스를 구동시켜 보았습니다. 

감사합니다.

댓글

주간 인기글

남산 케이블카 이야기

Kotlin, Java 그 다음?

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

[앱 디자인] 디자인 가이드 만들기 - 아이폰