서버 운영 관리 [ Tip ]

웹 UI 기반 컨테이너 관리 툴 Portainer 설치 및 설정

 

본 매뉴얼은 도커를 기반으로한 환경에서 Portainer*를 설정하는 방법을 안내합니다.

iwinv에서 도커가 포함된 운영체제를 설치해 이용중인 사용자는 '3. Portainer 로그인' 부터 설정을 진행할 수 있습니다.

*Portainer는 데이터센터, 클라우드, 엣지 등 다양한 환경에서 쿠버네티스(Kubernetes), 도커(Docker), 스웜(Swarm), 노매드(Nomad)와 같이
쉽게 도커를 배포하고 구성할 때 사용하는 웹 UI 기반 관리 툴입니다.

 

1. Docker 설치

Portainer에 앞서 도커를 설치해야 합니다.

참고로 본 매뉴얼은 CentOS 7.x 버전을 기준으로 도커와 Portainer를 설치하는 과정을 설명합니다.
도커 설치를 위해 다음과 같이 공식 리포지토리에 등록해 최신버전의 'docker-ce'를 설치합니다. 

 

# yum install -y yum-utils device-mapper-persistent-data lvm2

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# yum install -y docker-ce

 

도커를 시작하고 부팅 시 자동으로 구동되도록 설정합니다. 

# service docker start

# systemctl enable docker

 

처음 설치한 도커는 별도의 포트 사용 설정이 없으면 'netstat' 명령으로 확인할 수 없습니다.
대신 'ps' 명령으로 구동 상태를 파악할 수 있습니다. 

 

설치된 도커 버전을 확인합니다.
본 매뉴얼은 2018년 11월 05일 기준 도커 CE 18.06.1 버전을 기준으로 합니다.

 

2. Portainer 설치

Portainer 설치에 앞서 사용할 볼륨을 생성합니다.

# docker volume create portainer_data

  

Portainer는 컨테이너 이미지 형태로 제공됩니다.

도커 환경은 컨테이너 생성시 필요한 이미지가 없을 때 자동으로 다운로드를 합니다.
따라서 다음과 같은 명령을 실행하여 임지ㅣ 다운로드와 컨테이너를 동시에 실행할 수 있습니다.

# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --restart=always portainer/portainer

 
'--restart=always' 옵션 : 도커를 재시작 했을 때 Portainer 컨테이너가 자동으로 구동
'p 9000:9000' 옵션 : 9000번 포트로 Portainer 관리페이지 접근  



3. Portainer 로그인

