Docker for robotics
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Docker
for
robotics
Problema 1
Múltiples sistemas operativos
Problema
Replicación de ambientes
de desarrollo
Problema 2
Diferentes versiones de componentes
como bases de datos, versión del software,
máquinas virtuales
Problema 3
Configuraciones propias por proyecto
PITCH DECK V 1.0
Diferentes
soluciones,
mayores
problemas
Llega Docker!!!
y sus ballenitas ❤
Virtual Machines != Containers
Virtual Machines
Container
Una solución
incremental
Docker Hub
Docker compose
Container
Docker-Machine
Docker swarm
APPROACH 1
Instalación
Let’s
practice
APPROACH 2
Imagenes
APPROACH 3
Contenedores
APPROACH 4
Volúmenes
APPROACH 5
Redes
APPROACH 6
Docker-compose
Windows:
https://hub.docker.com/editions/community/dock
er-ce-desktop-windows/
Instalación
Linux:
https://docs.docker.com/install/linux/dockerce/ubuntu/
Verificando la instalación
$ Docker run hello-world
Imagénes
Apartir de ellas podemos crear diferentes ambientes de desarrollo
Comandos
Listar imagenes
$docker images
$docker image ls
Construir desde Dockerfile
$docker image build .
Inspeccionar una imagen
$docker image inspect <id> || <name>
Jalar una imagen de Docker Hub
$docker image pull <user>/<image-name>
Comandos
Eliminar imagenes
$docker image rm <image>
Guardar imagenes
$docker image save .
Dockerfile
Podemos crear una imagen desde
un archivo llamado Dockerfile
Estructura
FROM
La imagen base de donde vamos a
contruir una
MAINTAINER
Opcional, contiene el nombre de la
persona que mantiene la imagen
RUN
Ejecuta un commando durante la instalación
ADD
Copia un archivo del host a la imagen
Estructura
ENV
Define variables de entorno
CMD
Ejecuta commandos cuando ya halla
construido el contenedor
ENTRYPOINT
Un comando por defecto que se ejecuta cuando
el container está corriendo
WORKDIR
Este será el directorio de trabajo
Estructura
ENV
Define variables de entorno
CMD
Ejecuta commandos cuando ya halla
construido el contenedor
ENTRYPOINT
Un comando por defecto que se ejecuta cuando
el container está corriendo
WORKDIR
Este será el directorio de trabajo
Estructura
USER
Indica que usuario estará creado con el
contenedor
VOLUME
Indica el volumen que vincularemos con
el contenedor
Hagamos una build
Vamos a crear un contenedor de Ubuntu con
Apache
Contenedores
Dentro de ellas va todo el software contenido y puede ser
transportado y usado en cualquier lugar
Crear
contenedores
a partir de
imágenes
Comandos
Correr un contenedor
$docker run <image-name>
Correr contenedor en background
$docker run –d <name-image>
Modo interactivo
$docker run –it <name-image>
Redirección de puerto
$docker run –p <host-port>:<container-port> <nameimage>
Comandos
Asignar un nombre
$docker run –name <name> <image-name>
Agregar un dispositivo
Compartir volumen
$docker run --device=/dev/sdc:/dev/xvdc <name-image>
$docker run –v <host-dir>:<container-dir> <nameimage>
Agregar a una red
$docker run –-net=<network-name> <name-image>
Eliminar después de usar
$docker run –rm <image-name>
Comandos
Listar contenedores
$docker ps
Mostrar todos los contenedores
$docker ps –all
Ver el ultimo contendor
$Docker ps -l
Mostrar contenedores y sus tamaños
$docker ps -s
De los más importantes
Conectarnos a un contenedor en ejecución
$docker exec <name-image> <command>
Volumenes
Dentro de ellas va todo el software contenido y puede ser
transportado y usado en cualquier lugar
Definir un volumen
$ docker volume create --name DataVolume1
Asignar volumen a un container
Como
usarlos
$ docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu
Verificar que funciona
root@28a83ef:/# echo "Example1" > /datavolume1/Example1.txt
Como usamos –.rm el contenedor se eliminará
root@28a83ef:/# exit
Inspeccionamos el volumen
$ docker volume inspect DataVolume1
Iniciamos otro contenedor y le asignamos DataVolume1
$ docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu
Verificar el contenido
root@28a83ef:/# cat /datavolume1/Example1.txt
Asignarlo directamente
$ docker run -ti --rm -v c:\user\arkan:/volume1 ubuntu
Revisar si el folder existe
Volumen
entre
host-container
root@28a83ef:/# ls
Cambiar al directorio
root@28a83ef:/# cd /volumen1
Crear un nuevo archivo
root@28a83ef:/# echo “Hola desde el contenedor” > hello.txt
Salimos del contenedor
root@28a83ef:/# exit
Y revisamos si existe en nuestro host
$ cat hello.txt
Crear contenedor1 con volumen
$ docker run -ti --name=Container1 -v DataVolume1:/datavolume1 ubuntu
Generar un nuevo archive dentro del contenedor1
Volumen
entre
$ echo “Este archive viene del C1 y será compartido" > /datavolume1/Example.txt
Crear el contenedor2 con el volumen “DataVolume1”
containers
$ docker run -ti --name=Container2 --volumes-from Container1 ubuntu
Agregar texto desde el contenedor2
$ echo “Este texto va a aparecer en el archive del volumen" >>
/datavolume1/Example.txt
Revisar en ambos contenedores
Contenedor 1
root@28a83ef:/# cat /datavolume1/example.txt
Contenedor 2
root@9eabd33:/# cat /datavolume1/example.txt
Para terminar salimos de los 2 contenedores
Redes
Con ellas podemos conectar todos nuestros servicios
Tipos de redes
• Host
• Bridge
• Null
• Macvlan
• Overlay
Host
For standalone containers, remove network
isolation between the container and the
Docker host, and use the host’s networking
directly. host is only available for swarm
services on Docker 17.06 and higher.
Bridge
The default network driver. If you don’t specify
a driver, this is the type of network you are
creating. Bridge networks are usually used
when your applications run in standalone
containers that need to communicate.
None
For this container, disable all networking.
Usually used in conjunction with a custom
network driver. none is not available for swarm
services.
Overlay
Overlay networks connect multiple Docker daemons together and enable swarm services to communicate with
each other. You can also use overlay networks to facilitate communication between a swarm service and a
standalone container, or between two standalone containers on different Docker daemons. This strategy
removes the need to do OS-level routing between these containers.
Mcvlan
Macvlan networks allow you to assign a MAC address to a container, making it appear as a physical
device on your network
Conectar a una red
Conectar
$docker network connect <network> <container>
Con ipv4 fija
$docker network connect -ip <ip-address>
<network> <container>
Agregar un alias a la red
$docker network connect --alias <alias-name>
<network> <name-image>
A otro contenedor
$docker network connect --link <container-1>:<container-2>
<network> <name-image>
Crear una red
Crear la red
$docker network create
Asignar driver
$docker network create –d <driver-type> <net-name>
Rango de ip’s
$docker network create –-ip-range=<ipaddres>/<submask>
<net-name>
Crear subred
$ docker network create –-subnet=<ip-addres>/<submask> <netname>
Desconectar de una red
Desconectarse
$docker network disconnect [OPTIONS]
<NETWORK> <CONTAINER>
Forzar la desconexion
$docker network disconnect --force <NETWORK>
<CONTAINER>
Inspeccionar red
Inspeccionar una red especifica
$docker network inspect <NETWORK>
Asignar formato al resultado
$$docker network inspect –format <NETWORK>
Listar redes
$docker network ls
Eliminar redes
$docker network rm <NETWORK>
Docker Compose
Contacto
Whatsapp: +52 414 111 3020
Correo: arkantos72.lol@gmail.com
Twitter: AntonioVelaz72
GitHub: Antonio072