Uno de los errores que usualmente cometemos sobre todo como principiantes es que creamos images muy grandes lo cual nos lleva a crear también contenedores grandes ya que estas son la base por lo cual el día de hoy hablaremos de como no cometer esta equivocación y si ya lo estamos haciendo como repararlo de igual manera tomando en cuenta unos tips de iniciarnos en este camino de Docker.
Lo primero a tomar en cuenta es el hacer uso de pocas capas en la creación de una imagen, en este post nos concentraremos en este y al final les dejare un par mas de tips a tomar consideración, a mi parecer esta es una de las principales causas que son provocadas por nuestra causa, veamos...
Este es un Dockerfile que tiene un detalle, intente encontrar cual es el error antes de continuar con el post de cualquier manera debajo estaremos hablando de esto
FROM ubuntu
RUN apt-get update -y
RUN apt-get install -y curl
RUN apt-get install -y postgresql
RUN apt-get install -y postgresql-client
RUN rm -rf /var/lib/apt/lists/*
CMD bash
Espero lo hallan analizado un poco si se fija en la estructura de este dockerfile no tiene nada extraño o inusual pero que es lo que sucede cuando corremos este archivo que llamaremos Dockerfile.malo.
docker -f Dockerfile.malo -t malapractica .
Pongan atención a el numero de pasos: 1/7, 2/7, 3/7 .... y así se va hasta que termina pero que es lo que provoca es la creación de muchas mas capas innecesarias en nuestra imagen veamos cuantas se crearon ejecutando el comando docker inspect container_id
Se pueden ver 10 capaz creadas al ejecutarlo de esta manera, pero entonces de que otra manera es posible ejecutarse, estos son los cambios realizados espero su ojo entrenado los vea o si no después de la imagen hablaremos al respecto.
FROM ubuntu
RUN apt-get update -y \
&& apt-get install -y curl \
&& apt-get install -y postgresql \
&& apt-get install -y postgresql-client \
&& rm -rf /var/lib/apt/lists/*
CMD bash
Notaron la diferencia en el paso 2 de este dockerfile (el segundo) que nombramos Dockerfile.buena dense un par de minutos para analizar, pero bueno entonces en capas cual es la diferencia pensaran veámoslo directamente de nuevo corremos inspect y contemos las capas.
Como se puede ver aquí se encuentra 4 capaz menos que las que se tenían anteriormente en el primera imagen que creamos con Dockerfile.mala , pero veamos directamente ya en MB cual fue la diferencia de hacer uso de uno y otra sera mucha sera poca:
Solo por los pequeños ajuste de no crear un RUN por apt-get conseguimos reducir el tamaño de nuestra imagen 43 MB no se si o crean ustedes pero para mi me parece una gran diferencia, si lo calculamos en floppys estaríamos hablando que se ocuparían 30 para almacenar la diferencia, ok eso solo fue un broma ya nadie usa floppys de 3.5 jajaja.
Bueno después de la broma de viejo, les comento un tip que deben de tomar en cuenta también para el tamaño de sus imágenes:
- Analicen bien cual sera su imagen base en mi caso y para este ejemplo yo utilice Ubuntu la cuales muy buena pero también es muy pesada existe distribuciones pequeñas como Busybox, Alpine o la mas pequeña de todas Scratch revísenlo es su tarea!
Saludos.
now go and code around!
Congratulations @arkangelb! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of posts published
Click on any badge to view your own Board of Honor on SteemitBoard.
To support your work, I also upvoted your post!
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
You received a 4.34% upvote from @dlivepromoter
Want to promote your posts? Send at least 0.010 STEEM or SBD to @dlivepromoter with the post link as the memo and receive an upvote on that post!
Delegate Steem Power to @dlivepromoter for a daily payout!
1 SP, 5 SP, 10 SP, 100 SP, 500 SP, custom amountWe pay 85% of bids back to the delegators each day. The remaining 15% is contributed back towards @dlivecommunity to help create a larger community.
Disclaimer:
@dlivepromoter is a part of the community project @dlivecommunity. We aim to help streamers navigate their way through @dlive and the overall Steem ecosystem. We are not affiliated with @dlive.