모든 설치를 마친 후 관리자는 웹브라우저 Portainer 서버(예: http://서버IP:9000)에 접근할 수 있습니다.
첫 로그인 시 관리자(Admin) 계정의 패스워드를 설정합니다.

8자 이상의 길이로 패스워드를 입력 후 [Create user] 버튼을 누릅니다.

 

 

다음으로 도커 환경과 연결 옵션을 선택합니다.

매뉴얼에서는 'Local'을 선택하는 것을 기준으로 설명합니다.
참고로 원격지 도커 연결도 가능합니다.

 

 

첫 연결시 엔드포인트 리스트가 출력됩니다.

앞서 선택한 영역에 대한 요약 정보를 확인할 수 있습니다.
다음 화면의 예는 'Local' 요약 정보입니다. 

Portainer가 사용하는 컨테이너, 이미지, 볼륨이 각각 1개씩 있음을 확인할 수 있습니다.

 

위 화면에서 로컬 요약 정보를 보여주는 상자를 클릭하면 다음과 같은 기본 대시보드가 뜹니다.
우측에는 엔드포인트 요약 정보가 나타나고, 좌측에는 도커 관리 기능이 메뉴 형태로 나열되어 있습니다.

 



 

4. 이미지 생성 

이미지를 다운받아 서비스를 구동하는 방법을 알아보겠습니다.

대시보드 화면 좌측 메뉴에서 'Image'를 선택합니다. 
아래 화면에서 ①번 입력 상자에 이름을 입력합니다.
이 때 별칭이 아니라 이미지의 공식 이름을 입력해야 합니다.

이미지는 우측 'Registry' 풀다운 메뉴에 등록된 것을 다운로드 할 수 있으며, 
이미지 리스트는 도커허브(http://hub.docker.com/explore/)에서 확인할 수 있습니다. 

참고로 'Registry'에서 사용자가 등록한 이미지를 선택할 수 있습니다.
사용자 이미지 등록 방법은 좌측의 'Refistries' 메뉴에서 확인 할 수 있습니다. 

본 매뉴얼에서는 도커허브에서 다운로드 받는 것을 예로 설명을 이어가겠습니다.



별도 버전 명시 없이 'http'로 입력하면 최신 버전이 설치되며, 다음과 같이 다운로드 된 것을 확인할 수 있습니다.
예제에서는 태그가 'httpd:latest'로 표시되었는데, 이는 별도 버전 명시를 하지 않아 최신 버전이 설치되었다는 것을 뜻합니다.

 

 

 

5. 볼륨 생성

다음으로 httpd에서 사용할 볼륨을 생성할 차례입니다.
볼륨을 생성하면 컨테이너를 실수로 삭제하거나 장애로 유실해도 데이터를 보존할 수 있습니다.

추가 디스크 형태로 생성하므로 볼륨을 다른 컨테이너에 연결하는것도 가능하며 

필요 시 여러 컨테이너가 특정 볼륨을 공유할 수도 있습니다.

좌측 'Volumes' 메뉴를 선택하면 다음과 같이 Portainer 설정 정보를 담고 있는 기본 'Portainer_date' 볼륨이 보입니다.
이 화면에서 [Add volumes] 버튼을 선택합니다.

 

 


아래 화면에서 ①번 입력 상자에 볼륨 이름을 입력합니다.
http에서 사용할 것이므로 볼륨 구분을 위해 'httpd_date'로 이름을 붙입니다.

일반적인 볼륨 생성이므로 다른 설정을 하지 않고 [Create the Volume] 버튼을 누릅니다.

 

 


볼륨이 생성되면 다음과 같이 'httpd_date'라는 이름으로 만들어진 것을 확인할 수 있습니다. 
 

 

 

 

6. 컨테이너 생성

다음으로 컨테이너 생성 과정을 알아보겠습니다.
대시보드의 좌측 메뉴에서 'Containers'를 선택합니다.

'Containers' 페이지는 Portainer의 컨테이너를 생성, 삭제 하는 등 운영 관리할 수 있는 기능을 제공합니다.

자동 생성된 이름 'Confident_mccarthy'을 확인 할 수 있습니다.

 

기존에 생성되어 있는 Portainer 컨테이너가 보입니다. 이름이 confident_mccarthy 로 되어 있는데 임의 이름으로 자동으로 생성된 것이며,

Portainer 의 컨테이너를 반복해서 생성하면 이름이 바뀌는것을 알 수 있습니다.

사용자가 인지 가능한 이름으로 변경하고 싶다면, confident_mccarthy 라는 이름을 누르고 Container status 의 이름 항목에서 'Edit container name' 이미지를 클릭 후 원하는 이름을 새로 넣어주면 됩니다.

이제 httpd 컨테이너를 생성하기 위해 'Add container' 버튼을 누릅니다.

 

 

  

 

컨테이너 생성을 위해 화면에서 [Add volumes] 버튼을 누릅니다. 컨테이너 생성을 위한 레이어 팝업창이 활성화되면 아래 해당하는 위치에 설정을 입력합니다.

① 이름(Name) : 컨테이너의 이름 입력

② 이미지(Image)
: 컨테이너에 설치할 다운로드 받은 이미지 이름을 입력합니다. 'httpd'를 입력하면 우측 'Registry' 풀다운 메뉴에서 선택 가능한 이미지가 검색됩니다.


③ 포트 맵핑(Port mapping)
: 컨테이너(container) 포트와 도커가 설치된 서버(Host)의 포트를 입력합니다. 두 포트가 맵핑되어야 외부 서비스가 가능합니다.


④ 볼륨 맵핑(volume mapping)
: 연결할 미리 생성한 볼륨을 지정합니다. 본 매뉴얼에서는 홈페이지 소스 기본 디렉토리(/usr/local/apache2/htdocs)로 연결을 설정하였습니다. 마운트할 디렉토리를 입력하고 생성한 볼륨을 선택합니다.


⑤ 재시작 정책(Restart policy)
: 컨테이너에 재시작 정책을 설정합니다. 본 매뉴얼에서는 'Alwayes'로 선택하였습니다.


- Never : 종료 시 컨테이너를 자동으로 다시 시작하지 않음.

- Always : 도커에서 서버가 구동될 때 컨테이너도 함께 시작.
- On failure : 컨테이너가 0이 아닌 종료 상태로 종료되는 경우 다시 시작.
- Unless stopped : 정상적인 컨테이너 중지를 제외하고 도커 실행 시 컨테이너 다시 시작.

*참고로 예제에서 따로 설명하지 않지만 'Runtime&Resource' 탭에서 컨테이너에 할당할 메모리와 CPU 사양을 제한을 지정할 수 있습니다.
이외에도 ‘User’ 메뉴를 통해 사용자와 그룹을 생성할 수 있고, 이 설정 화면에서 [Restricted] 버튼을 통해 사용자와 그룹의 접근 권한을 컨테이너 단위로 설정할 수도 있습니다.

모든 설정을 마쳤다면 ⑥ [Deploy the container] 버튼을 눌러 컨테이너를 생성합니다.

 

 

 

성공적으로 컨테이너가 생성되면 다음과 같이 구성 상태를 확인할 수 있습니다.
'Quick actions' 부분에 표시된 아이콘의 의미는 다음과 같습니다.

그래프 : 메모리, CPU, 네트워크 I/O지원 사용량을 뜻하며, 최소 5초 단위로 갱신됨

문서 : 컨테이너 로그

화살표/프롬프트 : 쉘 프롬프트 연결

느낌표 : 컨테이너 상세 정보

 

 

위 화면에서 그래프 모양의 아이콘을 클릭하면 컨테이너의 자원 사용량을 다음과 같이 대시보드 형태로
모니터링할 수 있습니다. 상태 정보는 최소 5초 단위로 갱신됩니다.

 

 



문서 아이콘을 누르면 다음과 같이 컨테이 구동 로그를 확인할 수 있습니다. 

 

7. 외부 접근 테스트

생성한 httpd 컨테이너 서비스가 외부에서도 접속이 잘 되는지 확인하려면 [Connect] 버튼을 눌러 접속 테스트해 봅니다.

 

 

접속 후 다음과 같은 명령으로 httpd의 기본 디렉토리인 '/usr/local/apache2/htdocs'에 'test.html' 파일이 생성되고,
다음과 같이 웹 브라우저를 통해 html 파일이 열리는 것을 확인할 수 있습니다.