Linux에서 Docker 및 Portainer 설치
모든 것이 운영 체제에 직접 위치해야 하는 것은 아닙니다. SQL Server와 같은 도구는 큰 자원 발자국을 가지고 있으며, 이를 베어 메탈로 실행하면 필요에 관계없이 자원이 소모됩니다. 컨테이너는 이를 해결합니다: 필요할 때 실행하고 필요하지 않을 때 멈춥니다. Docker는 이 워크플로우를 지원하는 엔진이며, Portainer는 CLI 명령의 라이브러리를 외우지 않고도 관리 가능하게 유지하는 경량 GUI입니다.
이 분해는 Tim Corey's Linux 개발 시리즈를 토대로 하여 Ubuntu에서의 전체 설치를 나열합니다: apt 저장소 등록, 엔진 설정, 개인용 기계에서 sudo 필요 제거, Portainer CE를 지속적인 컨테이너로 배포.
1단계: Docker의 apt 저장소 추가
[3:10 - 6:00] Docker 자체를 apt로 설치할 수 있기 전에, Docker의 패키지 소스를 등록하고 시스템이 이를 신뢰할 수 있는 이유를 부여해야 합니다. Docker는 이 모든 작업을 한 번의 복사로 처리하는 실행 가능한 명령 블록을 제공합니다. docs.docker.com로 이동하여, 설치 섹션으로 이동한 다음 Ubuntu를 선택하세요. 'apt 저장소를 사용하여 설치' 아래의 명령이 원하는 것입니다.
이 블록은 여러 작업을 순서대로 수행합니다: 필수 인증서 도구를 설치하고, Docker의 공식 GPG 키를 다운로드하며, 해당 권한을 조정하고, apt 소스 목록에 저장소 주소를 씁니다. 문서에서 복사하여 Ctrl+Shift+V로 터미널에 붙여 넣음으로써 블록 전체를 한 번에 실행하세요.
강조할 중요한 점: 새로운 패키지 소스를 맹목적으로 추가하지 마세요. 소스를 설치하기 전에 그것을 신뢰하는지 확인하세요. Docker는 신뢰할 만하고 신뢰할 가치가 있지만 이는 추가하는 모든 소스에 적용되는 원칙입니다. 이 접근 방식은 많은 패키지 관리자들이 기본적으로 수행하는 것보다 실제로 더 엄격합니다; 이는 복잡성이 아닌 기능입니다.
2단계: Docker 엔진 설치
[6:00 - 7:10] 저장소가 등록되면, Docker 설치는 하나의 apt 명령입니다:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin프롬프트가 나타나면 확인하고, apt가 다운로드 및 설치를 처리합니다. Docker는 부팅 시 자동으로 시작되도로 구성되어, 모든 재시작 후 백그라운드에서 실행됩니다.
모든 작동이 잘 되는지 확인하려면 hello-world 컨테이너를 실행하세요:
sudo docker run hello-worldsudo docker run hello-worldDocker는 이미지를 가져오고, 실행하며, 확인 메시지를 출력합니다. 그 출력은 설치가 정상적으로 작동함을 의미합니다. hello-world 컨테이너는 한 번 실행하고 종료하도록 설계되었습니다; 이는 엔진이 응답하는지를 검증하기 위한 것입니다.
3단계: Docker를 sudo 없이 실행하기 (개인용 기계 전용)
[7:45 - 10:30] 기본적으로 Docker 명령은 sudo을 필요로 합니다. 이는 컨테이너 관리는 권한이 있는 작업이기 때문입니다. 공유 서버나 프로덕션 기계에서는 이대로 두세요. 개인 개발 머신에서 자신만 제어하는 경우, docker 그룹에 자신을 추가하면 접두어를 제거할 수 있습니다:
sudo usermod -aG docker $USERsudo usermod -aG docker $USER-aG는 현재 계정을 여기에 추가합니다. 대소문자를 구분해야 합니다: $USER는 대문자로 입력해야 합니다. 바꾼 것은 로그아웃하고 다시 로그인하기 전까지 효력이 발생하지 않습니다; 전체 시스템 재시작이 그룹 멤버십을 올바르게 적용하는데 단순 로그아웃보다 더 신뢰할 만합니다. 한 번 이렇게 하면, docker run hello-world는 sudo 없이 작동합니다.
이는 편리함과 보안을 맞바꾼 것입니다. 개발용 기계에만 유지하세요.
4단계: Portainer를 위한 볼륨 생성
[11:30 - 12:45] Portainer를 실행하기 전에, 컨테이너 재시작 및 교체 시 데이터를 유지하기 위해 명명된 볼륨을 생성하세요:
docker volume create portainer_datadocker volume create portainer_data컨테이너는 설계상 임시적이며, 하나를 제거하면 내부에 저장된 모든 것이 소멸됩니다. 볼륨은 Docker가 관리하는 경로에 컨테이너 수명 주기 외부에 존재합니다, 따라서 Portainer의 구성은 제거 및 재구축하더라도 생존합니다.
5단계: Portainer 컨테이너 실행
[12:45 - 14:10] Portainer CE 자체가 Docker 컨테이너입니다. 전체 실행 명령은 다음과 같습니다:
docker run -d -p 9000:9000 --name portainer \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-cedocker run -d -p 9000:9000 --name portainer \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce분해해보면: -d는 컨테이너를 분리하여 백그라운드에 남겨 둡니다. -p 9000:9000는 호스트 포트 9000을 공개하고 이를 컨테이너 내부의 대응하는 내부 주소로 라우팅합니다. 첫 번째 -v는 Docker 소켓을 마운트하여 Portainer가 다른 컨테이너와 이미지를 제어할 수 있도록 합니다. 이렇게 소켓을 연결하는 것은 GUI가 전체 Docker 환경을 읽고 관리할 수 있도록 해줍니다. 두 번째 -v는 방금 생성한 볼륨을 컨테이너 내의 /data에 연결하여 상태를 지속시킵니다.
portainer/portainer-ce(커뮤니티 에디션)에서 끌어옵니다. portainer.io 웹사이트는 유료 Enterprise 티어를 강조하지만, CE는 로컬 및 개인 사용에 대해 무료로 사용 가능합니다.
Portainer UI 탐색
[14:10 - 17:30] 컨테이너가 시작되면, 브라우저를 열고 http://localhost:9000로 이동하세요. Portainer는 처음 액세스 시 관리자 비밀번호를 만들도록 요청합니다; 12자 이상이어야 합니다. 로그인 후 추가 환경을 추가하지 않고 빠른 설치 마법사를 클릭한 다음, 대시보드에서 로컬 환경을 선택하세요.
홈 뷰는 요약을 보여줍니다: 다운로드된 이미지, 존재하는 컨테이너, 구성된 네트워크 및 사용 중인 볼륨. 각 섹션을 클릭하면 전체 제어를 제공합니다. 이미지 아래에서, 설정 중 수행된 두 번의 가져오기에서 나오는 hello-world와 Portainer CE 이미지를 볼 수 있습니다. 컨테이너에서는 두 번의 hello-world 실행이 중지된 상태로 나타나며, Portainer 자체는 활성 상태로 실행 중입니다.
컨테이너 패널에서 항목을 시작, 중지, 제거할 수 있습니다. 컨테이너를 선택하고 로그를 클릭하면 출력을 나타냅니다. hello-world 항목은 두 번 실행된 익숙한 인사말 문구를 표시합니다. 컨테이너를 다시 시작하고 로그를 확인하면 새로운 출력이 처음 아래에 추가 되었음을 확인할 수 있습니다.
볼륨은 그 마운트 경로와 함께 나열됩니다. portainer_data 항목은 엔진이 모든 명명된 볼륨 데이터를 디스크에 저장하는 /var/lib/docker/volumes/ 아래에 위치를 표시합니다.
Portainer vs Docker Desktop
[17:30 - 18:10] Docker Desktop은 GUI와 함께 배포되지만, 상당한 오버헤드를 지니고 있습니다; 이는 실제 워크로드를 위해 시스템 리소스를 확보하고자 하는 Linux 개발 기기에서 중요합니다. Portainer CE는 자체 컨테이너로 실행되며, 훨씬 적은 메모리 및 CPU를 소모합니다. 이미지 및 컨테이너를 탐색, 로그를 읽고, 볼륨을 관리하며, 서비스 시작과 중지를 모든 무게 없이 수행하는 실용적 요구를 충족합니다.
다음에는 무엇이 올까요?
[17:50 - 18:30] Docker 및 Portainer 세트업이 완료되면, 시리즈의 다음 단계는 컨테이너로 SQL Server 실행입니다. 단일 docker run 명령이 이미지를 끌어와 인스턴스를 시작합니다. Portainer 컨테이너 패널에서 세션 종료 시 중단하고 다시 필요할 때 재시작할 수 있습니다. 이 패턴은 연속적으로 실행하기에 비용이 많이 드는 Redis 및 기타 인프라 도구에도 동일하게 적용되지만, 컨테이너화하기에는 간단합니다.
결론
[18:30 - 끝] 요약하면: Docker의 GPG 키로 apt 저장소를 등록하고, apt를 통해 엔진을 설치하며, 개인 기기에서는 선택적으로 사용자를 docker 그룹에 추가하고, Portainer 용 이름이 지정된 볼륨을 생성하고 포트 9000에 매핑된 portainer/portainer-ce 컨테이너를 실행합니다. 해당 시점부터 localhost:9000는 루틴 작업을 위해 CLI를 사용하지 않고도 Linux에서의 컨테이너 관리를 위한 GUI를 제공합니다.
작동 중인 생동감 넘치는 기계 설치를 보고, Tim Corey's YouTube 채널에서 전체 비디오를 시청하세요.

