TL;DR
- Podman의 루트리스 UNIX 도메인 소켓을 DOCKER_HOST에 지정하면 docker-compose를 비롯한 대부분의 Docker 생태계 도구를 사용할 수 있음.
- Podman의 사용자 네임스페이스에서는 컨테이너 내부의 루트 사용자가 호스트 사용자에 매핑되고, 다른 UID와 GID는 각각
/etc/subuid와/etc/subgid에 정의된 범위에 매핑됨. - 사용자 권한으로
podman.socket을 활성화하고DOCKER_HOST환경 변수를 설정하면 Compose 명령을 평소처럼 실행할 수 있음. podman unshare와podman mount를 사용하면 컨테이너를 시작하지 않고도 컨테이너 사용자 소유 파일을 다루거나 실행 중인 컨테이너 파일에 접근할 수 있음.- 로그아웃 뒤에도 컨테이너를 실행하려면 사용자 지속 실행(user lingering)을 활성화해야 하며, 루트리스 Docker도
DOCKER_HOST설정으로 사용할 수 있음.
Podman 소켓 활성화 및 시작
- 사용자 권한으로
systemctl --user enable --now podman.socket을 실행하면 Podman 소켓이 활성화되고 시작됨. - 소켓은
${XDG_RUNTIME_DIR}/podman/podman.sock에 생성되며,${XDG_RUNTIME_DIR}은 사용자별로 자동 마운트되는 비공개 임시 파일 시스템(tmpfs)임. - 이 명령에는 systemd 세션이 필요함.
sudo는 systemd 세션을 만들지 않으므로 지원되지 않음. - wheel 그룹에 속해 있다면 일부 리눅스 배포판에서
systemd-container패키지에 포함된machinectl shell --uid=your-username을 사용할 수 있음. 또는 TTY나 SSH로 사용자 계정에 로그인할 수 있음. - 이 안내는 Podman과
docker-compose가 배포판의 패키지 관리자를 이용하는 등의 방식으로 이미 설치된 상태를 전제로 함.
Docker 호스트로 소켓 노출
docker-compose같은 도구는DOCKER_HOST환경 변수를 읽음.export DOCKER_HOST="unix://${XDG_RUNTIME_DIR}/podman/podman.sock"으로 변수를 설정하면 Podman 소켓을 가리킴.- 설정을 영구적으로 유지하려면 Zsh의
~/.zshrc등 셸 설정 파일에 해당 줄을 추가하면 됨.
docker-compose 사용
- 소켓을 연결한 뒤
docker-compose config,docker-compose up -d,docker-compose ps,docker-compose down --volumes를 평소처럼 실행할 수 있음. - 리눅스 배포판에 따라
docker-compose대신docker compose명령을 사용할 수 있으며, 동작은 동일함. - 셸에
alias docker-compose='docker compose'별칭을 추가할 수 있음.
팁과 요령
루트 권한 Docker 중지 및 비활성화
- Docker가 설치되어 있지만 아직 제거할 계획이 없다면 루트 권한으로
systemctl disable --now docker.service docker.socket을 실행하고rm -f /var/run/docker.sock을 실행해 Docker systemd 서비스와 소켓을 중지·비활성화하고 소켓 파일을 제거할 수 있음. - 이 명령은 Docker 데이터를 삭제하지 않음.
- 다시 사용하려면 루트 권한으로
systemctl enable --now docker.service를 실행하면 됨.
docker 명령 사용
podman명령은docker와 같은 인수를 받음.docker명령을 계속 사용해도 됨.docker-compose와 마찬가지로DOCKER_HOST변수를 읽고 Podman 소켓과 통신할 수 있음.
podman unshare
- 컨테이너를 시작하지 않고 루트 권한 환경을 열려면
podman unshare를 사용할 수 있음. 이 명령은sudo -i와 비슷하게 새 셸을 시작하지만, 호스트의 실제 루트 권한이 아니라 사용자 네임스페이스 안의 루트 권한을 부여함. - 이 셸에서
chown이나chmod등을 사용해 컨테이너 사용자 소유 파일을 다룰 수 있음.
podman mount
podman mount로 실행 중인 컨테이너의 파일에 접근할 수 있음.- 먼저
podman unshare를 실행한 뒤podman mount container-name-or-id가 반환하는 경로로 이동하면 됨. - 이후 평소 사용하는 터미널 사용자 인터페이스(TUI) 편집기로 컨테이너 내부 파일을 편집할 수 있음.
루트리스 Docker
- Podman으로 전환할 준비가 되지 않았다면 Docker의 루트리스 설치를 사용할 수 있으며, 자세한 내용은 Docker 문서를 참고할 수 있음.
- 설치 및 시작 후에는
DOCKER_HOST를unix://${XDG_RUNTIME_DIR}/docker.sock으로 설정해야 함. - 루트리스 Docker에는
podman unshare와podman mount에 해당하는 기능이 없지만,unshare와nsenter로 비슷한 작업을 수행할 수 있음.
사용자 지속 실행
- 기본 설정에서는 사용자 계정의 마지막 systemd 세션이 종료될 때 Podman 컨테이너도 중지됨.
- 로그아웃 후에도 컨테이너를 계속 실행하려면 루트 권한으로
loginctl enable-linger your-username을 실행해 사용자 지속 실행을 활성화해야 함.
함께 보기
- Lobsters 댓글
- Podman Compose — 몇 년 전 마지막으로 사용한 뒤 크게 발전함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요