Tutoriel Linux

Podman의 리눅스에서 : 전체 머신에 root 권한을 부여하지 않고 컨테이너 시작

Débutant2 min de lecture

귀하는 docker 그룹에 자신의 계정을 추가하지 않고 테스트 서비스, 웹 도구 또는 리눅스 이미지를 시작하려고 합니다. Podman은 사용자 세션에서 컨테이너를 실행할 수 있으며, 스토리지 및 프로세스는 귀하의 UID에 연결됩니다. 이는 깨끗하게 시작하는 데 유용하지만, 이미지, 볼륨 및 공개된 포트를 제어하는 것을 면제하지는 않습니다.

Tux 관리자가 비밀번호와 컨테이너 큐브가 있는 리눅스 서버 근처에서 분리된 컨테이너를 시작합니다.
Podman은 리눅스 사용자 세션에서 컨테이너를 실행할 수 있습니다.

Podman 설치 및 rootless 모드 확인

Debian 또는 Ubuntu에서 배포판의 저장소에서 패키지를 설치하십시오. Fedora도 표준 저장소에 포함되어 있습니다.

sudo apt update
sudo apt install podman
podman --version
podman info --debug

그 다음, sudo 없이 일반 계정으로 podman info --debug를 실행하십시오. 출력은 rootless 컨텍스트를 나타내야 합니다. 그러면 Podman은 귀하의 사용자 공간과 /etc/subuid 및 /etc/subgid에 정의된 범위를 사용하여 컨테이너 ID를 매핑합니다.

newuidmap, subuid 또는 subgid에 대한 메시지는 준비가 불완전함을 알립니다. 오류를 우회하여 직접 root로 전환하지 마십시오. 먼저 다음 명령으로 입력을 확인한 후, 부족한 경우 배포판에서 문서화된 방법을 적용하십시오.

grep "^$USER:" /etc/subuid /etc/subgid

권한 없는 첫 번째 컨테이너 실행

작은 이미지와 자동으로 종료되는 명령어로 시작하십시오. 이렇게 하면 이미지 다운로드, 로컬 스토리지 및 네트워크에 열린 서비스 없이 실행을 확인할 수 있습니다.

podman run --rm docker.io/library/alpine:latest echo "Podman은 작동합니다."

--rm 옵션은 컨테이너를 종료할 때 삭제합니다. 이미지는 캐시됩니다. 이미지와 컨테이너를 보려면, 중지된 것을 포함하여 다음을 사용하십시오:

podman images
podman ps -a

항상 사용할 수 있어야 하는 서비스의 경우, 명확한 이름을 부여하십시오. 이 예제는 nginx를 백그라운드에서 시작하고 포트 8080을 로컬 머신에만 게시합니다.

podman run -d --name web-test 
  -p 127.0.0.1:8080:80 
  docker.io/library/nginx:alpine

podman ps
curl -I http://127.0.0.1:8080

127.0.0.1: 접두사는 이 테스트를 모든 네트워크 인터페이스에 노출되지 않도록 합니다. -p 8080:80만 작성하면, podman port web-test와 ss -ltnp로 결과를 확인하세요. 서버에서는 방화벽과 청취 주소를 선택한 후에만 공용 포트를 열어야 합니다.

상태 확인, 로그 읽기 및 서비스 정리 중지

시작된 컨테이너가 응용 프로그램이 응답하고 있음을 보장하지는 않습니다. 이미지를 수정하기 전에 상태, 최근 로그, 네트워크 매핑을 확인하십시오.

podman inspect web-test --format '{{.State.Status}}'
podman logs --tail 50 web-test
podman port web-test
podman stop web-test
podman rm web-test

podman inspect는 실제로 적용된 매개변수를 표시합니다. 이는 귀하의 기록에 복사한 명령을 다시 읽는 것보다 더 신뢰할 수 있습니다. 또한 이미지 이름과 태그를 문서화에 보관하십시오. latest 태그는 다음 다운로드 시 다른 버전을 가리킬 수 있습니다. 지속 가능한 사용을 위해 정확한 버전을 선택하고 업데이트 계획을 세우십시오.

rootless의 한계 및 피해야 할 함정

  • rootless 컨테이너는 호스트에 미치는 영향을 제한하지만, 신뢰할 수 없는 이미지, 변수로 주입된 비밀 또는 쓰기 가능한 볼륨은 여전히 위험이 있습니다.
  • --privileged, --network host 및 민감한 디렉토리 마운트를 피하십시오. 이러한 옵션은 격리를 크게 줄입니다.
  • 애플리케이션이 데이터를 수정할 필요가 없는 경우에는 읽기 전용으로 데이터를 마운트하세요. 예: -v "$HOME/site:/usr/share/nginx/html:ro".
  • 1024 미만의 포트, 일부 장치 및 몇몇 네트워크 제한은 추가 구성이 필요합니다. 반사적으로 권한을 추가하지 마십시오.
  • Podman은 Docker의 많은 구문을 허용하지만, 서비스, 네트워크 및 스토리지는 항상 동일하게 작동하지 않습니다. 마이그레이션 전에 격리된 폴더에서 프로젝트를 테스트하십시오.

docker 그룹은 종종 Docker 데몬에 대한 매우 폭넓은 액세스를 부여합니다. Podman rootless는 귀하의 계정에서 시작된 컨테이너에 대한 이러한 습관을 피합니다. 이 권한 선택으로 Docker 엔진 설치를 비교하려면 또한 Debian에서의 Docker에 대한 가이드를 확인할 수 있습니다.

Podman의 공식 문서는 rootless 작동 방식을 상세히 설명하고, podman run의 매뉴얼은 네트워크, 볼륨 및 식별자를 나열합니다. 간단한 이미지, 로컬 포트 및 읽기 전용 볼륨으로 시작하십시오. Podman이 귀하의 사용에 적합한지를 빠르게 알 수 있으며 유용한 서비스를 옮길 준비를 할 수 있습니다.