| 
				     | 
				
| (No se muestran 2 ediciones intermedias de 2 usuarios) | 
| Línea 1: | 
Línea 1: | 
| − | Podemos modificar una imagen existente y guardarla con un nombre diferente:
  |   | 
|   |  |   |  | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # docker run -it ubuntu bash
  |   | 
| − | root@d66f7a3268e6:/# 
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Fijaros en que el prompt del interprete de ordenes ha cambiado e indica el numero que identifica de manera unica al contenedor que hemos lanzado. Este numero cambia para cada nueva instancia que lanzamos.
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | root@d66f7a3268e6:/# apt-get update
  |   | 
| − | root@d66f7a3268e6:/# apt-get install apache2
  |   | 
| − | apt-get install apache2
  |   | 
| − | Reading package lists... Done
  |   | 
| − | Building dependency tree       
  |   | 
| − | Reading state information... Done
  |   | 
| − | The following additional packages will be installed:
  |   | 
| − |   apache2-bin apache2-data apache2-utils ...
  |   | 
| − | The following NEW packages will be installed:
  |   | 
| − |   apache2 apache2-bin apache2-data apache2-utils ...
  |   | 
| − | 0 upgraded, 57 newly installed, 0 to remove and 4 not upgraded.
  |   | 
| − | Need to get 22.6 MB/22.6 MB of archives.
  |   | 
| − | After this operation, 102 MB of additional disk space will be used.
  |   | 
| − | Do you want to continue? [Y/n] 
  |   | 
| − | ...
  |   | 
| − | root@d66f7a3268e6:/# 
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Escribo 'Y' y pulso enter para comenzar la instalacion del servidor web apache2.
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | root@d66f7a3268e6:/# exit
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # docker commit -m "Imagen de ubuntu con apache2" -a "profe" d66f7a3268e6 ubuntu/apache2
  |   | 
| − | sha256:b68ef77405104a6ea2de6fde986a519a2fc9710b26d9ae8ec2553f5050c51fd3
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # docker images
  |   | 
| − | REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  |   | 
| − | ubuntu/apache2      latest              b68ef7740510        36 seconds ago      260MB
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # docker run -it -p 8888:80 ubuntu/apache2
  |   | 
| − | # service apache2 start
  |   | 
| − |  * Starting Apache httpd web server apache2                                     AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
  |   | 
| − |  * 
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Y ahora si abro un navegador web al localhost al puerto 8888, me aparece la pagina que indica que apache esta funcionando correctamente.
  |   | 
| − | 
  |   | 
| − | = Creando una imagen para una app Flask en python =
  |   | 
| − | 
  |   | 
| − | *Todo el código fuente está disponible en : https://github.com/EGCETSII/1920-Practica-1 *
  |   | 
| − | 
  |   | 
| − | Comenzamos creando nuestra app.
  |   | 
| − | File holamundo.py
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="python">
  |   | 
| − | from flask import Flask  
  |   | 
| − | app = Flask(__name__) 
  |   | 
| − | @app.route('/') 
  |   | 
| − | def hello_world():     
  |   | 
| − |     return 'Hello World' 
  |   | 
| − | @app.route('/hello/<name>')
  |   | 
| − | def hello_name(name):
  |   | 
| − |     return 'Hello %s!' % name
  |   | 
| − | if __name__ == '__main__':      
  |   | 
| − |     app.run()
  |   | 
| − | 
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | 
  |   | 
| − | Definimos las dependencias
  |   | 
| − | File requirements.txt
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="python">
  |   | 
| − | Flask
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Podemos usar la imagen de python3 existente en los repositorios de docker, y modificar anadiendo en la carpeta apps la aplicacion que hemos desarrollado
  |   | 
| − | 
  |   | 
| − | Para ello podemos crear un fichero Dockerfile que nos automatiza la creacion de una imagen modificada:
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # Base image 
  |   | 
| − | FROM python:3 
  |   | 
| − | #copy the requirements txt file with all our dependencies
  |   | 
| − | COPY requirements.txt ./ 
  |   | 
| − | #install the dependencies
  |   | 
| − | RUN pip install --no-cache-dir -r requirements.txt  
  |   | 
| − | #copy the app in the image
  |   | 
| − | COPY holamundo.py ./  
  |   | 
| − | #define a default command to execute
  |   | 
| − | CMD [ "python", "./holamundo.py" ]
  |   | 
| − | 
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Este fichero indica que docker tiene que descargar la imagen python en su tercera versión y tiene que añadir el fichero requirements a la carpeta de usuario de la imagen.
  |   | 
| − | 
  |   | 
| − | Docker nos ofrece un lenguaje de scripting para automatizar la creacion de imagenes.
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # docker build -t holamundo-flask .
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Va a crear la imagen, tras esto podemos lanzar:
  |   | 
| − | 
  |   | 
| − | <syntaxhighlight lang="sh">
  |   | 
| − | # docker run -it -p 5000:5000 holamundo-flask
  |   | 
| − | </syntaxhighlight>
  |   | 
| − | 
  |   | 
| − | Tras esto, desde un navegador, abrimos la URI: http://localhost:5000/hello/"yourname"
  |   |