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
130
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
35
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
今日から始めるAmazon Bedrock AgentCore
har1101
4
400
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
630
Webhook best practices for rock solid and resilient deployments
glaforge
1
280
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.2k
GSIが複数キー対応したことで、俺達はいったい何が嬉しいのか?
smt7174
3
150
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
320
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
2
180
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.4k
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
150
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.1k
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
140
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
Mind Mapping
helmedeiros
PRO
0
79
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
450
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
Side Projects
sachag
455
43k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Crafting Experiences
bethany
1
48
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
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]