Taller 3: Creación de imágenes Docker

Creación de una imagen a partir de un Dockerfile

1.Crea una página web estática (por ejemplo busca una plantilla HTML5). O simplemente crea un index.html.

2.Crea un fichero Dockerfile que permita crear una imagen con un servidor web sirviendo la página. Puedes usar una imagen base debian o ubuntu, o una imagen que tenga ya un servicio web, como hemos visto en el apartado Ejemplo 1: Construcción de imágenes con una página estática.

javiercruces@docker:~/taller3$ cat Dockerfile 
# syntax=docker/dockerfile:1
FROM httpd:2.4
COPY ./public_html/ /usr/local/apache2/htdocs/
EXPOSE 80

3.Ejecuta el comando docker que crea la nueva imagen. La imagen se debe llamar /mi_servidor_web:v1.

javiercruces@docker:~/taller3$ docker build -t javiersaping/mi_servidor_web:v1 .
Sending build context to Docker daemon  3.584kB
Step 1/3 : FROM httpd:2.4
 ---> 92fa43a2ff60
Step 2/3 : COPY ./public_html/ /usr/local/apache2/htdocs/
 ---> b03556dd59b6
Step 3/3 : EXPOSE 80
 ---> Running in 1cc04e1deee4
Removing intermediate container 1cc04e1deee4
 ---> 3078183767ef
Successfully built 3078183767ef
Successfully tagged javiersaping/mi_servidor_web:v1

javiercruces@docker:~/taller3$ docker run -d -p 8081:80 javiersaping/mi_servidor_web:v1
2a753adcd098c49b7b215b7c97267a09e09194303bee131150765222a4295dea

4.Conéctate a Docker Hub y sube la imagen que acabas de crear.

javiercruces@docker:~/taller3$ docker login
javiercruces@docker:~/taller3$ docker push javiersaping/mi_servidor_web:v1
The push refers to repository [docker.io/javiersaping/mi_servidor_web]
c2a1a8df6153: Pushed 
daede99f9966: Mounted from library/httpd 
a7eff924c5ac: Mounted from library/httpd 
24282ddb8cca: Mounted from library/httpd 
5f70bf18a086: Mounted from library/httpd 
8ba5f6d45106: Mounted from library/httpd 
571ade696b26: Mounted from library/nextcloud 
v1: digest: sha256:85a8e341e3fd89b313a263a45c91ad846d673f198301e482c4f07352aef8bd42 size: 1779

5.Descarga la imagen en otro ordenador donde tengas docker instalado, y crea un contenedor a partir de ella. (Si no tienes otro ordenador con docker instalado, borra la imagen en tu ordenador y bájala de Docker Hub).

javiercruces@docker:~/taller3$ docker image ls 
REPOSITORY                     TAG          IMAGE ID       CREATED         SIZE
javiersaping/mi_servidor_web   v1           3078183767ef   7 minutes ago   167MB
nextcloud                      latest       142b11cc42d8   3 weeks ago     1.21GB
wordpress                      latest       fe93c4b645b9   8 weeks ago     739MB
mariadb                        latest       2b54778e06a3   2 months ago    404MB
mariadb                        10.6         10fbb70b8165   2 months ago    396MB
mariadb                        10.5         72610f6b03ac   2 months ago    393MB
httpd                          2.4          92fa43a2ff60   3 months ago    167MB
php                            7.4-apache   20a3732f422b   14 months ago   453MB
javiercruces@docker:~/taller3$ docker image rm 3078183767ef
Untagged: javiersaping/mi_servidor_web:v1
Untagged: javiersaping/mi_servidor_web@sha256:85a8e341e3fd89b313a263a45c91ad846d673f198301e482c4f07352aef8bd42
Deleted: sha256:3078183767efd71fffccce7fb4e6806afa46a4cff42c37ad505d376e0b842108
Deleted: sha256:b03556dd59b6f2ab935450b4d5eb09dedfc4ee86f4c11a9140d8e17f89d89a73
Deleted: sha256:5f245addf2a19a8f2d9314dc1283ab53d0f85ae6a6a73aa5d264f070f0d71e01

javiercruces@docker:~/taller3$ docker pull javiersaping/mi_servidor_web:v1
v1: Pulling from javiersaping/mi_servidor_web
2f44b7a888fa: Already exists 
5abb3599da34: Already exists 
4f4fb700ef54: Already exists 
fa608a886227: Already exists 
afe6bbf00437: Already exists 
fd0ef2a49677: Already exists 
6d9a1035e41b: Pull complete 
Digest: sha256:85a8e341e3fd89b313a263a45c91ad846d673f198301e482c4f07352aef8bd42
Status: Downloaded newer image for javiersaping/mi_servidor_web:v1
docker.io/javiersaping/mi_servidor_web:v1

6.Vamos a hacer una modificación de la página web: haz una modificación al fichero index.html.

javiercruces@docker:~/taller3/public_html$ echo "<h1>Taller3 FJCD V2</h1>" > index.html

7.Vuelve a crear una nueva imagen, en esta caso pon ta etiqueta v2. Súbela a Docker Hub.

javiercruces@docker:~/taller3$ docker build -t javiersaping/mi_servidor_web:v2 .
Sending build context to Docker daemon  3.584kB
Step 1/3 : FROM httpd:2.4
 ---> 92fa43a2ff60
Step 2/3 : COPY ./public_html/ /usr/local/apache2/htdocs/
 ---> 94e5c065b88a
Step 3/3 : EXPOSE 80
 ---> Running in 5849a7ba6b3b
Removing intermediate container 5849a7ba6b3b
 ---> 2e68e7708285
Successfully built 2e68e7708285
Successfully tagged javiersaping/mi_servidor_web:v2
javiercruces@docker:~/taller3$ docker push javiersaping/mi_servidor_web:v2
The push refers to repository [docker.io/javiersaping/mi_servidor_web]
1f5b52d08ce0: Pushed 
daede99f9966: Layer already exists 
a7eff924c5ac: Layer already exists 
24282ddb8cca: Layer already exists 
5f70bf18a086: Layer already exists 
8ba5f6d45106: Layer already exists 
571ade696b26: Layer already exists 
v2: digest: sha256:a2af8396c3dfaa8d0312868161bff238c17b742cd46d57296ed304a9495b2a7a size: 1779

8.Por último, baja la nueva imagen en el ordenador donde está corriendo el contenedor. Para hacer la implantación de la nueva versión debes borrar el contenedor y crear uno nuevo desde la nueva versión de la imagen.

javiercruces@docker:~/taller3$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS         PORTS                                   NAMES
2a753adcd098   javiersaping/mi_servidor_web:v1   "httpd-foreground"       3 minutes ago   Up 3 minutes   0.0.0.0:8081->80/tcp, :::8081->80/tcp   nervous_lewin
5a362b768a25   nextcloud:latest                  "/entrypoint.sh apac…"   2 weeks ago     Up 2 weeks     0.0.0.0:8080->80/tcp, :::8080->80/tcp   nextcloud
dcc9f10a6cad   mariadb:10.5                      "docker-entrypoint.s…"   2 weeks ago     Up 2 weeks     3306/tcp                                wp_db
javiercruces@docker:~/taller3$ docker rm -f 2a753adcd098
2a753adcd098

javiercruces@docker:~/taller3$ docker run -d -p 8081:80 javiersaping/mi_servidor_web:v2
e632b46bb8cf8aac8019effdf5ac69cc20d8b9e76b17342638bc4858c63aef32