Siempre que ejecuto docker ps
para listar los contenedores me resulta dif铆cil entender donde inicia y donde termina la informaci贸n sobre cada contenedor:
隆Que carajos! ... el puerto 驴c煤al? ... siento que casi estoy viendo la matrix
Debo admitir que despu茅s de un tiempo tus ojos se acostumbran y comienzan a hacer cosas raras pero comienzas a entender el resultado. Claro que no deber铆a ser as铆, por lo que encontr茅 que tenemos algunas opciones para mejorar el resultado.
Utilizar —format
Al utilizar la opci贸n --format
, podemos elegir de una serie campos disponibles e incluso despegarlos de forma mas ordenada usando la sintaxis table {{.FieldName}}\t
. La opci贸n format utiliza Go templates algo que me resulta familiar1.
table
incluye los encabezados y \t
agrega espacio entre las columnas.
Ejemplo usando --format
docker ps --format 'table {{.Names}}\t
{{.Status}} : {{.RunningFor}}\t
{{.ID}}\t
{{.Image}}'
Definitivamente resulta mucho m谩s f谩cil de comprender
Sacando provecho a los Go Templates
Nos podemos poner creativos y si necesitamos por ejemplo consultar los contenedores con informaci贸n de red utilicemos las caracter铆sticas de los GoLang Templates para detectar si hay puertos y desplegarlos en cada linea:
Informaci贸n de red
docker ps --format 'table {{.Names}}
\t{{.Status}}
\t{{.Networks}}
\n{{.ID}}
{{if .Ports}}
{{with $p := split .Ports ", "}}
{{range $p}}\t\t{{println .}}{{end}}
{{end}}
{{else}}
\t\t{{println "No Ports"}}
{{end}}'
Como ven mucho mejor ordenado en dos columnas y con todos los datos de la red y puertos mas legibles
Todos los containers docker ps –a
Podemos revisar todos los contenedores (activos y no activos) utilizando la opci贸n -a
. Aprovechando los templates a帽adamos el tama帽o en disco, como utiliza la red y la imagen de donde proviene el contenedor.
Informaci贸n de todos los contenedores
docker ps -a -q --format 'table {{.Names}}\t
{{.Status}}\t
{{.Size}}\n
{{.ID}}\t
{{.Image}}
{{if .Ports}}
{{with $p := split .Ports ", "}}\t
{{len $p}} port(s) on {{end}}{{- .Networks}}
{{else}}\tNo Ports on {{ .Networks }}
{{end}}\n'
De esta manera podemos ver en general el estado de nuestros contenedores.
Crear una funci贸n para reutilizar los comandos
Finalmente podemos crear una funci贸n para utilizar estos comandos (si estas utilizando WSL o Linux) dentro de nuestro .bash_aliases
Crear una funci贸n bash que acepta par谩metros
# Docker PS Prettify Function
function dock() {
if [[ "$@" == "ps" ]]; then
command docker ps --format 'table {{.Names}}\t{{.Status}} : {{.RunningFor}}\t{{.ID}}\t{{.Image}}'
elif [[ "$@" == "psa" ]]; then
# docker ps -a includes all containers
command docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Size}}\n{{.ID}}\t{{.Image}}{{if .Ports}}{{with $p := split .Ports ", "}}\t{{len $p}} port(s) on {{end}}{{- .Networks}}{{else}}\tNo Ports on {{ .Networks }}{{end}}\n'
elif [[ "$@" == "psnet" ]]; then
# docker ps with network information
command docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Networks}}\n{{.ID}}{{if .Ports}}{{with $p := split .Ports ", "}}{{range $p}}\t\t{{println .}}{{end}}{{end}}{{else}}\t\t{{println "No Ports"}}{{end}}'
else
command docker "$@"
fi
}
Para utilizarlo basta ahora con teclear:
- dock ps
- Contenedores en ejecuci贸n con su imag茅n
- dock psa
- Todos los contenedores incluyendo tama帽o en disco y datos de red
- dock psnet
- Contenedores en ejecuci贸n con informaci贸n de red
Campos disponibles en docker
- .ID
- Identificador del contenedor
- .Image
- Id de la imag茅n
- .Command
- Comando de ejecuci贸n
- .CreatedAt
- Tiempo cuando el contenedor se cre贸.
- .RunningFor
- Tiempo transcurrido desde que se inici贸 el contenedor.
- .Ports
- Puertos utilizados por el contenedor.
- .Status
- Estado del contenedor.
- .Size
- Espacio que ocupa en disco el contenedor.
- .Names
- Nombre del contenedor.
- .Labels
- Todas las etiquetas asignadas al contenedor.
- .Label
- Valor especifico para una etiqueta. Por ejemplo ‘{{.Label “com.docker.swarm.cpu”}}’
- .Mounts
- Nombre de los vol煤menes montados en este contenedor.
- .Networks
- Nombre de las redes adjuntas al contenedor.