Portainer ( GUI docker 관리툴 )

Docker 사이트 공식 추천 방법 설치

Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install.

Portainer 사이트 공식 추천 방법 설치

Install Portainer CE with Docker on Linux - Portainer Documentation


Docker 설치 절차

Docker 설치 준비

원격으로 접속해서 작업하는게 더 편리합니다. ( 명령어 복사 가능 )

sudo 옵션을 이용해 관리자 권한으로 명령어를 실행합니다.

운영 체제에서 사용 가능한 패키지 들과 그 버전에 대한 정보를 업데이트 합니다.

sudo apt update
sudo apt upgrade
sudo apt autoremove

'도커' 필수 패키지를 설치 합니다.

apt-get install ca-certificates curl gnupg lsb-release

'도커' 패키지의 인증을 위한 GPG Key 를 추가 합니다.

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

#위의 방법으로 진행
#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Docker repository 추가

사용 중인 아키텍처에 맞추어 Docker repository (저장소) 를 추가 합니다. 아키텍쳐 정보를 모르는 경우 arch 명령으로 확인 할 수 있습니다.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker 설치

'도커' 설치 하고 시작 등록 한다음 실행 하는 부분까지 진행 합니다.

이제 '도커' 설치 명령으로 설치를 진행 합니다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

설치가 완료되면 docker 버전을 확인해보고 예제를 실행합니다.

docker -v
sudo docker run hello-world

!! 특정버전 설치, 패키지 설치는 공식 홈페이지를 참조하세요.

Docker 시작 등록 및 실행 ( 필요한 경우만 )

도커가 OS 재부팅 후에 자동적으로 시작 enable 되도 록 등록을 해야 합니다. 그리고 실행 까지 해보겠습니다.

sudo systemctl enable docker && service docker start
#우분투에서는 안되는거 같음 확인 해봐야됨
#우분투에서 안해도 이상은 없음

현재 도커가 정상적으로 동작 하는 지 확인 할 수 있습니다.해당 화면을 종료 하기 위해서는 Q 를 입력 하면 됩니다.

service docker status


Portainer 설치 절차

portainer 설치를 하고 웹 으로 접속 하는 부분 까지 정리 합니다.

Portainer 설치

포테이너는 '도커' 서비스 입니다. '도커' 관련 된 서비스라는 것도 맞는데, 이 ‘포테이너’ 라는 서비스 자체도 '도커' 컨테이너로 실행 되고 있습니다.

그래서 명령어가 굉장히 간단 합니다.

# 공홈 권장 설치
docker volume create portainer_data
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

# 특정 위치 저장소로 지정
mkdir -p /data/portainer
docker run --name portainer -p 9000:9000 -d --restart always -v /data/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

# –-name: 컨테이너 생성
# -p: 호스트 포트, 내부 포트 지정
# -d: 데몬으로 백그라운드 실행
# --restart always: 재 부팅 시 서비스 자동 시작
# -v /data: 호스트 와 '도커' 컨테이너간 볼륨 매칭
# docker.sock: 컨테이너 내부에서 데몬과 상호 작용(공유)

Portainer 접속

이제 브라우저에 IP 를 입력 해 현재 포테이너가 설치 된 장치로 접속 할 수 있습니다. 만약 현재 사용 중인 아이피를 모르는 경우 ifconfig 를 사용 합니다.

브라우저 주소창에 ip:9000 이라고 입력 하면 '포테이너' 로 접속 됩니다.

초기 아이디비밀번호를 생성 합니다.

'도커' 관리 환경 설정 화면 입니다. 포테이너가 설치된 서버에서 도커를 같이 실행시킬 것이므로 Local 탭을 선택 한 다음 Connect 버튼을 눌러 줍니다.

여러서버의 Portainer 관리

A 서버 : local + B + C
B 서버 : local + A + C
C 서버 : local + A + B

이렇게 관리가 가능할거라고 생각 했었는데 하나에 종속되면 다른 쪽에는 연결이 안됩니다.

A 서버 : local + B + C
B 서버 : local + A << C 서버가 이미 등록이 되어있어서 등록 안됨
C 서버 : local << A,B 서버가 이미 등록이 되어있어서 등록 안됨

이와같이 하나의 마스터에 종속되며 나머지들은 슬레이브로 인식됩니다.

참고자료

서버포럼 - 여러 서버의 Portainer 동시에 관리하기
오라클 프리티어를 사용한다던지.. 여러가지 이유로 Portainer를 여러 곳에서 운영하는 경우에 Portainer-Agent 혹은 Edge Agent를 사용해서 동시에 관리가 가능합니다. 저같은 경우도 오라클 프리티어, 시놀로지 NAS...


