Kuidas luua tõhusaid Python Dockeri pilte

Kuidas luua tõhusaid Python Dockeri pilte
Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Docker on tööstusharu standardtarkvara rakenduste pakendamiseks ja konteinerites kasutamiseks. Dockeri pildid on nurgakivi, millele saate oma rakendusi luua ja käivitada.





Dockeri täieliku potentsiaali avamiseks peate oma pilte optimeerima ressursitõhususe, turvalisuse ja jõudluse tagamiseks. See tagab, et teie rakendused toimivad Dockeri ökosüsteemis sujuvalt.





Siit saate teada, kuidas seda teha reaalse näite abil, mis näitab Pythoni kalkulaatorirakenduse konteinerisse paigutamist.





tarkvara allalaadimise saidid tasuta täisversioon

Alustades minimaalsest põhipildist

Üks Dockeri pildi tõhusust mõjutavatest teguritest on põhipildi valik. Peaksite alustama minimaalse pildiga, mis sisaldab ainult teie rakenduse käitamiseks vajalikke olulisi komponente.

Kasutatav pilt peaks samuti pärinema usaldusväärsest allikast, mis pakub turvavärskendusi ja -paiku. Sellel peaks olema aktiivne kogukond ja hea dokumentatsioon. See on abiks probleemide tõrkeotsingul või abi otsimisel.



Kalkulaatori rakenduse jaoks valides python: 3.11-slim-bookworm , mis on minimaalne pilt, vähendab pildi suurust. See omakorda vähendab ressursikulu ning kiirendab piltide allalaadimist ja juurutamist.

# Starting With a Minimal Base Image 
FROM python:3.11-slim-bookworm AS builder

Sa saad kasutada veelgi väiksemat Alpine Linuxi kujutist , valides python:3.11-alpine. See pilt ei sisalda aga Pythoni interpretaatorit, paketihaldurit ega tavalisi Pythoni teeke.





Rakenduste käitamine mitte-juurkasutajatena

Dockeri konteinerite käitamine juurkasutajana võib kaasa tuua olulisi turvariske. Kui pahatahtlik toimija pääseb juurde administraatorina töötavale konteinerile, võib ta oma õiguste suurendamiseks ära kasutada konteineri tarkvara turvaauke. Seejärel saavad nad neid õigusi kasutada käskude täitmiseks, omades täielikku kontrolli hostsüsteemi üle.

Lahendus töötab teie rakendusi kui a mitte-juurkasutaja . Kalkulaatori näide loob ja konfigureerib kasutaja kalkulaator .





# Set non-root user for security 
RUN adduser calculator --system

# Add the user to the calculator group
RUN addgroup calculator && adduser calculator calculator

Rakenduse jaoks spetsiaalse kasutaja loomine piirab potentsiaalsetele ründajatele saadaolevaid õigusi. See muudab haavatavuste ärakasutamise keerulisemaks.

Vajalike failide kopeerimine ja virtuaalse keskkonna loomine

Dockeri konteineris virtuaalse keskkonna loomine isoleerib sõltuvused. See hoiab ära konfliktid kogu süsteemi hõlmavate pakettide ja muude rakendustega. See tagab ka versioonide ühilduvuse, kuna saate installida sõltuvuste täpsed versioonid, mida teie rakendus vajab, ilma ülejäänud süsteemi mõjutamata.

Kopeerige vajalikud failid konteinerisse. Seejärel looge Pythoni sisseehitatud rakenduse abil kalkulaatorirakendusele virtuaalne keskkond venv moodul.

# Set working directory and copy necessary files 
WORKDIR /app
COPY app.py .
COPY requirements.txt .
COPY config.json ./
# Copy config.json from the local directory

# Create a virtual environment and install dependencies
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"
RUN /venv/bin/pip install --upgrade pip --no-cache-dir --requirement requirements.txt

Virtuaalsed keskkonnad on kerged ja tõhusad, kuna need ei dubleeri kogu süsteemi hõlmavaid pakette. See aitab hoida Dockeri pildi suurust väiksemana ja vähendab konteineri töötamise ajal ressursikulu.

Kihtide minimeerimine tõhususe tagamiseks

Iga käsk Dockerfile'is loob tulemuseks olevas pildis uue kihi. Docker kasutab nende kihtide haldamiseks kopeerimis-kirjutamisel mehhanismi. Dockeri pildi kihtide arvu vähendamine parandab oluliselt pildi suurust ja koostamise jõudlust. Üks viis kihtide vähendamiseks on mitme käsu koondamine ühte JOOKSE juhendamine.

# Minimizing Layers for Efficiency 
# Combine commands to reduce the number of layers
RUN echo "Build process goes here" && \
   /venv/bin/python -m compileall . && \
   rm -rf __pycache__

