Monday, January 24, 2022

¿Cómo mover o transferir Docker imagen a otro sistema? How to Transfer/Move a Docker Image to Another System?

 

¿Cómo mover o transferir Docker imagen a  otro sistema?


Este post es una mejora a la entrada [1] Ya que no hace falta pasar por la gestión de ficheros y copiar los ficheros al sistema. Simplemente introducimos el comando en una pipeline de sistema usando el comando de SSH 

docker save imagenDocker:latest | ssh user@nameMachineToCopy  'cat > /path/imagenDocker.tar'

y ejecutamos en la maquina nameMachineToCopy  el siguiente comando   docker load < /path/imagenDocker.tar

Pero aún mejor es ejecutarlo en un solo comando sin ficheros intermedios

docker save imagenDocker:latest | ssh user@nameMachineToCopy  ' docker load '


[1]https://appfleet.com/blog/how-to-transfer-move-a-docker-image-to-another-system/

Thursday, May 6, 2021

Ansible

 Estoy realizando un proyecto en Ansible y cuando estas realizando ciertas tareas sencillas como instalar o  copiar datos a los nodos donde estas configurado en el inventory es mas o menos sencillo. Pero cuando quieres ejecutar tareas específicar en un nodo y no en el resto etc. las tareas se complican. 

una tarea sencilla seria que fallara en las máquinas donde tienes cierta version de S.O. por ejemplo para controlar la distribución se haria de la siguiente manera. 

  - namecheck Distribution 
    ansible.builtin.fail
      msgThe system opetative must be Ubuntu and version 20 or getter 
    whenansible_distribution | lower != "ubuntu" or ansible_distribution_major_version| int  < 20

Otra de las tareas que me llevó tiempo es como te puedes impersonar en otro usuario para eso tienes que instalar  un paquete 

  - nameinstall setfacl support copy temp files with other users.
    ansible.builtin.aptpkg=acl
    becometrue







Thursday, January 28, 2021

Limitar el acceso por SSH de un usuario por Región o ciudad a través de su IP

¿Cómo detectar un inturso en tu equipo?  existen diversas manera pero siempre he querido explorar la de localidad del usuario.

Muchas veces me he preguntado como puedo limitar a las personas que entrar en un equipo Unix por Zona geográfica.   

Una solución pasa por un servicio externo que te diga de que region es la ip que se conecta el usuario. 

Por supuesto si entra a través de una VPN de la region permitida el usuario podría entrar.

Con la api de  https://ipwhois.io/documentation  puedes resolver la localizacion de la ip

 Con el comando

 who --ips |  awk '{ print $5 }'| xargs -t  -I ARG   curl -s  http://ipwhois.app/json/ARG | jq .city

 

puedes ver desde que ciudad se está conectando los usuarios. Este comando lo podrías usar para enviar un correo o para limitar por ssh quien se puede conectar. 

 

Tuesday, July 14, 2020

¿Qué tecnologías son las más demanadas en los perfiles SRE?



Como el perfil de SRE es un poco difuso, me he pasado unos días mirando ofertas de trabajo (1500 ofertas) para ver que habilidades técnicas están pidiendo las empresas a los perfiles DevOps y estos son los datos.

A mi me  sorprende ver que estén pidiendo más Azure que AWS, cuando persaba que era justamente al contrario. Y que cómo lenguaje de programación estén pidiendo más Python

Si quieres hacer carrera en el mundo DevOps debes formate en las siguientes tecnologias: Linux, Azure, Jenkins, Docker, Git, Python y Ansible. No deberías tener problemas para encontrar trabajo del perfíl DevOps

Sunday, February 2, 2020


When you want pass a parameter to exec docker instruction, you must used heredoc format in bash 



#!/bin/bash

export variable="value second parameter"
export log=./log

docker exec  -i dockernamecontainer /bin/bash  <<EOF > $log/logfile.log 2>&1  &
cd /python/; python  app.py firstparameter "$variable"
exit
EOF


the $variable is interpreted by heredoc format and replace command as
cd /python/; python  app.py firstparameter value second parameter

