구글 클라우드 Google Cloud Platform(GCP) 프리티어 3부 - Docker(도커)와 포테이너(Portainer) 설치하기

구글 클라우드 Google Cloud Platform(GCP) 프리티어 3부 - Docker(도커)와 포테이너(Portainer) 설치하기

목차

도커는 리눅스의 X 컨테이너를 이용해 리눅스 안에 또 다른 격리된 환경을 만드는 기술입니다.

간단하게 이야기하자면 도커 컨테이너라는 단위로 한 리눅스 서버안에서 여러가지 리눅스 환경을 돌려볼 수 있는 일종의 가상화 플랫폼으로 유명합니다.

한번 설정 해놓은 세팅은 어느 환경이든 변하지 않는다. 라는 슬로건 안에서 도커의 컨테이너들은 어떤 버전의 리눅스를 쓰던 해당 컨테이너 이미지가 지원하는 아키텍처(CPU) 라면 큰 어려움 없이 전문가 수준의 세팅이된 환경을 구성할 수 있습니다.

 

먼저 워낙 알려진 정보가 많기도 하니 딱딱하게 도커란 무엇인가? 에 대해 자세히 다루진 않겠습니다.

워낙 다른 블로그들에 정리도 많고 GCP를 구성할 정도라면 이미 아는 분들이 대부분일거라 생각합니다.

도커의 사용성을 알아보기 이전에 먼저 도커는 어떻게 설치하느냐?를 살펴보겠습니다.

 

도커의 공식 사이트인 DockerHub라는 곳에서는 다양한 컨테이너 이미지 파일이 올라와있습니다.

누구나 컨테이너 이미지를 만들고 업로드가 가능하기 때문에, 다양한 자료들이 올라오곤 합니다.

리눅스 서버에 대해 하나도 모른다고 가정해도 이미 숙련자들이 세팅해 놓은 컨테이너 이미지를 사용한다는 것은, CD의 원리에 대해 잘은 몰라도 마치 CD를 넣고 음악을 재생하는 것처럼 사용이 가능한 셈입니다.

따라서 컨테이너를 직접 만드는 것이 아니라 사용하는 방법에 대해서만 알아도 어플에 대한 관점이 바뀌게 되실겁니다.

 

1. GCP VM인스턴스에 연결 - SSH(Secure Shell) 접속 후 도커 설치하기

먼저 구글 클라우드 플랫폼의 콘솔메뉴에서 Compute Engine 으로 접속해서 SSH 환경으로 접속하도록 하겠습니다.

 

SSH 를 통해 서버로 접속했다면 하나씩 차근히 설치해보도록 하겠습니다.

sudo apt update

먼저 우분투 환경이라면 apt 저장소가 있으니 최신 목록으로 업데이트 부터 진행을 하도록 하겠습니다.

 

sudo apt upgrade -y

최신버전으로 업그레이드 가능한 패키지가 16개나 있군요.

일단 몽땅 업그레이드 하도록 하겠습니다.

 

도커 커뮤니티 버전(docker-ce)을 설치하려고 하지만 기본 리포지토리에 추가되어 있지 않아 보입니다.

따라서 수동으로 직접 추가하도록 하겠습니다.

 

 

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

도커 설치에 필요한 위 패키지들을 먼저 인스톨해줍니다.

 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

다음은 도커의 gpg 인증이라는 과정을 진행하도록 하겠습니다.

위 명령어를 실행했을때 OK라고 나오면 완료입니다.

 

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

다음은 도커 리포지토리를 실제로 추가하도록 하겠습니다.

위명령어의 \ 는 줄바꿈의 의미이니 그대로 붙여 넣고 엔터를 쳐주시면 됩니다.

 

sudo apt-get update && sudo apt-cache search docker-ce

실제로 패키지 저장소에 도커 커뮤니티 버전이 추가되었는지 확인해봅니다.
문제없이 docker-ce가 보인다면 정상적으로 추가된 것입니다.

 

sudo apt-get update && sudo apt-get install docker-ce -y

다음은 도커 커뮤니티 에디션(docker-ce)을 설치하도록 하겠습니다.

apt-get update 명령어로 한번더 새로추가된 도커 리포지토리 목록들을 받아오고 도커 커뮤니티 에디션을 설치합니다.

보통 기업용인 docker 또는 ee 가 아닌 커뮤니티 에디션을 설치해야하니 반드시 설치는 docker-ce로 진행합니다.

위 명령어를 입력하면 자동으로 설치가 진행됩니다.

 

설치가 완료되어도 바로 사용하실 수는 없습니다.

도커의 컨테이너 목록을 조회하는 docker ps -a 명령어 사용시 권한이 없다는 메세지가 나타납니다.

