Docker를 rootless로 설치하기

작성자

카테고리:

일반적으로 Docker는 root로 설치 및 실행됩니다.

개인이 사용하는 서버에서는 큰 문제가 없겠지만, 기업에서 프로덕션 용도로 사용하기 위해 이런 방식으로 Docker를 설치하여 구동하는 경우, 컨테이너 탈옥 공격이 성공했을 때 상당히 큰 위험에 노출됩니다.

다행히도 Docker에는 rootless 모드로 설치할 수 있는 옵션을 제공하는데, 시스템이 아닌 유저 영역으로 배치되기 때문에 컨테이너 탈옥 시 추가로 발생할 수 있는 피해를 최소화 해 줍니다.

이 글은 Docker를 rootless 모드로 설치하는 방법을 설명합니다.

주의사항

  • Ubuntu Server 24.04를 기준으로 합니다.

1. 필요한 패키지 설치

2개의 디펜던시가 필요합니다. 해당 패키지를 설치합니다.

# apt install uidmap curl

2. Docker 유저 생성

Docker를 사용하기 위한 유저를 생성하고, sudo 권한을 부여합니다.

# adduser docker
# usermod -aG sudo docker

이제 docker 유저를 사용하려면 su가 아닌 ssh로 로그인하여야 합니다.

그렇지 않으면 XDG_RUNTIME_DIR 에러가 발생합니다.

$ ssh docker@localhost

3. rootless Docker 설치

Docker를 사용하기 위해 만든 유저(docker)로 로그인한 상태에서 설치합니다.

$ wget https://get.docker.com/rootless  
$ sh rootless

~/bin이 생성되었으며, 모든 Docker 파일이 이곳에 저장됩니다.

또한, 해당 디렉터리를 PATH로 참조하도록 ~/.bashrc에 몇 줄이 추가되어 있을 것입니다.

만약 그렇지 않은 경우, nano와 같은 에디터로 ~/.bashrc를 열어 해당 줄을 추가합니다.

export PATH=/home/$USER/bin:\$PATH
export DOCKER_HOST=unix:///run/user/$UID/docker.sock

1024 이하의 포트를 사용할 수 있도록 합니다.

$ sudo setcap cap_net_bind_service=ep $HOME/bin/rootlesskit

마지막으로, Docker를 systemd에 자동 시작 애플리케이션으로 등록하고 시작시킵니다.

$ systemctl --user start docker
$ systemctl --user enable docker
$ sudo loginctl enable-linger $USER

끝났습니다! docker info를 입력하여 잘 동작하고 있는지 확인합니다.

선택 : Portainer 설치

Portainer는 Docker 컨테이너, 이미지 등을 관리하기 위한 웹 인터페이스입니다.

docker 유저로 해당 명령어를 실행한 뒤, 웹 브라우저를 통해 {서버 IP}:9000으로 접속했을 때 인터페이스가 뜨면 성공한 것입니다.

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer \
--restart=always -v /$XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock \
-v ~/.local/share/docker/volumes:/var/lib/docker/volumes \
-v portainer_data:/data portainer/portainer-ce

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.