Thursday, November 10, 2016

Error to download Java

Oh my good, I cant download java.


Thank you for accessing the Oracle Software Delivery Cloud. Due to your country location, we are unable to process your request. If you have an active support contract, you may request physical media by either submitting a Service Request or calling Customer Support. If you wish to purchase or evaluate our products on a 30-day trial please contact the appropriate Sales Representative for your country.

Monday, October 17, 2016

crear una imagen con docker

Como empezar con docker

Docker funciona mediante los conceptos de container e imágenes. Una imagen es una máquina sin instanciar, con todo instalado y que no puede ser modificada una vez creada. Una imagen de Docker parte siempre de otra imagen.  Un containter es la instancia de una máquina que parten de una imagen.  

Fichero Dockerfile
 
Para generar una imagen, se debe crea un fichero Dockerfile donde se indica la imagen de la que se parte. Para ver los listados de imágenes disponibles se pueden buscar en https://hub.docker.com/  En el fichero Dockfile se aplican los cambios que sea necesario para nuestro proyecto. Se realizan copia de ficheros mediante el comando ADD (deprecate) o COPY,  se pueden establecer variables de entorno con el comando ENV y  ejecutar comandos , instalación de paquetes, con el comando RUN.

Para que se puedan acceder a los puertos de la imagen se usa el comando EXPOSE en el fichero Dockefile. Como pueden ser los tipicos de ssh y tomcat  EXPOSE 22 80  9001
Para finalizar se usa el servicio supervisiord para la ejecución de varios servicios de nuestra imagen y en el que se debe configurar un fichero para lanzar los script correctamente en el puerto 9001
CMD ["/usr/bin/supervisord"]

Comandos de docker para crear un proyecto
  
Para llevar a cabo la creacion de un sistema docker he eguido los siguientes pasos

  1. Se crea una imagen, ver fichero Dockerfile,  mediante el comando docker build -t usuario/proyecto .
  2. Se crea un volumen de datos  docker volume create  --name datosPersistentes para los volumenes
  3. Se crea el container docker run -p 8080:8080 -p 9001:9001  -v datosPersistentes:/data  -v    -i -t  usuario/proyecto. Desde este momento ya se puede acceder al container. Ver si se dejan todos los puertos abiertos o simplemente el 8080 . Si se hace un control-c se para el container. Si se lanza con la opción -d se desvincula y no se parará el container y si se quiere parar con el comando   docker stop idcontainercreado
  4. Se inicializa el container docker start idcontainercreado, cada vez que se quiera lanzar el container

El comando se puede concatenar para ser mas rápido.
docker build -t usuario/proyecto . &&  docker run -p 8080:8080 -p 9001:9001  -v datosPersistentes :/data    -i -t   usuario/proyecto


Para comprobar que los servicios están levantados se mira el enlace
   
   
Los container se pueden para la ejecución y volver a ejecutarlos mediante el comando docker stop y docker start

Para acceder a una máquina docker se puede ejecutar el comando docker exec -i -t idcontainercreado /bin/bash

Es recomendable borrar las imágenes y container ya que ocupan mucho espacio.

Por último se puede publicar una imagen en un repositorio publico como el de https://hub.docker.com con el comando docker  login --username=usuario --email=miemail@loquesea.nose
Se hace login en el sistema y con el comando
docker push usuario/proyecto
Se publica la imagen

Comandos útiles de docker

Ver todos los container
docker  ps -a
Ver la version de docker
docker -v

Borrar los container
docker  rm   idimagen
Borra Todos los container que cumplen como nombre del container ‘condicion’

docker ps -a | grep ‘condicion' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Borrar todos los volúmenes. Cuidado con borrar los datos del container
docker volume ls  | awk '{print $2}' | xargs docker volume rm

Borrar todas las imágenes. No borrará los container en start
docker images  | grep condition | awk '{print $3}' | xargs docker rmi

Copiar ficheros desde el host a un container
docker cp foo.txt mycontainer:/foo.txt