좋은 소식 : 새로운 도커 (버전 19.03 (현재 실험용))는 루트 사용자를 사용하여 발생할 수있는 문제를 무시하면서 루트없이 실행할 수 있습니다. 더 이상 높은 권한, 루트 및 원하지 않을 때 컴퓨터를 열 수있는 모든 것을 망칠 필요가 없습니다.
이에 대한 비디오 [DockerCon 2019] 루트없는 모드로 Docker 데몬 강화
루트없는 도커 모드에 대한 몇 가지주의 사항
도커 엔지니어들은 루트리스 모드는 전체 도커 엔진 기능을 대체 할 수 없다고 말합니다. 루트없는 모드에 대한 일부 제한 사항은 다음과 같습니다.
- cgroups 리소스 제어, 의류 보안 프로필, 검사 점 / 복원, 오버레이 네트워크 등은 루트없는 모드에서 작동하지 않습니다.
- 컨테이너에서 포트를 노출하려면 현재 수동 socat 도우미 프로세스가 필요합니다.
- 우분투 기반 배포판 만 루트없는 모드에서 오버레이 파일 시스템을 지원합니다.
- 루트없는 모드는 현재 익숙하지 않은 야간 빌드에만 제공됩니다.
docker 19.3 현재 이것은 더 이상 사용되지 않으며 필요 이상으로 위험합니다.
고정 표시기 설명서는 그것에 대해 말을이있다 :
비 루트 액세스 제공
docker 데몬은 항상 루트 사용자로 실행되며 Docker 버전 0.5.2부터 docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 사용자 루트가 소유하므로 기본적으로 sudo를 사용하여 액세스 할 수 있습니다.
버전 0.5.3부터, (또는 Docker 설치 프로그램)이 docker라는 Unix 그룹을 생성하고 여기에 사용자를 추가하면, docker 데몬은 데몬이 시작될 때 docker 그룹이 Unix 소켓의 소유권을 읽고 쓸 수있게합니다. . docker 데몬은 항상 루트 사용자로 실행해야하지만 docker 그룹의 사용자로 docker 클라이언트를 실행하면 모든 클라이언트 명령에 sudo를 추가 할 필요가 없습니다. 0.9.0부터 docker 이외의 그룹이 -G 옵션을 사용하여 Unix 소켓을 소유하도록 지정할 수 있습니다.
경고 : 도커 그룹 (또는 -G로 지정된 그룹)은 루트와 동일합니다. Docker Daemon Attack Surface 세부 정보 및 루트가 아닌 사용자가 CentOS, Fedora 또는 RHEL에서 Docker를 실행하지 못하게 하는 이유 (michael-n 덕분 에)에 대한이 블로그 게시물을 참조하십시오 .
GitHub 의 실험적 루트없는 모드 의 최근 릴리스 에서 엔지니어는 루트없는 모드를 사용하면 user_namespaces (7), mount_namespaces (7), network_namespaces (7)를 사용하여 권한이없는 사용자로 dockerd를 실행할 수 있습니다.
사용자는 dockerd 대신 dockerd-rootless.sh를 실행해야합니다.
$ dockerd-rootless.sh --experimental
루트없는 모드는 실험적이므로 사용자는 항상 –experimental과 함께 dockerd-rootless.sh를 실행해야합니다.
읽어야 할 중요한 사항 : Linux 설치 후 단계 ( Docker Daemon Attack Surface 세부 정보 링크 )
루트가 아닌 사용자로 Docker 관리
docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 사용자 루트가 소유하고 다른 사용자는 sudo를 통해서만 액세스 할 수 있습니다. docker 데몬은 항상 루트 사용자로 실행됩니다.
docker 명령을 사용할 때 sudo를 사용하지 않으려면 docker라는 Unix 그룹을 만들고 사용자를 추가하십시오. docker 데몬이 시작되면 docker 그룹에서 Unix 소켓의 소유권을 읽고 쓸 수 있습니다.
도커 그룹이 없으면 추가하십시오.
sudo groupadd docker
연결된 사용자 "$ USER"를 docker 그룹에 추가하십시오. 현재 사용자를 사용하지 않으려면 원하는 사용자와 일치하도록 사용자 이름을 변경하십시오.
sudo gpasswd -a $USER docker
newgrp docker
그룹 변경 사항을 활성화하려면 a 또는 로그 아웃 / 로그인을 수행하십시오 .
당신이 사용할 수있는
docker run hello-world
sudo없이 docker를 실행할 수 있는지 확인하십시오.