Este repositorio tiene el Trabajo Práctico Final de la materia Administración de sistemas GNU/Linux y virtualización - 2020. El objetivo es levantar dos contenedores de Docker con un servidor Apache2 cada uno que hagan de host a tres sitios sencillos de ejemplo, accesibles por distintos puertos de la máquina.
En caso de ser necesario, es posible acceder al tutorial orientativo de Docker. Para cuestiones puntuales, puede revisarse la documentación oficial.
- Docker - De no tenerlo, puede instalarse siguiendo las instrucciones del sitio oficial.
- Git - Necesario en caso de optar por armar la imagen. También puede instalarse fácilmente siguiendo instrucciones del sitio oficial.
Para correr los servidores en contenedores de docker en una máquina propia:
1. Clonar el repo:
git clone https://github.com/tomlazersheep/apache-server.git
cd apache_server
2. Armar la imagen:
docker-compose build
3. Levantar el contenedor:
docker-compose up [-d]
4. Usando un navegador se accede a los sitios en:
Sitio 1: http://127.0.0.1
(o http://localhost
)
Sitio 2: http://127.0.0.1:8080
(o http://localhost:8080
)
Sitio 3: http://127.0.0.1:8888
(o http://localhost:8888
)
A su vez, se puede obtener información de los contenedores corriendo con:
docker ps
docker inspect container_tp
docker inspect container2_tp
5. Para detener los contenedores:
docker-compose down
Es posible también correr el servidor de uno de los contenedores desde una imagen ya armada y alojada en un repositorio de Dockerhub. La forma convencional de descargarla es con
docker pull tvillani/tp_apache_server:tag
, pero para adaptarlo al procedimiento descrito de la sección anterior lo más sencillo es reemplazar las líneas 5 y 6 deldocker-compose.yml
con:image: tvillani/tp_apache_server:latest
Y comenzar el procedimiento desde el punto 3 en adelante (omitiendo 1 y 2). Al levantar el contenedor, docker reconocerá que no tiene esa imagen entre las disponibles localmente y hará el
pull
desde el repositorio.
El paso a paso descripto es ideal para compartir el proyecto porque contiene el procedimiento de instalación y ejecución del servidor junto con los sitios todo en una unidad (la imagen). Pero no permite la edición de los sitios en tiempo de ejecución. Una posible solución es montar la carpeta local donde está el contenido de los sitios en el path donde están sus correspondientes copias. Para ello, ejemplificando para el server del primer contenedor, basta reemplazar la línea 12 del
docker-compose.yml
con:./C1/sitios/:/var/www/
De esa forma, toda edición que se haga al contenido local se verá reflejada en los sitios que apache de ese contenedor hostea en el momento. Lógicamente la imagen no se alterará, pero es posible trabajar en las modificaciones y una vez finalizadas incorporarlas a la imagen con un
build
.
Es posible correrlo en un cluster en el swarm mode de docker, reemplazando el paso 3 con:
docker swarm init docker stack deploy --compose-file docker-compose.yml tp_stack
Puede verificarse su estado con
docker stack ls
y, aunque no muestre el progreso de build/run, es posible constatar cuándo el servicio ya está ejecutándose condocker service ls
.
A su vez, corriendo de esta forma es posible escalar el servicio aN
contenedores:docker service scale tp_stack_server#=<N>
Con
#
dependiendo el contnedor a escalar. Y para corroborar si efectivamente se levantaron esos contenedores puede correse nuevamentedocker service ls
observando la columna replicas. Obviamente es posible mirar información particular de cada uno como se explicó en el paso 4, aunque en este caso, dado que pueden ser múltiples, docker ignorará el nombre asignado al container en eldocker-compose.yml
, por lo que en el segundo comando indicado se debe reemplazartp_container
por el nombre (o el id) del container que se obtiene del output dedocker ps
.
Para cerrar el swarm:docker swarm leave --force
|
![]() |
|