Und das geht mit den Agents genauso einfach.
root@FriendlyWrt:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b806374e5d5 portainer/agent:latest "./agent" 3 months ago Up 5 years 0.0.0.0:9001->9001/tcp, :::9001->9001/tcp portainer_agent 729d6ad08dbc linuxserver/dokuwiki:latest "/init" 3 months ago Up 5 years 443/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp DokuWiki root@FriendlyWrt:~# docker stop portainer_agent portainer_agent root@FriendlyWrt:~# docker rm portainer_agent portainer_agent root@FriendlyWrt:~# docker pull portainer/agent:latest latest: Pulling from portainer/agent 772227786281: Already exists 96fd13befc87: Already exists 0382ee122be2: Pull complete c58a787d67da: Pull complete f185cdc7d05a: Pull complete e6752ff0f773: Pull complete Digest: sha256:2c1abfac4937923e625be5f63a15f49a19cc4cca247c50f8746a9222023865a3 Status: Downloaded newer image for portainer/agent:latest docker.io/portainer/agent:latest root@FriendlyWrt:~# docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest 0aabe2273cd6cbf0874c9239d2efc58a848673dd9b13be2a6a26a084b6b9a63dPyPi - Pakete ein Sicherheitsproblem?
-
Beim Lesen diesen Beitrages bekomme ich ein ungutes Gefühl. Da man ja bei Python ständig externe Pakete importiert hier ein Beispiel
############################################### # Imports ############################################### import json import locale from pathlib import Path from functools import partial from dataclasses import dataclass from pywebio import start_server, config from pywebio.pin import put_input from pywebio.session import info as session_info from pywebio.output import put_text, \ put_table, \ use_scope, \ scroll_to, \ put_markdown, \ put_buttons, \ put_button, \ clear, \ put_info, \ put_error, \ put_html, \ put_tabs, \ toast, \ put_image, \ put_row, \ put_grid, \ put_loading from pywebio.input import input, \ input_group, \ NUMBER, \ PASSWORD, \ TEXT, \ URL, \ radio from pywebio_battery import popup_input import requests as requests # Requests for making network connections. from bs4 import BeautifulSoup # For extracting data from HTML and XML docs.
Das ist mein Import für ein kleines neues Tool, wo ich mein Portfolio mit anzeigen möchte. Ein wenig Spielerei, aber spannend und ich lerne wieder was dabei.
In diesem Artikel, stehen auch ein paar Pakete, die ich nutze
https://blog.phylum.io/phylum-discovers-revived-crypto-wallet-address-replacement-attackIch habe dann mal in der Gruppe PyDDF "Python Meeting Düsseldorf" nachgefragt, wie die Lage ist. Einer der Tipps war dann, VMs bzw. Docker zu benutzen, das ermöglicht ja eine gewisse Trennung vom Haupt-System.
Docker läuft sowieso, dann kann ich das ja mal ausprobieren. Nach vielem Rumprobieren habe ich jetzt aktuelle eine funktionierende Lösung.
Im Projekt gibt es ein dockerfile
FROM python:3.10 # Or any preferred Python version. ADD main.py . RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales RUN sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen && \ dpkg-reconfigure --frontend=noninteractive locales && \ update-locale LANG=de_DE.UTF-8 ENV LANG de_DE.UTF-8 RUN pip install requests beautifulsoup4 pywebio pywebio_battery matplotlib CMD python ./main.py # Or enter the name of your unique directory and parameter set.
Als nächstes brauchen wir mal folgendes
docker build -t python-imagename .
Danach dann starten mit
docker run -d --rm --publish 7070:7070 --name portfolio python-imagename:latest
Jetzt findet man die Anwendung wie gewohnt unter
http://192.168.3.xxx:7070
Die locales waren eine kleine Herausforderung, ich hoffe das passt jetzt so. Werde ich die Tage noch intensiver beobachten.
Damit das Ganze halbwegs praktikabel ist, habe ich mir ein kleines Script geschrieben.
#!/bin/bash ### BEGIN INIT INFO # Provides: scraping # Required-Start: # Required-Stop: # Should-Start: # Default-Start: # Default-Stop: # Short-Description: scraping # Description: scraping ### END INIT INFO case "$1" in stop) docker kill portfolio exit 0 ;; start) #!/bin/bash cd /home/frankm/PycharmProjects/scraping/ docker kill portfolio docker build -t python-portfolio . docker run -d --rm --publish 7070:7070 --name portfolio python-portfolio:latest exit 0 ;; *) echo "Usage: basename $0 {start | stop}" >&2 exit 64 ;; esac exit 0
Jetzt kann man nach einer Änderung am Code das Script schreiben. Der Docker Container wird gestoppt, falls er läuft. Danach wird das Image neu gebaut und dann gestartet.
Zum Stoppen
./scraping.sh stop
Zum Starten
./scraping.sh start
Das kann man aber, in meinen Augen, nur mit fertigen Anwendungen machen. Wenn man entwickelt, braucht man ständig die Ausgaben auf der Konsole. Das fehlt einem ja dann im Container. Bin gespannt wie sich das weiter entwickelt.
An die Docker Spezialisten draußen im Netz, wenn man das anders bzw. besser macht, bitte ich um einen Kommentar. Danke
-
-
Pycharm & Docker
Verschoben Linux -
-
-
-
-
-