Persönliche Best Practice zum Einfügen eines Python-Projekts zum Starten einer Befehlszeile in einen Docker-Container

Einführung

Wenn Sie ein Python-Projekt zum Starten einer Befehlszeile regelmäßig ausführen oder in einen Dienst umwandeln möchten, damit es in verschiedenen Umgebungen stabil ausgeführt werden kann, haben Sie weiterhin die Möglichkeit, es in einen Docker umzuwandeln. Vor kurzem habe ich beschlossen, wie es geht, also werde ich es teilen. Dieses Mal habe ich ** Befehlszeilen-Startsystem ** geschrieben, weil ich dachte, dass es im Fall von "Web-System" etwas anders sein könnte. Python wird als Docker veröffentlicht, da ** die Version, die Sie verwenden möchten ** und ** die im Betriebssystem enthaltene Version ** in Konflikt miteinander stehen und die Installation der Bibliothek ziemlich schwierig ist (pip ist nicht sehr intelligent ...). Scheint ziemlich effektiv zu sein.

Persönliche Anfrage

Version

Methode

DIR-Konfiguration

Nehmen Sie die folgende Konfiguration vor.

.
├── .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

Jede Verwendung

Dockerfile

Wichtige Sache

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/

Ergänzung

docker-compose.yml

Wichtige Sache

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

Beim Erstellen eines Bildes

Anscheinend hat die aktuelle Version von Docker (die Version, die ich hier verwende) einen Fehler in "Docker-Compose Build" und "**" in ".dockerignore" scheint nicht zu funktionieren (erfahren). Sie können dies vermeiden, indem Sie stattdessen "Docker Build" verwenden. Referenz: https://github.com/docker/docker-py/issues/1117

Wenn Sie also "**" für ".dockerignore" verwenden möchten, Normalerweise

cd docker/data_lab
docker-compose build

Wo du es machen kannst

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

Möglicherweise müssen Sie so etwas tun (dies war eine Problemumgehung).

Wann laufen?

Erstellen Sie beispielsweise das folgende zusätzliche Shell-Skript als "docker / data_lab / exec.sh".

exec.sh


#!/bin/sh

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

Jetzt können Sie den Befehl im Container wie folgt ausführen:

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

schließlich

Früher habe ich auf git gedrückt, es in den Container geklont und so weiter, so dass es viel einfacher wurde. Es ist notwendig, den Container jedes Mal neu zu erstellen, wenn der Quellcode aktualisiert wird, aber da der Unterschied in der Dateisystemschicht gering ist, denke ich, dass es nicht viel Abfall gibt.

Nachtrag 1 (05.01.2017)

Unmittelbar nach der Veröffentlichung dieses Artikels wurde ich darauf hingewiesen, dass "ich das offizielle Python verwenden sollte: 3.5.2 Docker Image?", Und ich habe es behoben, weil es kein Problem damit gab. In diesem offiziellen Bild sind "Python", "Python3" usw. Python3.5.2 und "Python2" ist Python2.7.9.

Nachtrag 2 (05.01.2017)

Hinweise zu Build hinzugefügt.

Recommended Posts

Persönliche Best Practice zum Einfügen eines Python-Projekts zum Starten einer Befehlszeile in einen Docker-Container
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
Persönliche Best Practices für die Python-Entwicklungsumgebung mit VS-Code
Best Practices für die dynamische Verarbeitung von LINE Flex-Nachrichten in Django
Zerlegen Sie Befehlsargumente in einer Zeile in Python
So empfangen Sie Befehlszeilenargumente in Python
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Geben Sie in Python einen Unterbefehl als Befehlszeilenargument an
Eine Sammlung von Befehlszeilen, die virtuelle Umgebungen mit Anaconda verwenden
Wartung der Python-Umgebung für Projekte
Ermöglichen Sie die Installation von in Python erstellten Befehlszeilentools
So implementieren Sie Python EXE für Windows mit Docker-Container
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei