sourcetip

"docker.sock" 파일의 목적은 무엇입니까?

fileupload 2023. 8. 6. 10:17
반응형

"docker.sock" 파일의 목적은 무엇입니까?

장착하는 실제 이유를 이해하려고 합니다.docker.sockdocker-compose.yml파일입니다. 자동 검색을 위한 건가요?

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

docker.sock도커 데몬이 듣고 있는 UNIX 소켓입니다.도커 API의 주요 진입점입니다.TCP 소켓일 수도 있지만 보안상의 이유로 Docker는 기본적으로 UNIX 소켓을 사용합니다.

도커 CLI 클라이언트는 기본적으로 이 소켓을 사용하여 도커 명령을 실행합니다.이러한 설정을 재정의할 수도 있습니다.

용기 내부에 도커 소켓을 장착해야 하는 이유는 여러 가지가 있을 수 있습니다.다른 컨테이너 내에서 새 컨테이너를 시작하는 것과 같습니다.또는 자동 서비스 검색 및 로깅용입니다.이렇게 하면 공격 표면이 증가하므로 컨테이너 내부에 도커 소켓을 장착할 경우 조심해야 합니다. 컨테이너 내부에 신뢰할 수 있는 코드가 실행되고 있지 않으면 도커 데몬을 실행하는 호스트를 쉽게 손상시킬 수 있습니다. 도커는 기본적으로 모든 컨테이너를 루트로 실행하기 때문입니다.

도커 소켓에는 대부분의 설치에 도커 그룹이 있으므로 해당 그룹 내의 사용자는 루트 권한 없이 도커 소켓에 대해 도커 명령을 실행할 수 있지만 도커 데몬이 루트 권한으로 실행되므로 실제 도커 컨테이너는 루트 권한을 가집니다(이름 공간 및 cgroup에 액세스하려면 루트 권한이 필요함).).

그것이 당신의 질문에 대답하기를 바랍니다.

추가 정보: https://docs.docker.com/engine/reference/commandline/dockerd/ #http://examples

조금 늦었지만 제 대답이 많은 통찰력을 줄 수 있기를 바랍니다.

먼저 Unix Sockets에 대해 말씀드리겠습니다.

소켓이라는 용어는 일반적으로 IP 소켓을 가리킵니다.이것들은 포트(및 주소)에 바인딩되어 TCP 요청을 보내고 응답을 받는 것입니다.

다른 유형의 소켓은 유닉스 소켓으로, 이 소켓은 IPC(Interprocess Communication)에 사용됩니다.유닉스 도메인 소켓(UDS)이라고도 합니다.Unix Sockets는 통신을 위해 로컬 파일 시스템을 사용하고 IP Sockets는 네트워크를 사용합니다.

도커 데몬은 세 가지 유형의 소켓을 통해 도커 엔진 API 요청을 수신할 수 있습니다.unix, tcp, and fd.

기본적으로 UNIX 도메인 소켓(또는 IPC 소켓)은 /var/run/docker에 생성됩니다.양말

몇 가지 실제 사례를 살펴보겠습니다.

Docker Server는 이 소켓을 사용하여 REST API를 수신하고 클라이언트는 소켓을 사용하여 서버에 API 요청을 보냅니다.

curl은 Unix Socket과 통신할 수 있습니다.--unix-socketflag. 때문에 flag를 해야 합니다 Docker Server API가 REST로 노출되어 있기 때문에 HTTP를 통해 명령을 전송해야 합니다.또한 이 서버가 로컬(파일 시스템 기억)이기 때문에 URL에 있는 모든 호스트 이름을 전달할 수 있습니다(또는 로컬 호스트에 연결하면 잘 작동합니다!).서버는 호스트 이름은 신경쓰지 않고 경로만 신경씁니다.

curl --unix-socket /var/run/docker.sock http://localhost/images/json | jq

 [
  {
    "Containers": -1,
    "Created": 1525888860,
    "Id": "sha256:24a77bfbb9ee3aeef9e24766ad6e9fa57f85c67596f154e8916e4f314067e149",
    "Labels": null,
    "ParentId": "",
    "RepoDigests": [
      "postgres@sha256:b06cdddba62f1550a1c674270814e72eaa8734d95912019b4ddc288b650ad67d"
    ],
    "RepoTags": null,
    "SharedSize": -1,
    "Size": 39507096,
    "VirtualSize": 39507096
  }
]

일부 명령:

도커로 많은 일을 할 수 있습니다.양말

아름다운 기사를 확인해 보세요.

기계에 도커를 설치하는 경우.두 가지 다른 프로그램이 있습니다.

  • 도커 클라이언트
  • 도커 서버

Docker Server는 소켓(네트워크 또는 "파일"을 통해)을 통해 명령을 수신합니다.

Docker Client는 네트워크를 통해 통신하고 Docker 서버에 컨테이너 만들기, 컨테이너 시작, 컨테이너 중지 등의 메시지를 보냅니다.

클라이언트와 서버가 동일한 컴퓨터에서 실행되는 경우 소켓이라는 특수 파일을 통해 연결할 수 있습니다.또한 파일을 통해 통신할 수 있고 Docker가 호스트와 컨테이너 간에 파일을 효율적으로 공유할 수 있기 때문에 Docker 내부에서 클라이언트를 실행할 수 있습니다.

다음은 샘플입니다.

docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock docker sh

이 명령은 도커 클라이언트가 설치된 컨테이너를 만듭니다. 볼륨 파트를 .-v /var/run/docker.sock:/var/run/docker.sock

와 함께-v호스트를 공유하는 플래그docker.sock파일을 사용하여 컨테이너를 통해 호스트 내의 컨테이너를 조작할 수 있습니다.

/ # docker run --rm -it ubuntu bash --> Creates a new container via container 

려달을 합니다.docker ps호스트 터미널에 있습니다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
0f9e333b59fe   ubuntu    "bash"                   5 seconds ago    Up 4 seconds              zealous_wilson
b4a8af31416b   docker    "docker-entrypoint.s…"   16 minutes ago   Up 16 minutes             epic_elion

기본적으로 호스트 도커 데몬을 컨테이너에 노출시킵니다.따라서 컨테이너에서 도커 api/client를 호출하여 호스트에서 이러한 명령을 직접 호출하는 것과 같이 이미지/컨테이너를 시작/중지/구축할 수 있습니다.

언급URL : https://stackoverflow.com/questions/35110146/what-is-the-purpose-of-the-file-docker-sock

반응형