Categoría: Docker

  • Crear backup / respaldo de una base de datos de sql server en un contenedor de docker y descargar en windows mediante Powershell

    Crear backup / respaldo de una base de datos de sql server en un contenedor de docker y descargar en windows mediante Powershell

    Como el titulo lo menciona, tengo un vps con ubuntu, corre una aplicación de web api en net core y un contenedor de docker con sql server para la db, sin embargo, ando experimentando en temas de Dev Ops y cada día me hago más preguntas de «como se hace esto, aquello, etcétera. Posteriormente quiero automatizar estos procesos, desconozco del tema a profundidad, pero pudiera ser con bash scripting.

    Hay muchas maneras de crear un respaldo, anteriormente lo había hecho desde sql managmente studio, aquí está el post si gustan verlo:
    https://mirandamx.dev/copiar-archivos-de-un-contenedor-de-docker-en-ubuntu/

    Así que empezamos:

    Para eso debemos iniciar la consola de nuestro contenedor de sql server, con alguno de estos dos comandos:

    $ docker exec -it 466ae2e5db3d bash
    $ docker exec -it 466ae2e5db3d sh

    Si fuera su caso que no los deje ejecutar comandos, podemos iniciar con el usuario root

    $ sudo docker exec -it --user root 466ae2e5db3d bash

    Para crear nuestro .bak, ejecutamos el siguiente comando en la consola bash que acabamos de abrir (No olviden cambiar por sus datos de su db)

    $ /opt/mssql-tools/bin/sqlcmd -S localhost -U elapolonio -Q "BACKUP DATABASE [diario] TO DISK = N'/var/opt/mssql/data/20250219-Diario.bak' WITH NOFORMAT, NOINIT, NAME = '20250219 - diario', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

    Y posteriormente nos pedirá nuestro password de sql server.

    Si lo quieren hacer de forma directa en la consola del servidor y no en la del contenedor:

    -- Alternativa más directa (cambiar datos por los suyos):
    $ docker exec -it 466ae2e5db3d /opt/mssql-tools/bin/sqlcmd -S localhost -U usernameSQL -P elPasswordSqlDelAmor -d Diario -Q "BACKUP DATABASE [Diario] TO DISK = N'/var/opt/mssql/data/20250219-Diario.bak' WITH NOFORMAT, NOINIT, NAME = N'DockerTest-Full Database Backup', COMPRESSION, STATS = 10"

    Dentro de nuestro contenedor, podemos validar la existencia del archivo:

    $ cd /var/opt/mssql/data/
    $ ls

    Copiamos el .bak de nuestro contenedor en docker a nuestro servidor

    $ sudo docker cp 466ae2e5db3d:/var/opt/mssql/data/20250219-Diario.bak /home

    Para descargar desde nuestro windows con ayuda de PowerShell ejecutamos:

    scp f ubuntu@142.44.243.239:/home/20250219-Diario.bak C:\bak\dbOvh

    Si muestra el mensaje » Permission denied», nos asignamos los siguientes permisos a nuestro archivo en nuestro servidor

    $ sudo chmod 755 /home/20250219-Diario.bak

    Borramos el .bak de nuestro servidor

    $ rm /home/20250219-Diario.bak

  • Copiar archivos de un contenedor de Docker en Ubuntu

    Hola amigos, en esta ocasión tengo la necesidad de copiar un respaldo de una base de datos de SQL Server que se encuentra en un contenedor de Docker a mi VPS que es un SO Ubuntu 23.04

    Como podemos ver, tengo un solo contenedor haciendo uso del comando:

    $ docker ps

    Anteriormente accedí al path donde copiaré mi archivo e hice un ls para ver que efectivamente esta vacío.

    Luego usando un comando como el siguiente, podemos copiar de una ruta del contedor a una local.

    docker cp ID_CONTENEDOR:RUTA_DEL_CONTENEDOR RUTA_LOCAL
    

    Y en mi caso quedaría así

    docker cp 466ae2e5db3d:/var/opt/mssql/data/diario.bak /var/opt
    

    Dependiendo de su usuario, configuraciones y permisos, tal vez sea necesario añadir el comando sudo para elevar permisos.

    Ahora si haciendo un ls podemos ver que efectivamente realizó la copia.

    Como dato extra añado un ejemplo de como sería de manera inversa, de nuestro servidor a un contenedor.

    docker cp RUTA_LOCAL ID_CONTENEDOR:RUTA_DEL_CONTENEDOR