*.sock 확장자로 나타나며, 로컬에서 프로세스 간 네트워크 통신 없이도 데이터를 주고받을 수 있도록 함docker.sock이라면, 이는 Docker 데몬과 클라이언트 간의 통신을 담당하는 소켓 파일docker ps, docker run 등)를 입력할 때, 이 명령어들이 docker.sock 파일을 통해 Docker 데몬에 전달 → 데몬이 해당 명령을 수행한 뒤 결과를 다시 클라이언트로 전달하는 구조sudo docker run hello-worldimport docker
client = docker.DockerClient(base_url='unix://var/run/docker.sock')
container = client.containers.run("hello-world", detach=True)
print(container.logs())base_url='unix://var/run/docker.sock' 부분이 Docker 소켓 파일을 통해 데몬에 접근하겠다는 의미docker run -v /var/run/docker.sock:/var/run/docker.sock -it my-container/var/run/docker.sock 파일을 컨테이너 내부의 /var/run/docker.sock 경로에 마운트/var/run/docker.sock 파일이 없거나 접근이 불가능한 경우에는 Docker 명령어를 실행할 때 Cannot connect to the Docker daemon이라는 오류 발생HTTP 기반이라는 것은 명령어가 HTTP 프로토콜의 형식을 따르는 것을 의미하며, 실제 네트워크를 통한 HTTP 통신(TCP/IP)을 사용하지 않음docker ps라는 명령어 실행 시, 클라이언트가 /containers/json이라는 HTTP 요청을 보내는 것으로 변환GET /containers/json HTTP/1.1
Host: /var/run/docker.sockdocker ps 명령의 결과로는 실행 중인 컨테이너 목록이 JSON 형식으로 반환HTTP/1.1 200 OK
Content-Type: application/json
[
{
"Id": "8dfafdbc3a40",
"Names": ["/cool_name"],
"Image": "redis",
"State": "running"
}
]