Python >> Tutoriel Python >  >> Python

Exécution d'applications Bottle dans des conteneurs Docker sur macOS

Il peut être déroutant de comprendre comment utiliser Dockercontainers dans votre workflow d'environnement de développement Python et Bottle. Ce didacticiel vous montrera rapidement les étapes exactes pour obtenir Dockerup et l'exécuter sur macOS avec une application Bottleweb fonctionnelle

Nos outils

Ce tutoriel est écrit pour Python 3. Il peut fonctionner avec Python 2 mais il n'a pas été testé avec cette version 2.7 qui sera bientôt obsolète. Vous devriez vraiment utiliser Python 3, de préférence la dernière version qui est actuellement la 3.6.5.

Docker pour Mac est nécessaire pour exécuter des conteneurs Docker. Je vous recommande d'utiliser la version stable à moins que vous n'ayez un objectif explicite pour le canal périphérique.

Dans le conteneur Docker, nous utiliserons :

  • Python 3, en particulier la version slim-3.6.5 de Docker Hub
  • Version 0.12.13 de la bouteille

Tous pour le Dockerfile et le projet Bottle sont disponibles en open source sous la licence MIT sur GitHub sous le répertoire docker-bottle-mac du référentiel blog-code-examples.

Installer Docker sur macOS

Nous devons installer Docker avant de pouvoir lancer nos conteneurs. Passez à la section suivante si Docker pour Mac est déjà installé et fonctionne sur votre ordinateur.

Sur votre Mac, téléchargez le programme d'installation de Docker Community Edition (CE) pour Mac.

Ouvrez le Finder et accédez au dossier de téléchargements où se trouve le fichier d'installation. Suivez les étapes d'installation et ouvrez Terminal lorsque le programme d'installation est terminé.

Testez votre installation Docker en exécutant le docker commande avec le --version drapeau :

docker --version

Si Docker est correctement installé, vous devriez voir le résultat suivant :

Docker version 18.03.1-ce, build 9ee9f40

Notez que Docker s'exécute via un agent système que vous pouvez trouver dans la barre de menus.

Docker est maintenant installé afin que nous puissions exécuter un conteneur et écrire une application simpleBottle pour tester l'exécution d'une application dans le conteneur.

Fichier Docker

Docker a besoin de savoir ce que nous voulons dans notre conteneur, nous spécifions donc une image en utilisant un Dockerfile .

# this is an official Python runtime, used as the parent image
FROM python:3.6.5-slim

# set the working directory in the container to /app
WORKDIR /app

# add the current directory to the container as /app
ADD . /app

# execute everyone's favorite pip command, pip install -r
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# unblock port 80 for the Bottle app to run on
EXPOSE 80

# execute the Flask app
CMD ["python", "app.py"]

Enregistrez le Dockerfile, puis sur la ligne de commande, exécutez :

docker build -t bottledock .

Le docker build ci-dessus le fichier utilise le -t flag pour taguer l'image avec le nom de bottledock .

Si la construction a fonctionné avec succès, le shell affichera une sortie terminée comme celle-ci :

$ docker build -t bottledock .
Sending build context to Docker daemon  16.38kB
Step 1/6 : FROM python:3.6.5-slim
3.6.5-slim: Pulling from library/python
f2aa67a397c4: Pull complete 
19cc085bc22b: Pull complete 
83bd7790bc68: Pull complete 
8b3329adba1b: Pull complete 
d0a8fd6eb5d0: Pull complete 
Digest: sha256:56100f5b5e299f4488f51ea81cc1a67b5ff13ee2f926280eaf8e527a881afa61
Status: Downloaded newer image for python:3.6.5-slim
 ---> 29ea9c0b39c6
Step 2/6 : WORKDIR /app
Removing intermediate container 627538eb0d39
 ---> 26360255c163
Step 3/6 : ADD . /app
 ---> 9658b91b29db
Step 4/6 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
 ---> Running in f0d0969f3066
