Pomoc Pomoc w konteneryzacji i obsłudze prostego skryptu w Pythonie na TS-351

mikeman

Nowy użytkownik
Noobie
15 Grudzień 2020
6
0
1
38
QNAP
TS-x51
Ethernet
802.11n (Wi-Fi 4)
Drodzy,

tytułem wstępu - przepraszam za laicyzację takiego eksperckiego forum, ale potrzebuję pomocy osób, które praktycznie wiedzą jak konteneryzować skrypty w Pythonie używając do tego NASów QNAP (posiadam TS-351).

Sprawa wygląda tak, że wcale nie będąc programistą udało mi się napisać skrypt w pythonie, który co pewien czas wysyła zapytania do serwerów i zapisuje/odczytuje dane w plikach.

Skrypt korzysta z następujących bibliotek:
Kod:
import requests
import os
from bs4 import BeautifulSoup
import time
from datetime import datetime
import shutil
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import random

Doszedłem do punktu w którym skrypt (który ma być uruchomiony cały czas a także ma wyświetlać aktualny status wykonywanego zadania w konsoli, oprócz zapisu do plików) poprawnie działa mi na laptopie. Chciałbym go skonteneryzować na NASie.

Problem w tym, że jestem w tym kompletnym laikiem: rozumiem ideę kontenerów i mniej więcej jak one działają. Naczytałem się o dokerfilach i docker compose, ale nie umiem za bardzo tego zastosować dla swojego przypadku a w szczególności w Container Station. O ile walczyłem z Container Station i udało mi się stworzyć jakiś kontener na python:latest, udało mi się przekopiować skrypt na udział który był zamontowany w owym kontenerze, to poległem na instalacji bibliotek, bo restartowały cały kontener.

Chciałbym zapytać w jaki sposób najlepiej i najprościej zrobić, uruchamiać i zarządzać (konsola dla kontroli wykonywania skryptu) takim kontenerem. Obawiam się jednak, że potrzebowałbym instrukcji krok po kroku.

Jeśli znalazłby się ktoś, kto jest mi w stanie pomóc, byłbym niezwykle zobowiązany.
 
Paczki w Pythonie instalujesz poprzez "pip" lub "pip3" ( tu w zależności od wersji Pythona jaką masz zainstalowaną)

możesz ręcznie wszystkie instalować ręcznie lub wrzucić wszystko do pliku requirements.txt

Ja bym sprawdził jaką wersję masz pythona ewentualnie dodał do auto-startu "pip install -r requirements.txt" obrazu.

Ewentualnie zbuduj swój obraz python z skryptem i wymaganymi libkam staguj go i wypchnij do registry nasowego: ( możesz skorzystać z jednego darmowego slota oficjalnego Docker lub stworzyć cały projekt dockerfile w githubie i skorzystać z registry GitHub Packages: Your packages, at home with their code ewentualnie własny nexus) jeżeli to tylko jeden obraz wybrałbym opcję pierwszą.

Docker how to run pip requirements.txt only if there was a change?
 
Paczki w Pythonie instalujesz poprzez "pip" lub "pip3" ( tu w zależności od wersji Pythona jaką masz zainstalowaną)

możesz ręcznie wszystkie instalować ręcznie lub wrzucić wszystko do pliku requirements.txt

Ja bym sprawdził jaką wersję masz pythona ewentualnie dodał do auto-startu "pip install -r requirements.txt" obrazu.

Ewentualnie zbuduj swój obraz python z skryptem i wymaganymi libkam staguj go i wypchnij do registry nasowego: ( możesz skorzystać z jednego darmowego slota oficjalnego Docker lub stworzyć cały projekt dockerfile w githubie i skorzystać z registry GitHub Packages: Your packages, at home with their code ewentualnie własny nexus) jeżeli to tylko jeden obraz wybrałbym opcję pierwszą.

Docker how to run pip requirements.txt only if there was a change?
Dodanie bibliotek w normalnym środowisku jest proste - to komenda, jak piszesz. Problemem jest dla mnie zrobienie tego w dockerze, a może bardziej w Container Station, żeby to było jak najbardziej wygodne za każdym razem kiedy chce uruchomić/zatrzymać skrypt czy zaktualizować go.

Czy masz jakieś sprawdzone poradniki jak zbudować swój obraz, czy google musi starczyć? Jak już to zrobie, to mam po prostu stworzyć nowy kontener podając nazwę mojego obrazu przy tworzeniu w Container Section?

Qnap powinien mieć dostępnego pythona w sobie. Chyba Qpython paczka się nazywała. Może on wystarczy bez dokerów?
Dzięki, zaraz zobaczę co z tego wyjdzie.

@Damian Dobry pomysł trzeba doinstalować menadżera paczek: Installing pip on QNAP

* Trzeba pamiętać że jest się zależnym z wersją pythona od Qnapa.
I za to też - sprawdzę Qpythona i potem to.
 
Sprawdź jaką masz aktualną wersję python na laptopie znajdujesz odpowiedni obraz (Docker)

Generalnie to ten tutek Ci powinien wystarczyć: Educative Answers - Trusted Answers to Developer Questions

Reszta według tego (Docker how to run pip requirements.txt only if there was a change?) swój skrypt plus pliczek z zależnościami kopiujesz i budujesz swój obraz według fragmentarycznie ale tu jest cały dockerfile.

Twój projekt powinien zawierać 3 ewnetualnie 4 pliki

1) Dockerfile
2) python.py
3) requirements.txt
4) opcionalnie docker-compose.yml
 
  • Lubię to
Reakcje: SiewcaRyżu
Chciałem wszystkim podziękować - udało się!

Dla laików na przyszłość tylko napiszę co zrobiłem:
1. Przygotowałem sobie jakiś katalog na lapku w którym wrzuciłem swój skrypt *.py
2. Zainstalowałem i uruchomiłem w katalogu (za pośrednictwem powershell w WIN) nim komendę pipreqs, która automatycznie stworzyła mi plik requirements.txt
3. Stworzyłem prosty dockerfile w tym samym katalogu:
Kod:
FROM python:3
COPY requirements.txt /work/requirements.txt
RUN pip3 install --no-cache-dir -r requirements.txt
COPY [nazwaskryptu].py /work/[nazwaskryptu].py
CMD ["python", "[nazwaskryptu].py"]
4. Skopiowałem wszystko wyżej z katalogu lapka do katalogu utworzonego na NASie
5. Z WIN powershell podłączyłem się do ssh NASa (ssh admin@[adres_ip]) wpisując hasło.
6. z WIN Powershell: Przeszedłem do odpowiedniego katalogu na NAS cd /share/[nazwa katalogu do ktorego skopiowalem wszystko z katalogu z lapka]
7. Z WIN Powershell: uruchomiłem docker build [nazwa-obrazu-jaka-chce] .
8. Z WIN Powershell: uruchomiłem kontener z obrazu z parametrami które umożliwiają podgląd do konsoli wykonywanego skryptu: docker run -i -t [nazwa-zbudowanego-obrazu]
9. VOILA!

Działający konterer widoczny jest w Container Station.

Jeszcze raz dzięki wszystkim. Mam dużą satysfakcję, że się udałoo (choć dla wszystkich tutaj to pewnie podstawy ;)
 
  • Clapping Hands
Reakcje: 3Qn

Użytkownicy znaleźli tą stronę używając tych słów:

  1. container station