En el repositorio fuente de la ventana acoplable, existe una interfaz en image/backend.go :
type imageBackend interface { .... ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error) }y hay una implementación en daemon/prune.go :
func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPruneReport, error) { ... implementation details ... } ¿Significa esto que es correcto decir que Daemon implementa la interfaz imageBackend ?
Antecedentes: estoy tratando de entender cómo llamar al docker system prune prune cmd invoca la función ImagesPrune en daemon.go . Podría rastrear el flujo de código como:
cli/../system/prune.go -> cli/../prune/prune.go -> cli/../image/prune.go -> client/image_prune.go -> api/server/..image/image_routes.go -> api/server/../image/backend.go -----> ??? ----> daemon/prune.go
No se que viene en el ??? sección anterior.
Sí, Daemon implementa la interfaz imageBackend (como se indica en los comentarios, en realidad es el tipo *Daemon el que implementa la interfaz). Todos los métodos de imageBackend se implementan en varios archivos de código fuente dentro del paquete daemon (principalmente los de image_*.go ).
En image_routes.go se llama al método postImagesPrune , que a su vez llama al método ImagesPrune de s.backend . s es un puntero a la instancia de imageRouter .
type imageRouter struct { backend Backend decoder httputils.ContainerDecoder routes []router.Route } Esta instancia imageRouter se inicializa con el backend establecido en una instancia de Daemon en cmd/dockerd/daemon.go aquí .
Entonces, cuando se llama a s.backend.ImagesPrune , se ejecuta el método ImagesPrune del Docker Daemon, que, como señaló anteriormente, está en daemon/prune.go .