이는 현재 로그인한 유저가 도커 그룹에 포함되어 있지 않기 때문에 발생합니다.

따라서 사용중인 구글 유저를 도커 그룹에 포함시키도록 하겠습니다.

 

sudo usermod -aG docker $USER

간단하게 위 명령어로 현재 로그인한 유저를 도커 그룹에 추가해 주실 수 있습니다.

 

유저 그룹이 변경되었으니 다음번 SSH로 접속 시부터 동작하게 됩니다.

일단 현재 SSH 창을 닫아서 종료해줍니다.

 

다시 한번 SSH로 연결하고 나면 docker ps -a 명령어를 실행해봅니다.

이제 docker가 정상적으로 실행되고 조회도 됩니다.

 

 

docker ps -a

그러나 만에 하나 권한을 부여하고도 docker ps -a 명령을 실행했을때 컨테이너 목록이 나오질 않는다거나

지속적으로 권한 오류가 발생하는 경우 무식하게 도커 소켓에 직접 사용권한을 부여하는 방법도 있습니다.

 

sudo chmod 666 /var/run/docker.sock

666권한으로 도커의 소켓파일에 권한을 직접 부여했습니다.

위 방법은 가능하면 사용하지 마시고 문제가 있을 경우에만 제한적으로 사용하시기 바랍니다.

그룹설정까지 끝났다면 마지막으로 GCP에 만든 리눅스 VM위에서 도커가 항상 기동하도록 시작 서비스를 등록하도록 하겠습니다.

 

 

sudo systemctl start docker
sudo systemctl enable docker

위 명령어를 순서대로 실행하면 자동 실행 서비스로 등록하고 매번 부팅시마다

별다른 조치없이도 도커가 자동으로 실행되게 됩니다.

 

service docker status

서비스가 정상적으로 등록되었는지 위 명령어로 체크가 가능합니다.,

active 라고 표시되면 서비스가 정상적으로 실행되고 있는 상태입니다.

 

 

2. Docker Web 관리용 툴 Portainer 설치

포테이너란?

도커의 복잡한 CLI(하얀것은 글씨요 까만것은 배경인 바로 그녀석입니다.) 환경을 벗어나는 가장 쉬운 무료 솔루션이라 할 수 있습니다.

도커의 명령어를 아까 권한을 부여했던 도커 소켓이라는 녀석을 통해 명령어를 웹상에서 주고 받을 수 있습니다.

SSH 접속후 CLI를 통해 작업하는 것을 선호하는 분들도 있겠으나 극히 소수일거라 생각되며

GUI에서 도커의 개념에 대해 익숙해지면, 결국 CLI도 자연스럽게 다룰 수 있게 되기 때문에 추천드립니다.

Introduction | 2.19 | Portainer Documentation

기본적인 포테이너의 설치방법은 위 사이트에 설명되어 있지만 일반적인 초보자가 접근하기 쉽지 않습니다.

포인트 별로 한번 차근차근 진행해보도록 하겠습니다.

 

 

docker volume create portainer_data

docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:latest

먼저 도커가 설치된 리눅스 환경에서의 설치를 진행할테니 Docker Linux 서버 배포부터 살펴보겠습니다.

위 장황한 명령어를 통해 설치가 가능하다고 하는군요.

볼륨경로를 직접 설정해서 사용도 가능하지만 기본 예제를 그대로 복사해서 그대로 SSH에 입력하도록 하겠습니다.

 

포테이너 컨테이너 이미지의 다운로드가 순식간에 진행됩니다.

초반에 말씀드렸던 것처럼 포테이너라는 컨테이너의 이미지를 다운로드 받아, 각 8000번과 9000번 포트를 사용하고 내부 저장소는 portainer_data라는 볼륨을 사용한다는 내용입니다.

💡
현재는 포스팅 당시 사진과는 달리 포테이너가 업데이트 되어 기본 포트가 9443으로 변경되었습니다. 설명은 동일하나 실제 포트는 9443에 https 로 접근하셔야합니다.

지금은 완벽하게 이해하지 않으셔도 됩니다.

 

 

성공적으로 설치가 진행되었습니다.

 

 

# 도커 데몬 설정
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF


# 도커 재시작 & 부팅시 실행 설정 (systemd)
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

추가로 json 형태의 로그가 무한정 쌓이는 것을 방지해야 장기간 사용시 용량문제를 피할 수 있습니다.

위처럼 도커의 json-file 로그 설정을 최대 100m로 제한하는 설정까지 해준다면, 용량관리가 더욱 쉽습니다.

위처럼 도커 설정파일에 넣어두거나, 아래의 포테이너에서 매번 컨테이너에 직접 설정도 가능합니다.

 

 

포테이너의 Command&Logging 옵션에서 직접 용량제한을 부여하실 수도 있습니다.

