Finished docker exercise.
This commit is contained in:
parent
6d103b2845
commit
4b2761197c
Binary file not shown.
@ -20,7 +20,7 @@
|
|||||||
\begin{tabular}{|l|c|l|c|}
|
\begin{tabular}{|l|c|l|c|}
|
||||||
\hline
|
\hline
|
||||||
{\bf Fecha Última Modificación} & \today & {\bf Versión/Revisión} &
|
{\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 Creación} & 10/11/2021 & \hfill & \hfill \\ \hline
|
||||||
{\bf Fecha Finalización} & \today & \hfill & \hfill \\ \hline
|
{\bf Fecha Finalización} & \today & \hfill & \hfill \\ \hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
@ -36,6 +36,8 @@
|
|||||||
{\bf Versión/Revisión} & {\bf Página(s)} & {\bf Descripción} \\ \hline
|
{\bf Versión/Revisión} & {\bf Página(s)} & {\bf Descripción} \\ \hline
|
||||||
v01r01 & Todas & Creación y elaboración del documento. \\ \hline
|
v01r01 & Todas & Creación y elaboración del documento. \\ \hline
|
||||||
v01r02 & 3-4 & Detallado de instalación y primer docker. \\ \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{tabular}
|
||||||
\end{center}
|
\end{center}
|
||||||
\end{table}
|
\end{table}
|
||||||
@ -102,9 +104,9 @@ contenedores tenemos corriendo. Esto nos servirá luego para gestionar los
|
|||||||
contenedores y las imágenes locales.
|
contenedores y las imágenes locales.
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}
|
\begin{figure}[h]
|
||||||
\centering
|
\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}.}
|
\caption{Ejecución del container \texttt{hello-world}.}
|
||||||
\label{fig:hello-world-docker}
|
\label{fig:hello-world-docker}
|
||||||
\end{figure}
|
\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
|
indicando que se ha ejecutado correctamente (figura
|
||||||
\ref{fig:hello-world-docker}).
|
\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á
|
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
|
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{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
|
\pagebreak
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user