Our Blog

Docker: Comandos utiles

Docker a medida que fue evolucionando fue añadiendo comandos para facilitarnos ciertas tareas pero también fue removiendo otros para agrupar esas funcionalidades dentro de otros. Un caso claro de esta situación es  el comando insert (este comando es el que se usaba para copiar archivos de la maquina host a lo que es el contenedor), esta funcionalidad fue deprecada a partir de la versión 0.7 y en su lugar esta funcionalidad fue reemplazada por la ejecución de una serie de comandos pre-existentes en viejas versiones-

Entre los comandos mas útiles se encuentran los siguientes:

  • docker info nos brinda información acerca de la cantidad de contenedores e imágenes que se encuentran actualmente en nuestra maquina como así también la versión del kernel  de Docker que se esta ejecutando.
  • docker images este comando nos brinda información acerca de cada una de las imágenes que se encuentran en nuestra maquina (nombre, id, espacio que ocupa, el tiempo que transcurrió desde que fue creada). Actualmente luego de ejecutar este comando se puede observar una salida como la siguiente:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mongo 2.6.4 37ee18fca8d2 6 days ago 391.23MB

 

  • docker ps nos indicará que contenedores están actualmente corriendo en nuestra máquina.  Existe la posibilidad de añadir el parámetro -a a este comando el cual nos brindara la información de todos los contenedores que existen actualmente, en que estado se encuentran como así también cuando fueron apagados. Vale mencionar que por mas que los contenedores no estén corriendo siguen ocupando lugar físico por lo cual se recomienda cada cierto tiempo ejecutar el comando para eliminar los contenedores que no estan en uso. La salida de la consola al ejecutar el comando docker ps -a es la siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cfa5f386cf28

custom-postgres:lates

“/bin/bash”

7 days ago Exited (0) 7 days ago 5432/tcp distracted_sammet

bd8bb41d6361

ubuntu:latest

“/bin/bash”

7 days ago Exited (0) 7 days ago condescending_ritchie

 

  • docker pull <imagen>:<version> esto nos descargara la imagen con la version que se ha seleccionado. En caso de no indicar la versión nos descargara todas las que se encuentren disponibles, por medio de este enlace  se pueden ver que imagenes se encuentran actualmente disponibles en el repositorio de Docker.
  • docker run <imagen>:<version> este comando nos permite crear un contenedor a traves de una imagen. Por ejemplo para poner en funcionamiento una imagen de ubuntu por linea de comando se deberia ejecutar docker run -i -r ubuntu:latest /bin/bash esto lo que hara es primero chequear que la imagen se encuentra en el repositorio (en caso de que asi no sea la descargara) y luego lanzar la consola (esto ultimo esta relacionado con el parametro -t que se encarga de integrar la consola de la maquina host con la del contenedor).
  • docker rm <imagen>:<version> este comando nos permitirá eliminar un imagen. En caso de no informar la version/tag procedera a borrar todas las que tengan el mismo nombre sin importar la version.
  • docker commit <imagen>:<version> por medio de este comando persistimos los cambios realizados  en un contenedor y creamos una imagen  nueva evitando de esta manera que los cambios realizados en el contenedor se pierdan.
  • docker save <imagen>   >  <archivo>.tar con este comando podremos exportar una imagen dentro de un un archivo tar el cual puede ser importado en cualquier otra máquina.
  • docker load < <archivo>.tar permite cargar una imagen que se encuentra dentro del archivo tar y ser usado en el entorno de Docker.

Estos son los comandos que mas se usan en Docker pero existen muchos mas los cuales pueden encontrarse en este enlace,

Ademas de estos operaciones hay algunas otras que no son pero si son muy importantes de saber como realizarlas:

  • Borrado de contenedores: Si los cambios que se realizan a cada imagen no son persistidos en la maquina lo que si se guarda es una instancia de esa imagen (que como se menciona a lo largo de los post se llama contenedor) por lo cual cada cierto tiempo deberiamos borrarlas para que no ocupen espacio. Esta operacion la podemos realizar por medio de la ejecucion de docker rm $(sudo docker ps -a -q).
  • Copiado de archivos entre la maquina y el contenedor: Como ya lo hemos mencionado al principio de este post la forma de realizar esta accion ha ido cambiando a lo largo de las versiones de Docker (en un comienzo era por medio de docker insert origen destino) pero desde la version 0.7 en adelante para hacerlo hay que seguir los siguientes pasos:Averiguamos el ID del contenedor que esta corriendo actualmente para eso ejecutamos docker ps lo cual nos arroja:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cfa5f386cf28

custom-postgres:lates

“/bin/bash”

7 days ago Exited (0) 7 days ago 5432/tcp distracted_sammet

Luego con el id del contenedor hacemos un inspect para poder obtener el id con el que guarda docker esa imagen en nuestro disco duro.

$docker inspect -f '{{.Id}}' d8e703d7e303d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

Por último copiamos el/los archivo/s dentro del contenedor

$sudo cp file.txt /var/lib/docker/aufs/mnt/d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5/root/file.txt

Nótese que la primera parte de la ruta (/var/lib/docker/aufs/mnt/) siempre es fija.

  • No usar el comando docker export: A la hora de ver la lista de comandos con los que cuenta Docker y ver el comando export instintivamente cualquiera pensaria que seria la opcion mas logica para poder exportar las imagenes que se tienen pero no lo es asi. El comando en cuestion solo sirve para hacer un export del contenedor y volverlo a cargar en caso de que algo se rompa antes de que hagamos commit de los cambios o dicho de otra forma el export sirve para exportar contenedores y cargarlos nuevamente solo el contenedor sigue corriendo.

A grandes rasgos con estos comandos y haciendo estas ultimas salvedades se pueden cubrir las operaciones basicas dentro de lo que es el mundo de Docker

No comments
TeraswapDocker: Comandos utiles

Related Posts