Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introducción a Docker
Search
Carlos Moro
July 23, 2015
Technology
0
110
Introducción a Docker
My intro to docker talk at Euskal Encounter 23 (spanish).
Carlos Moro
July 23, 2015
Tweet
Share
More Decks by Carlos Moro
See All by Carlos Moro
Introducción a BD NoSQL
dordoka
0
29
Other Decks in Technology
See All in Technology
Azure Container Apps + Bicep 〜 こんな感じで運用しています
kaz29
3
620
IaCジェネレーターとBedrockで詳細設計書を生成してみた
tsukasa_ishimaru
4
880
【SORACOM UG 東海】あらゆるモノがつながる社会へ、IoT と SORACOM
soracom
PRO
1
140
コードファーストの考え方。 Amplify Gen2から学ぶAWS次世代のWeb開発体験
yoshiitaka
2
320
M5stackで使用できるpHセンサの開発
shinrinakamura
0
110
MapLibreとAmazon Location Service
dayjournal
1
180
よく聞くけど使ったことないソフトウェアNo.1 KafkaとSnowflake
foursue
4
510
Max out Local LLM in Challenging Environments
sashimimochi
1
100
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
520
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
270
【基本】データベース設計
oracle4engineer
PRO
2
170
AWS学習者向けにAzureの解説スライドを作成した話
handy
3
190
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.2k
Gamification - CAS2011
davidbonilla
77
4.6k
Unsuck your backbone
ammeep
663
57k
Statistics for Hackers
jakevdp
790
220k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
7
3.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
For a Future-Friendly Web
brad_frost
172
9k
Thoughts on Productivity
jonyablonski
60
3.9k
What's in a price? How to price your products and services
michaelherold
238
11k
Transcript
Docker Introducción Carlos Moro García @dordokamaisu Euskal Encounter 23
CMG ¡Bienvenidos!
CMG Introducción El problema y la solución Arquitectura Instalación
CMG Nuestro primer container Comandos Docker Hub Dockerfiles
CMG Introducción
CMG Introducción Veremos qué es Docker y qué problemas soluciona
Aprenderemos de forma práctica a dar nuestros primeros pasos con Docker
CMG Introducción Las prácticas se basarán en Ubuntu 15.04 ¡Preguntad
cuando queráis!
CMG El Problema
CMG El Problema Software con múltiples dependencias Debe funcionar en
múltiples lugares Debe poder migrarse de forma sencilla entre entornos
CMG El Problema Y además…
CMG El Problema ¡Funcionar!
CMG El Problema Éste el panorama con el que nos
encontramos a día de hoy…
CMG
CMG El Problema Software heterogéneo Múltiples tecnologías Stacks cada vez
más complejos El mítico en mi PC funciona
CMG El Problema Matrix from Hell
CMG
CMG El Problema Echando la vista atrás, esta es una
problemática análoga a otras que ya han sido solucionadas en el pasado Por ejemplo, el transporte de mercancías…
CMG El Problema Érase una vez, allá por 1960…
CMG
CMG El Problema Matrix from Hell del transporte
CMG
CMG El Problema ¿Os suena?
CMG La Solución
CMG La Solución A las mentes pensantes de aquella época
se les ocurrió la idea del contenedor Sistema standard para resolver el problema
CMG
CMG La Solución De la misma forma, en nuestro mundillo,
el contenedor da solución al Matrix from Hell
CMG
CMG La Solución Una tecnología que posibilita encapsular software de
forma autocontenida, portable y autosuficiente…
CMG La Solución …que puede ser manipulada con operaciones standard
y funcionar de forma consistente en cualquier entorno
CMG La Solución ¡No moar Matrix from Hell!
CMG
CMG La Solución
CMG La Solución Desarrolladores Build once, run anywhere* Entorno portable
para tu app No más problemas con dependencias
CMG La Solución Desarrolladores Múltiples versiones de tu misma app
en diferentes containers Automatiza tests, integración, empaquetado Adiós problemas de compatibilidad
CMG La Solución Sistemas Configure once, run anything Elimina inconsistencias
entre DEV, TEST, PRO Separación de responsabilidades
CMG La Solución Sistemas Aumenta la velocidad y fiabilidad de
los despliegues Reducción de costes
CMG La Solución
CMG La Solución Para los que miran sospechantes…
CMG ¡Los contenedores no son máquinas virtuales! La Solución
CMG
CMG
CMG La Solución
CMG Arquitectura
CMG Arquitectura Docker se basa en varias tecnologías ya existentes
La clave está en que ha estandarizado el uso de dichas tecnologías
CMG Arquitectura Tecnologías cgroups namespaces Union FS & CoW libcontainer
CMG Arquitectura Tecnologías cgroups: control namespaces: aislamiento Union FS &
CoW: filesystem libcontainer: formato
CMG
CMG Arquitectura Mejor vamos al grano, que se nos va
el tiempo ;)
CMG
CMG Arquitectura Componentes Docker Daemon Docker Client Docker Registry
CMG Arquitectura Docker Daemon Corre en la máquina host Es
quien realmente interactúa con el kernel
CMG Arquitectura Docker Client Corre en la máquina host o
en cualquier otra máquina con conectividad al Daemon Interactúa con el Daemon mediante comandos
CMG Arquitectura Dentro de Docker Images Registries Containers
CMG Arquitectura Docker Images Plantilla read-only Se utilizaran para crear
containers Ej: imagen Debian o CentOS
CMG Arquitectura Docker Registries Almacén de imágenes Públicos o Privados
Docker Hub
CMG Arquitectura Docker Containers Concepto similar a un directorio Contiene
todo lo que necesita una aplicación para funcionar
CMG Arquitectura Docker Containers Cada container se crea a partir
de una image base Se definen mediante Dockerfiles
CMG Arquitectura En resumen Images: build Registries: distribution Containers: run
CMG Arquitectura Suficiente txapa, vamos al tema…
CMG Instalación
CMG Instalación Ubuntu 15.04 sudo apt-get update sudo apt-get install
docker.io sudo service docker start
CMG Instalación Comprobamos sudo docker version
CMG Instalación Método fácil y rápido La pega es que
no obtendremos la última versión estable de docker Para ello, tendríamos que añadir el repositorio apt de docker e instalar el paquete docker-lxc
CMG Instalación Docker ha automatizado este proceso mediante un script
wget -qO- https://get.docker.com/ | sh
CMG Instalación Última versión sudo apt-get remove —purge docker.io wget
-qO- https://get.docker.com/ | sh
CMG Instalación Ahora sí…
CMG Instalación Opcional: sudoless sudo usermod -aG docker <nombredeuser>
CMG Instalación https://docs.docker.com/ installation/ubuntulinux/ https://docs.docker.com/ installation/debian/
CMG Nuestro primer container
CMG Nuestro primer container ¡Vamos a lanzar nuestro primer container!
docker run ubuntu:14.04 /bin/echo ‘Hello World!’
CMG
CMG
CMG
CMG Nuestro primer container docker run ubuntu:14.04 /bin/echo ‘Hello World!’
CMG Nuestro primer container Hemos lanzado el comando run Le
hemos indicado la imagen base (ubuntu:14.04) Le hemos indicado que aplicación lanzar dentro del container cuando éste arranque (/bin/echo)
CMG Nuestro primer container Para conseguirlo, docker… hace pull de
la image crea un nuevo container crea un filesystem y monta una capa rw sobre el mismo
CMG Nuestro primer container crea un interface de red para
hablar con localhost le asigna una dirección IP ejecuta el proceso que se ha especificado captura la salida de ese proceso
CMG Comandos
CMG Comandos docker version Muestra las versiones actuales de los
diferentes componentes de docker
CMG Comandos docker images Muestra un listado con las images
y sus versiones que tenemos descargadas localmente.
CMG Comandos docker ps Muestra un listado con los contenedores
que estén corriendo actualmente.
CMG Comandos docker pull <image>:<tag> Descarga del registry actual la
imagen image en su versión tag.
CMG Comandos docker run <image>:<tag> <command> Lanza un nuevo contenedor
basado en la imagen image, versión tag y ejecuta el comando indicado.
CMG Comandos docker run -d <image>:<tag> <command> Detach, ejecución en
background. Además, muestra el ID del Container.
CMG Comandos docker ps -a Muestra un listado de todos
los contenedores que se han lanzado.
CMG Comandos docker run -it <image>:<tag> <command> Interactive & tty,
ejecución en foreground interactiva.
CMG Comandos docker logs <containerid> Muestra la salida del container
indicado.
CMG Comandos Ejemplo docker pull debian:latest docker images docker run
-it debian:latest /bin/ bash
CMG Comandos Ejemplo root@c98aaa88d3e8:/# cat /etc/debian_version root@c98aaa88d3e8:/# exit docker ps
docker ps -a
CMG Comandos Ejemplo docker logs c98aaa88d3e8
CMG Docker Hub
CMG Docker Hub Hub es el registry público de docker
Podemos registrarnos y hacer uso del mismo Podemos subir n imágenes públicas gratuitamente
CMG Docker Hub Podemos subir sólo una imagen privada de
forma gratuita Se ofrecen planes de pago para el uso privado (ie: en ámbito de empresa)
CMG Docker Hub Docker Registry es un proyecto open source
https://github.com/docker/ distribution No así la interfaz (el Hub)
CMG Docker Hub https://registry.hub.docker.com
CMG
CMG Docker Hub Demo Docker Hub
CMG Dockerfile
CMG Dockerfile Todo esto está muy bien pero, ¿cómo creo
mis propias imágenes?
CMG Dockerfile Mediante el Dockerfile Es un fichero en el
que se indica una secuencia de comandos para que docker construya nuestra imagen
CMG Dockerfile Una vez creado, lanzamos el comando docker build
que parseará el fichero y generará nuestra imagen
CMG Dockerfile Veremos su estructura y los comandos soportados de
forma práctica
CMG Dockerfile Vamos a crear un container que contenga un
servidor web (apache2)
CMG Creamos un directorio $ mkdir docker-apache $ cd docker-apache
$ vi Dockerfile Creamos el Dockerfile
CMG FROM ubuntu:12.04 MAINTAINER Dordoka
[email protected]
RUN apt-get update &&
apt-get install -y apache2 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 VOLUME /var/www/ CMD [“apache2”,“-D”,“FOREGROUND”]
CMG Generamos la image $ docker build -t euskal23/apache2 .
CMG Comprobamos que no ha aparecido ningún error $ docker
images Comprobamos nuestra nueva imagen
CMG Dockerfile Ahora vamos a lanzar un container que use
nuestra imagen Aprovechamos y vemos un par de opciones muy comunes de docker run
CMG Lanzamos nuestra imagen $ docker run euskal23/apache2 Vemos que
apache se está ejecutando, pero no podemos conectarnos
CMG Lanzamos nuestra imagen, esta vez exponiendo el puerto tcp80
$ docker run -p80:80 euskal23/apache2 Comprobamos
CMG
CMG Dockerfile Hemos usado el flag -d el cual ejecuta
el contenedor en background También hemos usado el flag -p, el cual expone un puerto del contenedor y lo mapea a un puerto del host docker
CMG Dockerfile Como lo hemos lanzado en background, nuestro container
se mantiene en marcha Para detenerlo, usamos el comando stop
CMG Dockerfile $ docker ps $ docker stop 388fd0eb0286
CMG Dockerfile Otro flag muy común es -v Significa volume
y mapea un directorio del host docker dentro de otro directorio del container -v <hostdir>:<containerdir>
CMG Dockerfile Prueba a crear un directorio Crea un fichero
index.html en el mismo con algún contenido Prueba a ejecutar tu container, haciendo uso de -d, -p y -v
CMG Lanzamos nuestra imagen $ docker run -d -p 80:80
-v ~/www:/var/www euskal23/apache2
CMG Dockerfile Hay mucho más… aplicaciones con múltiples containers (links,
docker- compose) orquestación (docker swarm, kubernetes, apache mesos)
CMG Pero esa es otra historia y debe ser contada
en otra ocasión…
CMG ¡Gracias!
CMG> Carlos Moro García LinkedIn @dordokamaisu
[email protected]