문제해결

apparmor_parser 관련문제

... Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running apparmor_parser apparmor_parser --version failed with output ...

설치시 위와 같은 문제가 발생한다면 아래의 유틸리를 추가로 설치해준다.

sudo apt update
sudo apt upgrade
sudo apu autoremove
sudo apt install apparmor apparmor-utils

read only 관련문제

포테이너 설치 후 read only 문제가 생길 수 있다. 해결 하려면 docker 를 재설치 해야 한다. 기존 설치된 docker 와 docker-compose를 제적하고 공식 홈페이지의 추천 방법에 따라 재설치 해준다.

docker: Error response from daemon: error while creating mount source path ‘/data’: mkdir /data: read-only file system.
# 에러 내용 - Harbor 설치 중 아래와 같이 에러가 발생 하였다. docker: Error response from daemon: error while creating mount source path ‘/data’: mkdir /data: read-only file system. # 해결방법 https://stackoverflow.com/questions/52526219/docker-mkdir-read-only-file-system Docker - mkdir read-only file system After freshly i…
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install.

그문제가 아니라면 아래 방법을 적용해본다

#도커 저장 위치 확인
sudo docker info | grep Root

#마운트 된 드라이버 정보 확인
findmnt

#도커 저장 위치를 변경하고 싶은 경우
vi /lib/systemd/system/docker.service
--data-root가 없다면 기본 경로인 /var/lib/docker 에 저장된다.
나는 --data-root=/home/docker/ 로 추가해줬다.
systemctl daemon-reload
systemctl stop docker
systemctl start docker
sudo docker info | grep Root

console 메뉴 접속 안되는 문제

NPM에서 리버스 프록시 설정 후 도메인으로 포테니언 접속시 console connect 접속이 안되는 문제가 있다. 이때 내부 IP주소로 접속하면 console에 접속 할 수있다. 하지만 NPM을 통해서 들어오는 외부 도메인에서는 접속이 되지 않는다. 이 부작용을 이용해서 외부 접속시 콘솔 연결을 막을 수 있다.

해결 방법은 NPM 설정에서 Websockets Support 기능을 활성화 하면 된다.

Local data를 불러오는데 실패했을 경우

로컬데이터를 불러오는데 실패했다고 하면서 Environments 에서 Local 선택이 안되는 경우가 있다. 이런 경우에는 Host PC( 포테이너가 설치되어 있는 )에 콘솔로 접속 후 portainer 컨테이너를 재시작 해주면 해결된다.

//docker restart 컨테이너 이름
docker restart mystifying_mayer


참고내용

Docker-compose 로 설치하는 방법

포테이너 실행시 yml 파일을 미리 생성 후 해당 파일로 실행 시키는 방법 입니다. root 계정이나 docker 그룹내 계정을 선택 합니다.

mkdir portainer
cd portainer
touch docker-compose.yml
nano docker-compose.yml

compose.yml 파일을 아래와 같이 만들어줍니다.

version: "2.2"
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    volumes:
      #포테이너 용으로 생성한 폴더 경로 입니다.
      - /portainer:/data
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8000:8000
      - 9000:9000
    restart: unless-stopped

Cntrl X, 그리고 Cntrl Y 해서 저장 해주고 나옵니다.

docker-compose up -d

이후 재설치를 하더라도 data 폴더 위치만 정확히 지정해주면 아이디 비번등 포테이너 상태를 그대로 복원해서 사용 할 수 있습니다. 이를 이용해서 편리하게 백업도 할 수 있습니다.

Portainer 백업 방법

Portainer는 자체 컨테이너로 실행되며, Portainer 인스턴스를 볼륨과 함께 백업하는 방법은 다음과 같습니다.

  1. Portainer가 실행 중인 호스트에서 터미널을 엽니다.
  2. Portainer 컨테이너의 ID 또는 이름을 확인합니다. 예를 들어, docker ps | grep portainer 명령을 사용할 수 있습니다.
  3. Portainer 컨테이너를 중지합니다. 예를 들어, docker stop portainer 명령을 사용할 수 있습니다.
  4. Portainer 컨테이너의 데이터가 저장된 볼륨의 이름을 확인합니다. 예를 들어, docker inspect portainer | grep -i volume 명령을 사용할 수 있습니다.
  5. Portainer 컨테이너와 볼륨을 백업하기 위해 docker save 명령과 docker volume export 명령을 사용합니다. 예를 들어, 다음과 같은 명령을 사용할 수 있습니다.

