Sesión 2: Docker
info
- duffle → helm
- istio.io : securiza la conexión entre PODs
sudo & services
- sudoreplay
- /var/log/sudo-io
- supervisor daemon (levanta varios servicios)
datos
- datadog : https://www.datadoghq.com/
- influx : https://www.influxdata.com/
Parallel changes
- Avro / Parquet / Hadoop
docker
docker run -ti –entrypoint /bin/bash grafana/grafana
imágenes
- desconfiar (imágenes) de lo que no se puede trazar o comprobar
- probablemente no se actualicen
- si no hay Dockerfile o depende de otras imágenes que no son confiables, no es recomendable
capas
- agrupar capas de comandos que las generan siempre que sea posible
- RUN, COPY, ADD…
VOLUME
docker volume create <nombre>
- por defecto en local, al crear se puede especificar otro (drivers)
docker volume ls
- ubicación volúmenes: /var/lib/docker/volumes/…
NETWORK
- bridge = switch software
brctl show
docker network create –attachable <red>
- --attachable permite añadir a mano otros contenedores a una red
varios
- REDIS
- usarlo para guardar sesiones, permite ampliar los frontales
DOCKER-COMPOSE
- services : uno o más contenedores haciendo lo mismo
- docker-compose.yml
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {}
DOCKER-SWARM
- stack: conjunto de servicio+volumenes+redes…
docker stack ls
docker node ls
docker stack servies <STACK>
docker service scale wordpresito_wordpress=10
: escala a 10 los wordpress- en este caso no coordina las sesiones (para eso el REDIS)
docker stack deploy -c docker-compose.yaml <nombre_stack>
recortes
continous deployment
- canary release : 5% + 95%
- rolling updates : actualizamos un nodo, si todo correcto, a por el siguiente, si no, atrás
- blue-green (red-black)
- microservicios
- cada uno con su storage
- ACID - CAP (2 de 3)
laboratorio
- fracaso
FROM debian:7-slim ARG WP_FILE=latest.tar.gz WORKDIR /tmp #ADD https://wordpress.org/${WP_FILE} . RUN apt-get -y update RUN apt-get install -y apache2 wget php7.0 RUN wget --no-check-certificate https://wordpress.org/${WP_FILE} RUN tar xf ${WP_FILE} #RUN mkdir -p /var/www/html RUN mv wordpress/* /var/www RUN rm ${WP_FILE} RUN apt-get clean # apt-get install -y apache2 libapache2-mod-php7.0 php-mysql php-gd php-redis && \ EXPOSE 80 ENTRYPOINT ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
deberes
funciona por separado, pero no junto
- docker-compose.yml
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: toor MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: driver: local driver_opts: type: 'none' o: 'bind' device: '${HOME}/Docker/_storage/mysql/wordpress'
docker run -d –rm –name mysql-test -p 3306:3306 –env-file mysql.env -v ${DATA_PATH}/mysql/test:/var/lib/mysql mysql:5.7.25
docker run –link mysql-test:mysql -p 8080:80 -d wordpress