Bonnes pratiques personnelles pour placer un projet Python de lancement en ligne de commande dans un conteneur Docker

introduction

Si vous souhaitez exécuter régulièrement un projet Python de démarrage en ligne de commande ou le transformer en service et l'exécuter de manière stable dans divers environnements, vous avez toujours la possibilité de le transformer en Docker. Récemment, j'ai décidé comment le faire, alors je vais le partager. Cette fois, j'ai écrit ** système de démarrage en ligne de commande ** parce que je pensais que cela pourrait être un peu différent dans le cas du "système Web". Python est publié en tant que Docker car ** la version que vous souhaitez utiliser ** et ** la version incluse dans le système d'exploitation ** sont en conflit l'une avec l'autre, et l'installation de la bibliothèque est assez difficile (pip n'est pas très intelligent ...). Cela semble assez efficace à faire.

Demande personnelle

Version

Méthode

Configuration DIR

Effectuez la configuration suivante.

.
├── .dockerignore
├── .env
├── .gitignore
├── docker
│   └── data_lab
│       ├── Dockerfile
│       └── docker-compose.yml
├── keys
│   └── gcloud-secret.json
├── requirements.txt
├── ..others..
└── src
    ├── labs/__init__.py
    └── labs/awesomes/hogehoge.py

Chaque utilisation

Dockerfile

Chose importante

Dockerfile

Dockerfile


FROM python:3.5.2
MAINTAINER [email protected]

# Install GCloudSDK
WORKDIR /root
ENV CLOUDSDK_PYTHON=/usr/bin/python2
RUN curl -L -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-121.0.0-linux-x86.tar.gz \
 && tar xzf google-cloud-sdk-121.0.0-linux-x86.tar.gz \
 && ./google-cloud-sdk/install.sh --usage-reporting=true --path-update=true --bash-completion=true --rc-path=/root/.bashrc
ENV PATH=/root/google-cloud-sdk/bin:$PATH

# Install Libraries
RUN mkdir -p /var/lib/data_lab
WORKDIR /var/lib/data_lab
COPY ./requirements.txt ./
RUN pip install -r requirements.txt

# Copy Sources
COPY ./src/ ./src/

Supplément

docker-compose.yml

Chose importante

docker-compose.yml


version: '2'
services:
  data_lab:
    image: 9999999999.dkr.ecr.ap-northeast-1.amazonaws.com/data-lab
    build:
      context: ../..
      dockerfile: docker/data_lab/Dockerfile
    working_dir: /var/lib/data_lab
    volumes:
      - ../../.env:/var/lib/data_lab/.env
      - ../../keys/:/var/lib/data_lab/keys/
    environment:
      PYTHONPATH: /var/lib/data_lab/src

Lors de la création d'une image

Apparemment, dans la version actuelle de Docker (la version que j'utilise ici), il y a un bogue dans docker-compose build et ** ʻin .dockerignorene semble pas fonctionner (expérimenté). Vous pouvez l'éviter en utilisantdocker build` à la place. Référence: https://github.com/docker/docker-py/issues/1117

Donc, si vous voulez utiliser ** pour .dockerignore, Normalement

cd docker/data_lab
docker-compose build

Où vous pouvez le faire

cd docker/data_lab
docker build ../.. -f ./Dockerfile -t 9999999999.dkr.ecr.ap-northeast-1.amazonaws.com/data-lab

Vous devrez peut-être faire quelque chose comme ça (c'était une solution de contournement).

Quand courir

Par exemple, créez le script Shell auxiliaire suivant en tant que docker / data_lab / exec.sh.

exec.sh


#!/bin/sh

cd $(dirname $0)
exec docker-compose run data_lab $@

Vous pouvez maintenant exécuter la commande à l'intérieur du conteneur comme suit:

sh docker/data_lab/exec.sh python src/labs/awesomes/hogehoge.py arg1 arg2 ...

à la fin

Autrefois, je poussais vers git, je le clonais dans le conteneur, etc., donc c'était beaucoup plus facile. Il est nécessaire de recréer le conteneur chaque fois que le code source est mis à jour, mais comme la différence dans la couche du système de fichiers est petite, je pense qu'il n'y a pas beaucoup de gaspillage.

Addendum 1 (05/01/2017)

Immédiatement après la publication de cet article, on m'a fait remarquer que "je devrais utiliser le python officiel: 3.5.2 Docker Image?", Et je l'ai corrigé car il n'y avait aucun problème avec cela. Dans cette image officielle, python, python3, etc. sont Python3.5.2, et python2 est Python2.7.9.

Addendum 2 (05/01/2017)

Ajout de notes sur Build.

Recommended Posts

Bonnes pratiques personnelles pour placer un projet Python de lancement en ligne de commande dans un conteneur Docker
Modèle pour créer des applications de ligne de commande en Python
Meilleures pratiques personnelles pour l'environnement de développement Python basé sur VS Code
Meilleures pratiques pour la gestion dynamique des messages LINE Flex dans Django
Décomposer les arguments de commande en une seule ligne en Python
Comment recevoir des arguments de ligne de commande en Python
[Pour les débutants] Comment utiliser la commande say avec python!
Spécifiez une sous-commande comme argument de ligne de commande en Python
Une collection de lignes de commande qui utilisent des environnements virtuels avec Anaconda
Maintenance de l'environnement Python pour les projets
Autoriser l'installation des outils de ligne de commande en Python
Comment implémenter Python EXE pour Windows avec le conteneur Docker
Google recherche la chaîne sur la dernière ligne du fichier en Python