22.1.18

Una lista de comandos comunes en Docker

Docker permite crear paquetes de software autocontenidos conocidos como contenedores. Se puede usar para correr aplicaciones de casi cualquier tipo. Para más información se puede ver la documentación o aprender más con Play with Docker.

-Descargar una imagen: docker pull NAME[:TAG]
Por ejemplo, para descargar la imagen más reciente de Ubuntu
$ docker pull ubuntu

-Iniciar un contenedor: docker run [OPTIONS] IMAGE
Por ejemplo, para iniciar un contenedor nuevo a partir de la imagen de ubuntu
$ docker run ubuntu
Para iniciar un contenedor nuevo a partir de la imagen de Ubuntu y mapear el puerto 8080 del contenedor al puerto 8888 del host
$ docker run -p 8888:8080 ubuntu
Para iniciar un contenedor nuevo a partir de la imagen de Ubuntu y compartir el contenido de la carpeta ˜/Desktop en el host a la carpeta /usr/myFiles en el contenedor (montar volúmenes)
$ docker run -v ˜/Desktop:/usr/myFiles ubuntu

Los comandos que hacen referencia al host y al contenedor lo hacen en el orden HOST:CONTAINER.

-Ver los contenedores creados: docker ps [OPTIONS]
docker ps muestra solo los contenedores que se encuentran corriendo, para ver todos se usa -a
$ docker ps -a

-Iniciar, reiniciar, detener y matar contenedores.
Todos estos comandos necesitan el ID del contenedor o el nombre que se puede obtener con docker ps. No es necesario escribir todo el ID, por lo general con los primeros tres o cuatro caracteres es suficiente mientras estos no coincidan con otro contenedor.
Por ejemplo para iniciar, reiniciar, detener o matar el contenedor con el ID cc114adf4b01
$ docker start cc1
$ docker restart cc1
$ docker stop cc1
$ docker kill cc1


-Ejecutar un comando dentro de un contenedor: docker exec [OPTIONS] CONTAINER COMMAND
Por ejemplo, para crear el archivo myFile.txt dentro del contenedor activo de Ubuntu con el ID cc114adf4b01
$ docker exec -d cc1 touch /myFile.txt
También se puede usar este comando para iniciar una sesión de bash y "acceder" al contenedor
$ docker exec -ti cc1 bash
En este caso se usan las opciones -t -i para mapear los SDTIN y STDOUT del bash en el contenedor a la terminal que se esté usando en el host y para iniciar el modo interactivo, respectivamente. También es posible acceder via SSH, después de todo se comporta casi como una VM (aunque no lo es)

-Ver las imágenes descargadas: docker image ls

Más: Repositorio de imágenes de Docker: Docker Hub. Simplified man pages. Docker run reference. Docker volumes: -v -mount. Cgroups, namespaces, and beyond: what are containers made from?.

27.7.17

SHOW VARIABLES y el directorio de datos en MariaDB

MariaDB (y MySQL) definen variables de sesión y globales al arrancar. Una útil es la localización del directorio de datos que no siempre se encuentra en la ubicación por defecto (/var/lib/mysql), en especial si se está trabajando con contenedores o alguno de los AMP (XAMPP, WAMP, MAMP…). Esta ubicación está definida por la variable datadir y se puede ver su valor usando el comando SQL SHOW VARIABLES:

MariaDB$ SHOW VARIABLES LIKE 'datadir';

También se pueden ver todas si corre solamente SHOW VARIABLES;.

Más: Default Data Directory for MariaDB. SHOW VARIABLES Syntax: MariaDB and MySQL. List of Server System Variables: MariaDB and MySQL. Set up MySQL on Mac OS X, installation directory and mysql alias.

Cómo respaldar y restaurar una base de datos de MySQL o MariaDB

Para respaldar una base de datos de MySQL o MariaDB se puede usar la utilidad mysqldump (que ya está incluida en la instalación):

$ mysqldump --opt -u [username] -p[password] [dbname] > [file.sql]

Por ejemplo, si se quiere respaldar la base de datos mydb con el usuario root y sin contraseña a un archivo mydb_backup.sql:

$ mysqldump --opt -u root -p mydb > mydb_backup.sql

El comando mysqldump dirige el contenido de la base de datos a STDOUT y con el operador > se redirige a un archivo. Es posible no indicar el argumento -p, de esta manera se solicitará que el usuario escriba la contraseña antes de proceder.

Para restaurar una base de datos, es necesario tener una base vacía en donde se restaurará y luego usar directamente el comando mysql:

$ mysql -u root -p my_empty_db < mydb_backup.sql

Se accede a mysql con el usuario root y la contraseña vacía, se redirige el contenido del archivo mydb_backup.sql con el operador < a la base datos my_empty_db que se encontraba previamente.

También es posible hacerlo desde utilidades como PHPMyAdmin, seleccionando la base de datos que se desea respaldar y luego Export o Import para respaldar o restaurar, respectivamente.

Más: How to Back Up and Restore a MySQL Database. mysqldump.

26.7.17

Git: Cómo unir los X últimos commits en uno solo

El comando git reset reinicia el estado de HEAD a un commit anterior. El siguiente comando une los últimos tres commits y se prepara para hacer commit de ello:

$ git reset --soft HEAD~3
$ git commit

git reset necesita al menos dos argumentos: el modo con el que se va a volver a X commit y el commit al que se va a regresar. --soft "limpia" los últimos commits y deja los archivos actuales (working tree) como una combinación de esos últimos commits, exactamente como están actualmente. HEAD~3 indica cuantos commits volver, en este caso tres. Luego se guardan los cambios con git commit y se escribe un mensaje.

De esta forma los mensajes escritos en los commits que se van a unir no se agregan al nuevo commit. Si se necesita esta información, antes de hacer git reset se puede usar git log --format=%B -n 3 para imprimir únicamente los mensajes de los últimos tres commits (se puede agregar --reverse).

Más: Squash my last X commits together using Git. git reset --soft. git log --format. Git revisions (refnames) in the form: refname@{n}, e.g. master@{1}. Difference between HEAD, Working Tree and Index in Git.

17.7.17

Buscar en la salida de un comando de la terminal con egrep y piping

El comando en bash:

$ tree --help | egrep "\-L"

Busca y devuelve cualquier linea que contenga "-L" (sin comillas) de la ayuda del comando tree.


El comando egrep busca dentro del archivo que se le especifique y devuelve las lineas que coincidan con la cadena regex. Por ejemplo:

$ egrep "gato" felinos.txt

Devuelve todas las lineas en el archivo felinos.txt que coincidan con "gato". Es posible redirigir la salida de cualquier comando con el operador "|" (piping) a egrep y hacer que este busque en eso. egrep utiliza regex así que hay que recordar escapar los caracteres especiales con \.

Más: Grep and Regular Expressions. Piping and Redirection. tree: See the directory structure.