Collecting bottle==0.12.13 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/bd/99/04dc59ced52a8261ee0f965a8968717a255ea84a36013e527944dbf3468c/bottle-0.12.13.tar.gz (70kB)
Building wheels for collected packages: bottle
  Running setup.py bdist_wheel for bottle: started
  Running setup.py bdist_wheel for bottle: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/76/a0/b4/2a3ee1a32d0506931e558530258de1cc04b628eff1b2f008e0
Successfully built bottle
Installing collected packages: bottle
Successfully installed bottle-0.12.13
Removing intermediate container f0d0969f3066
 ---> 0534575c8067
Step 5/6 : EXPOSE 80
 ---> Running in 14e49938d3be
Removing intermediate container 14e49938d3be
 ---> 05e087d2471d
Step 6/6 : CMD ["python", "app.py"]
 ---> Running in ca9738bfd06a
Removing intermediate container ca9738bfd06a
 ---> 9afb4f01e0d3
Successfully built 9afb4f01e0d3
Successfully tagged bottledock:latest

On peut aussi voir l'image avec le docker image ls commande. Essayez-le maintenant :

docker image ls

Le nom de notre tag doit apparaître dans la liste des images :

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
bottledock          latest              9afb4f01e0d3        About a minute ago   145MB

Notre image est prête à être chargée en tant que conteneur afin que nous puissions coder une application Web shortBottle à des fins de test, puis de développement ultérieur.

Codage d'une application Web de bouteille

Il est temps de coder une simple application Bottle de style "Hello, World!" pour tester l'exécution de code Python dans notre conteneur Docker. Dans le répertoire du projet actuel, créez un fichier nommé app.py avec le contenu suivant :

import bottle
from bottle import route, run


app = bottle.default_app()


@route('/')
def hello_world():
    return "Hello, world! (From Full Stack Python)"


if __name__ == "__main__":
    run(host="0.0.0.0", port=8080, debug=True, reloader=True)

Le code ci-dessus renvoie un simple "Hello, world!" message lorsqu'il est exécuté par le serveur de développement Bottle et contacté par un client.

Nous avons besoin d'un seul fichier de plus pour spécifier notre bottle dépendance. Créez un requirements.txt fichier dans le même répertoire que app.py :

bottle==0.12.13

Assurez-vous que le app.py et requirements.txt fichier sont enregistrés, nous pouvons essayer le code.

Exécuter le conteneur

Maintenant que nous avons notre image en main avec le code Python dans un fichier, nous pouvons exécuter l'image en tant que conteneur avec le docker run commande. Exécutez la commande suivante en veillant à remplacer le chemin absolu du volume par votre propre répertoire.

docker run -p 5000:8080 --volume=/Users/matt/devel/py/blog-code-examples/docker-bottle-macapp bottledock

Si vous recevez l'erreur python: can't open file 'app.py': [Errno 2] No such file or directory alors vous n'avez probablement pas changé /Users/matt/devel/py/bottledocker dans le répertoire où se trouvent vos fichiers de projet, en particulier app.py , sont situés.

Tout a fonctionné lorsque vous voyez une simple réponse HTTP basée sur du texte comme ce qui est montré ci-dessus dans la capture d'écran de mon navigateur Chrome.

Quelle est la prochaine ?

Nous venons d'installer Docker et d'écrire une application Web Bottle à exécuter dans un conteneur. Ce n'est que le début de la façon dont vous pouvez intégrer Docker dans votre flux de travail.

Ensuite, jetez un œil aux pages de déploiement de Bottle, Docker et pour plus de tutoriels.

Des questions? Faites-le moi savoir via un ticket GitHubissue sur le référentiel Full Stack Python, sur Twitter@fullstackpythonou @mattmakai.

Voyez-vous une faute de frappe, un problème de syntaxe ou simplement quelque chose qui prête à confusion dans cet article de blog ? La source de cette page sur GitHub et soumettre une demande d'extraction avec un correctif ou déposer un ticket de problème sur GitHub.