도커 Portainer + 도커 살짝 개론

안상훈·2024년 12월 25일

온디바이스LLM

목록 보기
5/16
post-thumbnail

1. Portainer이란?

필자의 경우 윈도우 Docker Desktop를 사용해서 설치된 컨테이너의 관리를 GUI방식으로 수행할 수 있지만,

이걸 CLI나 우분투 환경에서 관리가 용이하게 해주는 컨테이너가 따로 있는 듯 하다.

Extension버전으로 먼저 설치를 해보니 대충 설치된 도커 컨테이너랑 이미지 등등을 이쁘게 관리 할 수 있는 항목인 듯 하다.

참고로 컨테이너 버전의 Portainer의 설치는 아래
명령어로 수행하면 된다.

# 포테이너 이미지 다운로드
docker pull portainer/portainer-ce
# 포테이너 볼륨 생성
docker volume create portainer_data

# 아래의 명령은 한번에 다 입력해야함
docker run -d -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
--restart=always \
portainer/portainer-ce

도커 run부분의 코드가 긴데 설명을 하자면 아래와 같다.

-d : 컨테이너 실행 시 백그라운드로 실행
-p 9000:9000 : 호스트 PC \leftrightarrow 컨테이너 간 포트 매핑
\rightarrow 위 구문으로 웹페이지의 http://localhost:9000 접속 시 포테이너를 통한 도커 컨테이너의 전반적인 관리가 가능하다.

-v /var/run/docker.sock:/var/run/docker.sock : 도커 엔진과 통신하기 위한 인터페이스 마운트 규칙 같은거라 보면 된다.. 깊게는 나중에..

-v portainer_data:/data : 생성한 포테이너를 위한 도커 볼륨인 portainer_data를 포테이너 컨테이너의 data폴더와 마운트를 하라는 뜻으로
음.. 그러니까 포테이너 컨테이너를 삭제하더라도 그 설정파일을 도커 데스크탑에 보관하겠다? 뭐 이렇게 이해하고 넘어가자

--restart=always : 도커 데스크탑을 부팅시 같이 시작시켜라 뭐 이렇게 이해하면 된다.

우분투 기반의 명령어만 업로드하고
필자는 Extension으로 포스팅을 진행하겠다.

음.. 사진을 보면 Docker Enviromnet 가 Local 하나만 존재하는데 이걸 여러개 만들 수 있는 듯 하다.

가만보니까 포테이너로 지금까지 도커 CLI 명령어로 했던 기능들은 다 수행이 가능한 듯 하다



2. 도커 이미지

컨테이너 런타임에 필요한 바이너리, 라이브러리 및 설정값을 포함하고, 이것이 변하지 않게 설계한 템플릿을 말한다.

음.. 컨테이너를 만들기 위한 설계도 같은게 이미지
이렇게 보면 될거 같다.

도커 이미지의 경우 사용자가 설계도를 작성하면
이에 맞춰서 컨테이너 설치(빌드)를 실행하고
실행이 잘 되는 도커 이미지는 docker hub나 github에 해당 이미지를 push하여 원격으로 관리하는것이 일반적인 듯 하다.

사실상 docker hub는 도커 파일(도커 이미지 파일)을 전용으로 관리하기 위한 온라인 저장소 개념으로 봐도 될 듯 하며, 운영 방식은 github랑 동일하게 진행되는 듯 하다.

2.1. 도커 이미지 구조 확인하기

도커 허브에는 다양한 유저들이 여러 버전의 도커 이미지 파일을 업로드 하였고, 이를 참조한다면 커스텀 도커 이미지 파일 제작에 큰 도움이 된다.

참조를 위해서는 먼저 해당 도커 파일을 로컬 PC로 다운로드받자.

docker pull [참조하고자 하는 이미지파일]

필자는 httpd라는 아파치 웹 서버 컨테이너의 설계도면(이미지파일) 구조를 참조하려 한다.

pull을 완료한 뒤에는 inspect명령어로 해당 이미지의 메타데이터(코드구조)를 파악하는 것이 가능하다.

docker image inspect [참조하고자 하는 이미지파일]

참고로 docker image는 레이어 구조를 차용했기에 유연하게 특정 레이어를 제거하거나 추가하는 식으로 커스터마이징이 가능하다.

그러나 이것 말고 history로 해당 도커파일 이미지의 정보를 확인하는게 더 편리한데
통상 주로 확인하는 정보가

해당 이미지 파일로 빌드되는 컨테이너는 포트번호를 뭘 쓰는지가 제일 중요한 것 같다.

아무튼 도커 허브는 도커 이미지를 관리하는 온라인 원격 서비스이고 운영방식은 깃허브랑 비슷한데
필자는 깃허브에 도커파일 올릴거라...

나중에 실습을 진행하겠지만
도커 이미지를 빌드 후 컨테이너로 실행
-> 실행중인 컨테이너를 수정(패키지 파일 등을 설치)
-> 변경된 컨테이너는 docker commit 명령어를 통해 컨테이너의 변경된 정보를 포함한 새로운 이미지를 생성 가능

하지만 여기까지 수행한다고 dockerfile로 이미지가 코드화 되는건 아니고...
dockerfile은 수동으로 일일이 코드작업을 해야한다.



3. 도커의 개념

1) 도커 이미지(Dockerfile) : 도커 컨테이너를 생성하기 위한
읽기 전용 템플릿
여기에 포함된 항목은 파일시스템, 라이브러리, 설정이 있으며 불변성, 다층 레이어 형식

통상 커스텀 도커 이미지 파일(Dockerfile)을 생성한다 하면 Dockerhub에서 DOI에 속하는 base 이미지 파일을 참조한 뒤 커스터마이징 하고자 하는 기능 레이어를 추가하는 식으로 진행된다.

2) 스냅샷 : 도커에서는 스냅샷이라는 용어를 명시적으로 사용하지는 않으나, 컨테이너 상태를 저장한 이미지를 스냅샷이라 볼 수 있다.
--> 역으로 실행중인 컨테이너를 특정 시점으로 저장할 수 있으며, 이건 docker commit 명령으로 새 이미지 생성이 가능해짐
사실상 컨테이너의 근간은 이 스냅샷이라고 보면 된다.

임의의 도커 이미지를 pull한 뒤 위 명령어를 실행시키면서
스냅샷 기반의 컨테이너 격리기법에 대해 확인을 해보자

docker pull ubuntu:24.04
docker run -it --name=my-ubu-container ubuntu:24.04 bash

# 여기서부터는 ubu컨테이너 상의 bash 스크립트
ls
df -h
hostname
ps -ef
ifconfig

3) 컨테이너 : 도커 이미지에서 실행된 동적 실행 인스턴스
컨테이너는 실행중인 프로세스, 프로세스가 의존하는 파일시스템(이미지)를 포함함
컨테이너는 일회성가능, 재사용 가능, 필요상태 저장 가능(이미지화 가능이란 뜻)

docker run 명령어는 컨테이너를 생성 및 실행을 한번에 하지만

컨테이너를 생성까지만 하는 명령어는
docker create
그 이후에 생성한 컨테이너를 실행은
docker start

순으로 단계별로 잘라서 실행하는 것도 가능하다.

생성한 컨테이너는 아래의 명령어로 삭제가 가능하다

docker rm [삭제하고자 하는 컨테이너명]

profile
자율차 공부중

0개의 댓글