Finished docker exercise.

This commit is contained in:
Nicolás A. Ortega Froysa 2021-11-15 17:19:58 +01:00
parent 6d103b2845
commit 4b2761197c
2 changed files with 93 additions and 5 deletions

Binary file not shown.

View File

@ -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 <name>} ó \texttt{docker rm <id>}. Este nombre
lo podemos asignar en la creación del contenedor (el subcomando \texttt{run})
añadiendo la opción \texttt{--name=<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
<name>:/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