0. Introducción
Créditos
https://www.tutorialspoint.com/how-to-copy-files-from-host-to-docker-container
https://www.baeldung.com/linux/docker-mount-host-filesystem#:~:text=To%20mount%20a%20filesystem%20within,container%20target%20directory%20path
https://www.baeldung.com/linux/docker-container-add-volume
http://www.rebellionrider.com/?s=expdp
http://www.rebellionrider.com/?s=impdp
http://www.rebellionrider.com/?s=rman
1. Eligiendo un destino de las copias de seguridad
2. Backups dentro del sistema de ficheros docker
Se pueden hacer copias de seguridad dentro del sistema de ficheros propios del contenedor o también el el propio servidor físico.
En el primer caso utilizaremos el comando docker cp para copiar los ficheros entre el servidor físico y el contenedor docker tal como vimos en la entrada anterior:
#1. Listar los contenedores activos para ver su nombre docker ps #2. Copiar un fichero del servidor al contenedor docker cp <src-path> <container-name>:<dest-path> #3. Copiar un fichero desde el contenedor al servidor docker cp <container>:<src-path> <local-dest-path>
3. Backups en carpetas compartidas con el servidor
OJO: No se debe compartir directamente una carpeta con un contenedor existente. Se puede hacer de forma no recomendable segun Baeldung modificando el fichero de configuración JSON de docker situado en /var/lib/docker en Ubuntu
Se puede compartir una carpeta entre el servidor y un NUEVO contenedor a crear mediante mapeo directo de una carpeta del servidor o mapeando un VOLUMEN previamente creado con docker.
4. Dos formas de compartir carpetas en el servidor: Montaje directo y volúmenes
Veamos como se pueden crear los dos tipos de contenedores y como arrancarlos. En este caso para simplificar las cosas usaremos la imagen del linux Alpine
# OJO: puede que se pida ejecutar docker con "sudo"! #------------------------------------------------------------- #1. Contenedor que comparte la carpeta # del servidor/home/ximo/prueba y mapeándola a /tmp_prueba # en dicho contenedor #-------------------------------------------------------------- #1.1 Crear el contenedor (alpine) # <nombre contenedor> <carpeta server> <carpeta container> <nombre imagen> <programa a ejecutar> docker container create --name my-alpine-share -it -v /home/ximo/prueba:/tmp_prueba alpine:latest /bin/sh #1.2 Arrancar el contenedor (alpine) docker container start -i my-alpine-share #-------------------------------------------------------------- #2. Proceso de crear un contendedor que comparta un volumen #-------------------------------------------------------------- #2.1 Manejo de un volumen #2.1.1 Crear un volumen docker volume create my-volume #2.1.1 Ver los volumenes creados docker volumen ls #2.1.2 Mostrar informacion del volumen docker volume inspect my-volume # Y obtenemos la ruta de montaje #[ # { # "CreatedAt": "2023-09-20T09:12:31+02:00", # "Driver": "local", # "Labels": null, # "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", # "Name": "my-volume", # "Options": null, # "Scope": "local" # } #] #2.2 Manejo del contendor #2.2.1 Crear un contenedor (alpine) compartiendo el volumen # del servidor/home/ximo/prueba y mapeándola a /tmp_prueba # en dicho contenedor # <nombre contenedor> <volumen> <carpeta container> <nombre imagen> <programa a ejecutar> docker container create --name my-alpine-volume -it --mount source=my-volume,target=/opt/my-volume alpine:latest /bin/sh #2.2.2 Arrancar el contenedor (alpine) docker container start -i my-alpine-volume
Se recomienda crear un volumen pues es mas eficiente (la segunda opción)
5. Proceso de asignación de carpetas compartidas a un contenedor existente
Como no debemos asignar carpetas compartidas a un contenedor existente, lo mas cómodo es:
- Crear una nueva imagen a partir de un contenedor existente
- Crear un contenedor a partir de esta imagen al cual le añadiremos un VOLUMEN previamente creado o el mapeo de la carpeta del servidor (visto en el punto anterior
- docker container export y docker container import
- docker container commit
# OJO: puede que se pida ejecutar docker con "sudo"! #------------------------------------------------------------- #1. Contenedor que comparte la carpeta # del servidor/home/ximo/prueba y mapeándola a /tmp_prueba # en dicho contenedor #------------------------------------------------------------------ #1. Exportar el contenedor como imagen en un fichero "tar" (export) #------------------------------------------------------------------ #1.1 Comando a utilizar para exportar # <fichero.tar> <nombre-contenedor> docker container export -o my-alpine.tar my-alpine #1.2. Ver el contenido del fichero "tar" tar -tvf myalpine-vol.tar # #1.3. Crear una imagen a partir de este fichero "tar" # <fichero tar> <-nombre nueva imagen> docker image import my-alpine.tar my-alpine-imported
#------------------------------------------------------------- #2. Exportar el contenedor como imagen directamente (commit) #------------------------------------------------------------- # <nombre-contenedor> <nombre nueva imagen> docker container commit my-alpine my-alpine-committed
#----------------------------------------------------------------------- #3. Ahora solo falta crear los contenedores a partir de las imagenes #----------------------------------------------------------------------- #3.1 Listamos imagenes docker images
6. Proceso completo de asignación de volumen al contenedor docker existente de Oracle
- Crear una imagen del contenedor de la BD Oracle con un commit
- Crear un volumen
- Crear un contenedor a partir de la imagen montando el volumen. Hay que advertir que al crear el contenedor SI hace falta dar puertos ni contraseñas.
#------------------------------------------------------------- #1. Exportar el contenedor como imagen directamente (commit) # y listamos las imagenes para comprobar #------------------------------------------------------------- # <nombre-contenedor> <nombre nueva imagen> docker container commit ximo-oracle-db oracle-db-image-committed docker images #REPOSITORY TAG IMAGE ID CREATED SIZE #oracle-db-image-committed latest 036d3ff6a2cf 9 minutes ago 16.5GB #container-registry.oracle.com/database/express latest 8da8cedb7fbf 6 weeks ago 11.4GB #----------------------------------------------- #3. Creamos un volumen y listamos para combrobar #----------------------------------------------- docker volume create ximo-oracle-volume docker volume ls #DRIVER VOLUME NAME #local ximo-oracle-volume #------------------------------------------------------------ #4. Creamos un nuevo contenedor a partir de la imagen y # le montamos el volumen # OJO: SI hace falta dar pawssword y puertos #------------------------------------------------------------# <nombre-contenedor> <mapeo puerto1> <mapeo puerto2> <volumen a montar> <punto montaje> <nombre imagen>
docker container create --name ximo-oracle-db-new -it -p 1111:1521 -p 2222:5500 -e ORACLE_PWD=myPassword --mount source=ximo-oracle-volume,target=/opt/ximo-volume oracle-db-image-committed #-------------------------------- 5. Arrancamos el contenedor #--------------------------------# <nombre-contenedor>
docker container start -i ximo-oracle-db-new
No hay comentarios :
Publicar un comentario