Finished docker exercise.
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user