이렇게 포테이너를 설치하고 나면 9443번 포트를 통해 접속이 가능하고 https로 접근하셔야합니다.

그러나 문제는 GCP에서는 보안을 위해 방화벽이 설정되어 있어 접속이 되지 않습니다.

따라서 바로 위 설정된 포트를 통해 외부에서 바로 접속을 하실 수 없습니다.

방화벽 포트를 열어주기 위해 다시 GCP 콘솔로 이동하겠습니다.

 

3. GCP 방화벽 오픈 설정

GCP 콘솔에서 좌측 메뉴를 통해 VPC 네트워크 -> 방화벽 메뉴로 이동합니다.

 

새로운 포트를 개방하기 위해 방화벽 규칙 만들기를 클릭해줍니다.

 

먼저 방화벽의 규칙이름부터 추가하겠습니다.

이름은 portainer 라고 짓겠습니다.

 

 

다음은 대상을 설정합니다. 어짜피 무료 인스턴스가 하나 뿐이기 때문에 (1)모든 접속에 대해 허용하도록 하겠습니다.

소스필터는 기본값인 (2)IP 범위를 사용합니다.

소스 아이피 범위는 (3) 0.0.0.0/0 사실상 모든 아이피를 허용하겠습니다.

여기서 분기가 갈릴수 있는것이 포테이너는 도커 관리용 웹이기 때문에 보안을 위해 자택 또는 회사 IP를 직접 입력하셔서 접속을 제한하는 것도 방법입니다.

오픈할 포트는 일반적인 웹 접속방식인 tcp (4) 9443번 포트를 오픈하도록 하겠습니다.

(사진에는 구버전인 9000번으로 표기되어 있지만 현재는 변경되어 9443 포트를 열어주셔야합니다.)

(5) 만들기를 눌러 방화벽 규칙을 추가합니다.

 

위처럼 포테이너 방화벽 규칙이 추가되었습니다.

그럼 직접 접속을 하기 위해 외부 아이피를 찾으러 떠나보겠습니다.

 

다시 클라우드 콘솔의 Compute Engine으로 돌아오셔서 본인의 VM 우측의 외부 IP를 확인해봅니다.

제 경우 실서비스 용이 아니다 보니 위 사진처럼 공개했지만 공개적인 장소에 본인의 서버 IP를 노출하는 것은 곤란합니다.

사용하는 VM이 따로 고정 아이피가 아니기 때문에 재기동시 매번 외부 IP는 변경될 것 이지만 이는 반대로 재기동을 하지 않는다면 왠만해선 바뀌지 않습니다.

브라우저를 통해 104.199.125.99:9443 번으로 접속해보겠습니다.

 

위 포테이너 기본 설정창이 나온다면 성공입니다.

관리자 아이디와 비밀번호를 설정하고 Create User 를 눌러줍니다.

 

다음은 포테이너가 통신할 서버에 대한 환경설정입니다.

도커 스웜의 에이전트부터 쿠버네티스까지 지원하지만

내부 도커와의 통신을 할 것이니 Docker를 선택하고 Connect를 눌러줍니다.

 

드디어 포테이너 메인화면에 진입했습니다.

여기서 부턴 도커 허브에 다양한 이미지와 예제를 통해 컨테이너들을 돌려볼 수 있겠습니다.

 

테스트로 대시보드에 들어와 보시면 컨테이너가 홀로 덩그러니 하나가 실행중입니다.

 

지금 접속하신 포테이너의 컨테이너 라는것을 확인가능합니다.

포테이너는 하얀 바탕에 백지같은 서비스입니다.

이제부터 이 위에 다양한 도커 컨테이너들을 올려가면서 개인서비스를 구축하고

각각 방화벽 포트를 열어주면서 접속이 가능하게 진행하시면 되겠습니다.

 

포테이너 내에서 포트를 눌렀을때 본인의 서버의 IP를 입력하지 않으면 포테이너 안에서 링크가 정상적으로 동작하지 않습니다.

위의 Endpoint -> local의 외부주소를 입력해주면 해결이 가능하지만 고정 아이피가 아닌 이상 큰 의미는 없겠습니다.

다만 사용하는 도중에는 편리하게 사용가능하니 변경되기 전까지 한번 입력하고 사용해보시기 바랍니다.

 

도움이 되시길 바랍니다.

감사합니다.

비정기로 발행되는 추천 포스트를 이메일로 받아 보실 수 있습니다.

특별한 추천 포스트를 바로 이메일로 받아보세요. 물론 무료입니다!
좋아요! 받은 편지함을 확인하고 구독을 확인하려면 링크를 클릭하십시오.
오류! 유효한 이메일 주소를 입력하십시오!