Docker

April 7, 2020

Qué es docker container

Docker se trata de una plataforma para desarrollar/administrar sistemas. Nos permite construir, ejecutar y compartir aplicaciones mediante contenedores.

El contenedor se encarga de ejecutar procesos propios para dejar al margen el host y demás contenedores. La principal ventajan es que cada contenedor es individual por si mismo, no afecta a ni a los demás ni a los sistemas de los demás.

El sistema de archivos que ejecuta un contenedor se denomina Imagen, la cual incluirá todo lo necesario para ejecutar la aplicación para la que es construida.

Los contenedores tienen la ventaja de compartir los núcleos de tu PC o host con otros contenedores, por lo que la ejecución de un proceso va a ocuparte seguramente menos memoria que otro ejecutable. Esta es la principal diferencia de Docker a una máquina virtual, el que no estemos ejecutando un sistema operativo “invitado”.

Instalar y empezar a correr en Linux

Comando de instalación (ubuntu 18.04): $ sudo apt install docker.io

Correr servicio de docker: $ sudo systemctl start docker

Activar para que corra al comienzo del sistema (no es necesario) $ sudo systemctl enable docker

Instalar docker en cualquier máquina Linux

https://get.docker.com/

$ curl -fsSL test.docker.com -o test-docker.sh $ sh test-docker.sh

Correr docker sin ser root es más seguro

# create docker group
$ sudo groupadd docker

# add your user to the docker group
$ sudo usermod -aG docker $USER

# or run the following command to activate the changes to groups:
$ newgrp docker

# verify that you can run docker commands without sudo:
$ docker run hello-world

Gestión de imágenes y containers

Si no hemos incluido nuestro usuario con privilegios para correr docker los comandos deben realizarse como root

Antes de hacer nada crear el directorio de la imagen para que persistan los datos. Por ejemplo: mkdir /opt/pathTo/nombreImg

# Buscar imágenes 
$ docker search nombreabuscar

#Descargar imágen
$ docker pull nombredeimagen 
$ docker pull docker/nombreImagen

# comprobar que funciona docker
$ docker run hello-world

# Correr comando en imagen
docker run docker/nombreImagen cowsay "Hello"

# Listar imaǵenes
$ docker images

# Listar contenedores
$ doker ps

# Borrar imagen
$ docker rmi nombredelaimagen

# Borrar container
$ docker rm nombredelcontainer

# Correr y parar contenedor
$ docker run [options] IMAGE [command] [arg...]

# Para parar
$ docker stop nombre_contenedor

# Comandos varios
* help
* build
* run
* list
* kill
* lm
* log
* exec
* cp
* images
* rmi
* pull/push
* pause/unpause

Dentro de una docker file
* from
* maintainer
* label
* add
* copy
* env
* expose
* user
* workdir
* volume
* stopsignal
* entrypoint
* cmd
* run

Docker para apps geoespaciales

Fuente: Docker para Aplicaciones Geoespaciales

Portainer - Monitor de docker

Imagen portainer/portainer

docker run --restart=always -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /opt/pathTo/portainer:/data portainer/portainer
docker run --restart=always -d --name portainer \
--restart=always \ # es para que reinicie siempre (al arrancar sistema)
-p 9000:9000 \ # puertos
-v /var/run/docker.sock:/var/run/docker.sock \ # IMPRESCINDIBLE
-v /data/jcano/portainer:/data  \ # datos permanentes
portainer/portainer \ # volúmenes

Postgres / PostGIS

Imagen mdillon/postgis

docker run --name ide-postgis -d \
  -p 5432:5432 \ 
  -v /opt/curso/postgres:/var/lib/postgresql/data \ # Volúmenes
  -e POSTGRES_PASSWORD=soporte123 \ 
  -e PGDATA=/var/lib/postgresql/data \ # opción: directorio datos
  mdillon/postgis:9.5-alpine # imagen desde la que crea el container

Hay que saber usar convenientemente el tag [imagen:tag]. Si no se especifica usará latest como valor por defecto. Por ello en este ejercicio se ha usado :9.5-alpine que nos creará una contenedor con Alpine Linux de OS y Postgis versión 9.5.

PgAdmin

Imagen dpage/pgadmin4

docker run --name ide-pgadmin4 -d \
  -p 81:80 \
  -v "/opt/curso/pgadmin/var/lib/pgadmin:/var/lib/pgadmin" \
  -v "/opt/curso/pgadmin/tmp/servers.json:/servers.json" \
  -e "PGADMIN_LISTEN_PORT=81" \
  -e "PGADMIN_DEFAULT_EMAIL=admin" \
  -e "PGADMIN_DEFAULT_PASSWORD=soporte123" \
  dpage/pgadmin4

Geoserver ====== Imagen oscarfonts/geoserver

docker run --name ide-geoserver -d \
  --restart=always \
  -p 8081:8080 \
  -v /opt/curso/geoserver/data_dir:/var/local/geoserver \
  oscarfonts/geoserver:2.16.0

Es deseable tener al menos 3 Gb de RAM, incluso más si se van a menajar datos ráster o grandes conjuntos de datos.

Geonetwork

Imagen geonetwork

docker run --name ide-geonetwork -d \
  -p 8082:8080
  --link ide-postgis:postgres \
  -e POSTGRES_DB_USERNAME=postgres \
  -e POSTGRES_DB_PASSWORD=soporte123 \
  -e DATA_DIR=/var/lib/geonetwork_data \
  -v /opt/curso/geonetwork:/var/lib/geonetwork_data \
  geonetwork:3.8.0-postgres

Openmaptiles

  1. Install docker curl -sSL https://get.docker.com/ | sh

  2. Run OpenMapTiles Server Imagen Openmaptiles

    $ docker run --rm -it -v $(pwd):/data -p 8080:80 klokantech/openmaptiles-server
    

    web

OpenDroneMap

git clone https://github.com/OpenDroneMap/WebODM –config core.autocrlf=input –depth 1 cd WebODM ./webodm.sh start

Referencias y enlaces

  • [Get Started, Part 1: Orientation and setup Docker Documentation](https://docs.docker.com/get-started/)
  • Docker Tutorial for Beginners - A Full DevOps Course on How to Run Applications in Containers - YouTube

  • [Docker Explicado: Cómo crear Contenedores de Docker corriendo en Memcached DigitalOcean](https://www.digitalocean.com/community/tutorials/docker-explicado-como-crear-contenedores-de-docker-corriendo-en-memcached-es)
  • [How To Install and Use Docker on Ubuntu 16.04 DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04)
  • [How to Install Docker On Ubuntu 18.04 {2019 Tutorial} PhoenixNAP](https://phoenixnap.com/kb/how-to-install-docker-on-ubuntu-18-04)
  • [Post-installation steps for Linux Docker Documentation](https://docs.docker.com/install/linux/linux-postinstall/)
  • [docker run Docker Documentation](https://docs.docker.com/v17.09/engine/reference/commandline/run/#options)
  • podman.io/whatis.html

  • Docker Basics: How to Use Dockerfiles - The New Stack