Portainer는 Docker 컨테이너를 관리하기 위한 오픈 소스 툴입니다. Portainer 인스턴스를 볼륨과 함께 백업하는 방법은 다음과 같습니다.

  1. Portainer 인스턴스가 실행 중인 호스트에서 터미널을 엽니다.
  2. Portainer 데이터가 저장된 볼륨의 이름을 확인합니다. 예를 들어, docker volume ls 명령어를 사용하여 portainer_data라는 볼륨이 있는지 확인할 수 있습니다.
  3. Portainer 데이터 볼륨을 백업할 디렉토리를 생성합니다. 예를 들어, mkdir portainer_backup 명령어를 사용하여 현재 디렉토리에 portainer_backup라는 디렉토리를 생성할 수 있습니다.
  4. Portainer 데이터 볼륨을 백업할 디렉토리에 복사합니다. 예를 들어, docker run --rm -v portainer_data:/data -v $(pwd)/portainer_backup:/backup ubuntu tar cvf /backup/portainer_data.tar /data 명령어를 사용하여 portainer_data 볼륨의 내용을 portainer_backup 디렉토리에 portainer_data.tar라는 파일로 압축하여 복사할 수 있습니다.
  5. Portainer 인스턴스를 중지합니다. 예를 들어, docker stop portainer 명령어를 사용하여 portainer라는 이름의 컨테이너를 중지할 수 있습니다.
  6. Portainer 인스턴스를 백업할 디렉토리에 복사합니다. 예를 들어, docker cp portainer:/. $(pwd)/portainer_backup/portainer 명령어를 사용하여 portainer 컨테이너의 전체 내용을 portainer_backup 디렉토리에 portainer라는 서브디렉토리로 복사할 수 있습니다.

이제 Portainer 인스턴스와 데이터 볼륨이 모두 백업되었습니다. 필요한 경우 이 백업을 다른 호스트로 이동하거나 저장소 서비스에 업로드할 수 있습니다.

ARM SBC에 설치 방법

어떻게든 Docker만 올라가면 실행이 가능하다. 특정 아키텍처에서 도커가 실행되지 않을 경우 해당하는 프로세서와 OS에 맞는 도커를 찾아서 설치하면 된다.

Docker on the Orange Pi
Docker is now available for the Orange Pi using the latest mainline Linux Kernel. Take advantage of this cheap RPi alternative with a fast 1GB / H3 chipset.
Docker on ODROID XU4: Installation and Creating a Base Image
EDIT March 2021: Now that I’ve updated my website stack (using an ODROID HC1, same board as XU4, but with built-in SATA). I have GoatCounter set up for web analytics, and I can see I’m still getting some traffic to this article from google. If you found this and you

Portainer Agent 설치 및 연결

오늘은 이 이미지를 통해 로컬상의 도커와 agent를 통해 다른 노드의 도커도 연결해보겠습니다.

전체 구성도를 대략적으로 그려보면 이런느낌이 됩니다.

우선 노드1에서 포테이너와 포테이너 에이전트를 도커로 설치합니다.

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

docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent

포테이너 접근 포트는 9000번입니다.

이런식으로 해주고 처음에 username 입력하고 pw 입력하는 부분이 나옵니다. 대충 적어주고 진행합시다. 그리고 무얼 매니지 할거냐 물어볼텐데 처음에 가장 왼쪽에 local을 클릭합시다.

그러면 이제 메인화면이 다음처럼 나타납니다.

이 화면은 제가 다른 노드를 추가해 놓은상태라 여러개지만 여러분들은 local 하나만 존재하실겁니다. 이것저것 클릭해서 만져보면 여러가지를 컨트롤하고 모니터링할 수 있습니다.

자 그럼 이제 다른노드를 추가해봅시다.

관리하고 싶은 노드에 portainer agent를 설치해줍니다.

docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent

그리고 이제 portainer로 접속하여 엔드포인트 추가를 눌러줍니다.

이 엔드포인트 URL에 노드IP:9001 을 입력해주면 연결이됩니다.

이렇게 오늘은 도커 컨테이너 관리 도구인 포테이너를 컨테이너로 구축해보고 다른 노드도 연결해봤습니다.

Install Portainer Agent with Docker on Linux - Portainer Documentation


업데이트

sudo docker stop portainer && sudo docker rm portainer   ## 기존 사용중인 구버전 중지, 제거

docker pull portainer/portainer-ce:latest   ## 신버전 이미지 다운로드

docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest   ## 신버전 설치