Ülaltoodud käskude kombineerimine vähendab pildi koostamise protsessi käigus loodud vahekihtide arvu.

kui palju maksab wikipedia käitamine

Konfiguratsioonihalduse turvamine

Tundliku teabe käsitlemine Dockeri pildi sees kujutab endast turvariski. Turvalisuse suurendamiseks peaksite kasutama keskkonnamuutujaid ja väliseid konfiguratsioonifaile. Kalkulaatori rakenduse näites saate luua kataloogi nimega /config poodi teie konfiguratsioonifail ja määrake sobiv omandiõigus.

# Securing Configuration Handling 
RUN mkdir /config && chown calculator:calculator /config

Seejärel kopeerige config.json faili sellesse kataloogi, tagades, et see jääb rakenduse koodist eraldi.

# Copy the config.json file into the container 
RUN cp config.json /config/config.json
ENV CONFIG_PATH=/config/config.json

Konfiguratsiooniandmete eraldamine koodist ja sobivate õiguste rakendamine suurendab teie Dockeri pildi üldist turvalisust. See tagab, et ainult volitatud protsessidel või kasutajatel on juurdepääs kriitilistele konfiguratsiooniandmetele.

Mitmeastmeliste konstruktsioonide kasutamine

Mitmeastmelised järgud võimaldavad teil ehituskeskkonna lõplikust pildist eraldada. Selle tulemuseks on väiksemad ja fokusseeritumad tootmispildid. Samuti suurendab see turvalisust, jättes lõplikust pildist välja ehitusega seotud tööriistad ja failid. See vähendab rünnaku pinda ja minimeerib mittevajalike komponentidega seotud võimalikke turberiske.

# Leveraging Multi-Stage Builds 
FROM python:3.11-slim-bookworm

COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
COPY --from=builder /venv /venv
COPY --from=builder /config /config
COPY --from=builder /app /app
# Copy the application code

Ülaltoodud kood kopeerib ehitamise etapist ainult vajalikud artefaktid (ehitaja) lõplikule pildile. See vähendab pildi suurust, jättes välja ehitusega seotud tööriistad ja failid, mida pole kalkulaatorirakenduse käitamiseks vaja.

Turvalisuse suurendamine pildi skaneerimisega

Dockeri piltide turvalisuse suurendamiseks kasutage pildiskannimise tööriistu, nagu Trivy või Clair. Need tööriistad on loodud teie pildikihtide ja sõltuvuste haavatavuste tuvastamiseks. Kasutage kalkulaatorirakenduse jaoks Trivyt haavatavuse skannimine .

# Install Trivy for Debian/Ubuntu 
RUN apt-get update && \
   apt-get install -y wget apt-transport-https gnupg lsb-release && \
   wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | apt-key add - && \
   echo "deb https://aquasecurity.github.io/trivy-repo/deb bookworm main" \
   | tee -a /etc/apt/sources.list.d/trivy.list && \
   apt-get update && \
   apt-get install -y trivy

Trivy haavatavuse skannimise lisamine Dockeri pildile on ülioluline. Seda seetõttu, et see kasutab CVE (Common Vulnerabilities and Exposures) andmebaasi, mida värskendatakse regulaarselt teadaolevate haavatavuste teabega. See aitab teil hoida oma pilte ajakohasena uusimate turvapaikadega ja kaitsta oma rakendusi teadaolevate ärakasutamiste eest.

Pildi haavatavuse aruande saamiseks kasutage järgmist käsku.

docker run --rm ` 
 -v /var/run/docker.sock:/var/run/docker.sock `
 -v $HOME/Library/Caches:/root/.cache/ `
 aquasec/trivy:0.18.3 `
 <your image name>

Ülaltoodud käsu käivitamine võtab veidi aega. Kui see on lõppenud, loob see aruande, nagu allpool näidatud.

  Trivy haavatavuse aruanne terminalis

Mida suurem on raskusaste, seda kiiremini peaksite tuvastatud haavatavusega tegelema.

mida aitab ram mängudes?

Rakenduste käitamine mitte-juurkasutajatena

Turvalisuse suurendamiseks käivitage rakendus kui kalkulaator r kasutaja potentsiaalsete haavatavuste piiramiseks.

# Running Applications as Non-Root Users 
WORKDIR /app
USER calculator

# Activate the virtual environment and run the application
CMD ["/bin/bash", "-c", "source /venv/bin/activate && python app.py"]

Mitte-root-kasutajale lülitumine vähendab rünnaku pinda.

Mitte-Pythoni rakenduste konteinerisse paigutamine

Muude keelte toitega rakenduste dokkeri konteinerisse paigutamine on veidi erinev. Peaksite tutvuma erinevat tüüpi rakenduste konteineriseerimisega. See aitab teil otsustada, milline strateegia on teie rakenduses kasutatava keele tüübi järgi parim.