Docker 데몬 원격 접근 구성하기
Docker 데몬 원격 접근 구성하기 (Configure remote access for Docker daemon)
기본적으로 Docker 데몬은 로컬 클라이언트의 요청을 받기 위해 Unix 소켓에서 연결을 수신 대기해요. Docker가 Unix 소켓뿐 아니라 IP 주소와 포트에서도 수신 대기하도록 구성하면 원격 클라이언트의 요청을 받아들일 수 있어요.
Warning Docker를 원격 클라이언트의 연결을 받아들이도록 구성하면 호스트에 대한 무단 접근과 기타 공격에 취약해질 수 있어요. Docker를 네트워크에 여는 것의 보안 의미를 이해하는 것이 매우 중요해요. 연결을 보호하기 위한 조치를 취하지 않으면 원격의 비-루트 사용자가 호스트에서 루트 접근 권한을 얻을 수 있어요. TLS 없는 원격 접근은 권장되지 않으며, 향후 릴리스에서 명시적 동의(opt-in)가 필요해질 거예요. TLS 인증서로 이 연결을 보호하는 방법에 대한 자세한 내용은 Docker 데몬 소켓 보호를 참고하세요.
출처: 문서
본문
원격 접근 활성화 (Enable remote access)
systemd를 사용하는 Linux 배포판에서는 docker.service systemd 유닛 파일을 사용해 데몬에 대한 원격 접근을 활성화할 수 있어요. 아니면 배포판이 systemd를 사용하지 않는다면 daemon.json 파일을 사용할 수 있어요.
systemd 유닛 파일과 daemon.json 파일 둘 다를 사용해 Docker가 연결을 수신하도록 구성하면 충돌이 발생해 Docker가 시작되지 않아요.
systemd 유닛 파일로 원격 접근 구성 (Configuring remote access with systemd unit file)
sudo systemctl edit docker.service명령으로 텍스트 편집기에서docker.service용 오버라이드 파일을 열어요.- 다음 줄을 추가하거나 수정하고, 자신의 값으로 대체해요.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
- 파일을 저장해요.
systemctl구성을 리로드해요.
$ sudo systemctl daemon-reload
- Docker를 재시작해요.
$ sudo systemctl restart docker.service
- 변경이 적용되었는지 확인해요.
$ sudo netstat -lntp | grep dockerd
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
daemon.json으로 원격 접근 구성 (Configuring remote access with daemon.json)
/etc/docker/daemon.json의hosts배열을 다음과 같이 Unix 소켓과 IP 주소에 연결하도록 설정해요:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
}
- Docker를 재시작해요.
- 변경이 적용되었는지 확인해요.
$ sudo netstat -lntp | grep dockerd
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
방화벽을 통해 원격 API 접근 허용 (Allow access to the remote API through a firewall)
Docker를 실행하는 호스트와 같은 호스트에서 방화벽을 실행하고, 다른 원격 호스트에서 Docker Remote API에 접근하려면 방화벽이 Docker 포트의 들어오는 연결을 허용하도록 구성해야 해요. 기본 포트는 TLS 암호화 전송을 사용하면 2376, 그렇지 않으면 2375예요.
두 가지 일반적인 방화벽 데몬은:
- Ubuntu 시스템에서 자주 쓰이는 Uncomplicated Firewall (ufw)
- RPM 기반 시스템에서 자주 쓰이는 firewalld
자신의 OS와 방화벽의 문서를 참고하세요. 다음 정보가 시작에 도움이 될 수 있어요. 이 지침에 사용된 설정은 허용적(permissive)이며, 시스템을 더 강하게 잠그는 다른 구성이 필요할 수 있어요.
- ufw의 경우 구성에서
DEFAULT_FORWARD_POLICY="ACCEPT"를 설정해요. - firewalld의 경우 정책에 다음과 유사한 규칙을 추가해요. 들어오는 요청용 하나, 나가는 요청용 하나.
<direct>
[ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -i zt0 -j ACCEPT </rule> ]
[ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -o zt0 -j ACCEPT </rule> ]
</direct>
인터페이스 이름과 체인 이름이 올바른지 확인하세요.
추가 정보 (Additional information)
데몬에 대한 원격 접근의 구성 옵션에 대한 더 자세한 내용은 dockerd CLI 레퍼런스를 참고하세요.