diff --git a/1/ISO/assignments/docker/docker.pdf b/1/ISO/assignments/docker/docker.pdf index c7140b5..9772533 100644 Binary files a/1/ISO/assignments/docker/docker.pdf and b/1/ISO/assignments/docker/docker.pdf differ diff --git a/1/ISO/assignments/docker/docker.tex b/1/ISO/assignments/docker/docker.tex index 9b48787..74b7d60 100644 --- a/1/ISO/assignments/docker/docker.tex +++ b/1/ISO/assignments/docker/docker.tex @@ -20,7 +20,7 @@ \begin{tabular}{|l|c|l|c|} \hline {\bf Fecha Última Modificación} & \today & {\bf Versión/Revisión} & - v01r02 \\ \hline + v01r04 \\ \hline {\bf Fecha Creación} & 10/11/2021 & \hfill & \hfill \\ \hline {\bf Fecha Finalización} & \today & \hfill & \hfill \\ \hline \end{tabular} @@ -36,6 +36,8 @@ {\bf Versión/Revisión} & {\bf Página(s)} & {\bf Descripción} \\ \hline v01r01 & Todas & Creación y elaboración del documento. \\ \hline v01r02 & 3-4 & Detallado de instalación y primer docker. \\ \hline + v01r03 & 4-5 & Finalizar sección de «Primer Docker». \\ \hline + v01r04 & 5-7 & Añadir secciones Apache y Conclusión \\ \hline \end{tabular} \end{center} \end{table} @@ -102,9 +104,9 @@ contenedores tenemos corriendo. Esto nos servirá luego para gestionar los contenedores y las imágenes locales. -\begin{figure} +\begin{figure}[h] \centering - \includegraphics[width=0.65\linewidth]{imgs/04-hello-world-docker.png} + \includegraphics[width=0.75\linewidth]{imgs/04-hello-world-docker.png} \caption{Ejecución del container \texttt{hello-world}.} \label{fig:hello-world-docker} \end{figure} @@ -116,12 +118,98 @@ el comando \texttt{docker run hello-world} y nos debe de salir un mensaje indicando que se ha ejecutado correctamente (figura \ref{fig:hello-world-docker}). +\begin{figure} + \centering + \includegraphics[width=0.75\linewidth]{imgs/05-list-hello-docker.png} + \caption{Lista de contenedores e imágenes.} + \label{fig:list-hello-docker} +\end{figure} + Ahora, si volvemos a ejecutar el comando \texttt{docker ps -a}, nos mostrará que existe un nuevo contenedor en ejecución. Además, al ejecutar \texttt{docker image ls} nos muestra que se ha descargado además la imagen -\texttt{hello-world}. +\texttt{hello-world}. Si miramos de nuevo la lista de contenedores corriendo, +notaremos que tiene un atributo del {\em nombre} (\texttt{NAMES}). Aquí +aparecerá el nombre que tiene el contenedor que podemos usar para referirnos a +él, además del \texttt{CONTAINER ID}. El nombre del contenedor viene generado +por una palabra y un apellido aleatorio, en nuestro caso +\texttt{focused\_perlman} (figura \ref{fig:list-hello-docker}). Éstos luego los +podemos usar para manejar los contenedores. E.g. podemos borrar un contenedor +con el comando \texttt{docker rm } ó \texttt{docker rm }. Este nombre +lo podemos asignar en la creación del contenedor (el subcomando \texttt{run}) +añadiendo la opción \texttt{--name=}. En cuanto a la ID del contenedor, +no es necesario especificar la ID entera (que puede ser larga y fácil de +confundir) sino simplemente con poner los primeros caracteres de la cadena que +sean únicas basta. -% TODO: mention changing bitnami/apache for httpd +\section{Contenedor de Servidor Apache} +Los contenedores se suelen usar no para correr aplicaciones simples que te dan +un resultado, como una calculadora, sino para proveer servicios en entornos +controlados. Esto es muy útil para los servidores, que tienen que proveer +servicios de una forma estable. + +Para poner a prueba esto, veremos cómo instalar un servicio de Apache (servidor +web) en un contenedor. Para el ejercicio se ha propuesto el uso de la imagen +\texttt{bitnami/apache}, mas este imagen no está disponible para la arquitectura +de mi ordenador (ARMv7), así que tuve que buscar una alternativa, y encontré la +imagen oficial de Apache: \texttt{httpd}.\footnotemark + +\footnotetext{\url{https://hub.docker.com/\_/httpd}} + +Así que para crear este contenedor usamos el comando de antes: \texttt{docker +run -d -p 8888:80 httpd}. Veamos lo que hace cada elemento de este comando: + +\begin{itemize} + \item \texttt{run}: como vimos antes, corre el contenedor, descargando y + creándolo si no se ha creado ya. + \item \texttt{-d}: un {\em detach} que permite correr el contenedor de fondo + mientras la línea de comando queda libre para correr otros comandos. + \item \texttt{-p 8888:80}: publicar el puerto 80 del contenedor al puerto + 8888 del anfitrión. También se puede usar \texttt{-P} que asignará un + puerto aleatorio. + \item \texttt{httpd}: el nombre de la imagen que queremos usar en nuestro + contenedor. +\end{itemize} + +\begin{figure}[h] + \centering + \includegraphics[width=0.75\linewidth]{imgs/10-it-works.png} + \caption{Acceso al servicio apache del contenedor.} + \label{fig:it-works} +\end{figure} + +Esto nos creará el nuevo contenedor y lo pondrá en funcionamiento. Si hemos +usado la opción \texttt{-p 8888:80} entonces deberíamos poder acceder al +servidor por medio de nuestro navegador haciendo una petición a +\texttt{localhost:8888}. Si por el otro lado hemos usado \texttt{-P} nos dirá el +puerto y reemplazamos el \texttt{8888} de la dirección anterior por el número +real del puerto (figura \ref{fig:it-works}). + +\begin{figure}[h] + \centering + \includegraphics[width=0.75\linewidth]{imgs/12-view-new-index.png} + \caption{Nueva página en el contenedor.} + \label{fig:view-new-index} +\end{figure} + +Aunque ahora hemos podido crear un servicio de web con nuestro contenedor, la +pregunta sería cómo cambiar el contenido. Lo más fácil sería simplemente cambiar +el archivo que hay dentro del contenedor en sí. Esto lo hacemos escribiendo +nuestro propio archivo HTML, y después copiándolo a la dirección local dentro +del contenedor. Esto se hace por medio del comando \texttt{docker cp index.html +:/usr/local/apache2/htdocs/}. Si ahora volvemos a hacer una nueva petición +a la página, y nos sale la nueva página que hemos creado (figura +\ref{fig:view-new-index}). + +\section{Conclusión} +Realmente hay más capacidades que tiene el Docker, especialmente para facilitar +el copiar archivos del sistema anfitrión al sistema huésped. Aún así, se puede +ver que tiene gran potencial. Los docker permiten crear servicios dentro de un +entorno controlado, lo cual asegura más estabilidad -- algo vital para cualquier +tipo de sistema en producción. También parece ser una herramienta con mucha +potencial en cuanto a programación para dispositivos empotrados o lo también lo +que se denomina {\em cross-compilation}, gracias a tener un entorno limpio y sin +binarios innecesarios. \pagebreak