'COPY'- ja 'ADD'-komentojen erojen ymmärtäminen Docker-tiedostossa

Dockerfile

Dockerfile-komennot selitetty

Dockerfile-tiedoston COPY- ja ADD-komennot tuovat tiedostot säilösi tiedostojärjestelmään, mutta niissä on erilliset toiminnot ja parhaat käyttömahdollisuudet. Näiden erojen ymmärtäminen on välttämätöntä tehokkaan Dockerfile-hallinnan ja konttisovellustesi toimivuuden varmistamiseksi.

Vaikka "COPY"-komentoa käytetään ensisijaisesti yksinkertaiseen tiedostojen kopioimiseen, "ADD" tarjoaa lisäominaisuuksia, kuten etä-URL-osoitteiden käsittelyn ja pakattujen tiedostojen purkamisen. Tämä artikkeli tutkii kunkin komennon vivahteita ja opastaa sinua käyttämään toista toiseen Docker-koontiversioiden optimoimiseksi.

Komento Kuvaus
FROM Määrittää rakennettavan Docker-kuvan peruskuvan.
WORKDIR Asettaa työhakemiston säilön sisällä.
COPY Kopioi tiedostot tai hakemistot isännästä säilön tiedostojärjestelmään.
ADD Lisää tiedostoja, hakemistoja tai etä-URL-osoitteita säilön tiedostojärjestelmään ja pystyy käsittelemään tiedostojen purkamista.
RUN Suorittaa komennon säilön ympäristössä.
EXPOSE Ilmoittaa Dockerille, että säilö kuuntelee määritettyjä verkkoportteja suorituksen aikana.

Yksityiskohtainen selitys Dockerfile-komennoista

Ensimmäinen skripti osoittaa komento Docker-tiedostossa. The ohje on yksinkertainen, ja sitä käytetään tiedostojen tai hakemistojen kopioimiseen isäntäjärjestelmästä Docker-säilön tiedostojärjestelmään. Tässä esimerkissä skripti alkaa komento, joka määrittää peruskuvan muodossa python:3.8-slim-buster . The -komento määrittää säilön sisällä olevaksi työhakemistoksi . Tätä seuraa komento, joka kopioi isäntäkoneen nykyisen hakemiston sisällön palvelimeen /app hakemistosta säilössä. Kun tiedostot on kopioitu, -komentoa käytetään tarvittavien Python-pakettien asentamiseen, jotka on määritetty kohdassa tiedosto. Lopuksi, komento antaa portin 80 ulkomaailman saataville.

Sitä vastoin toinen kirjoitus korostaa komento Docker-tiedostossa. Kuten ensimmäinen kirjoitus, se alkaa -komento asettaaksesi peruskuvan ja komento määrittääksesi työhakemiston. Tärkein ero tässä on ADD -komento, jota käytetään tiedostojen lisäämiseen etä-URL-osoitteesta, tässä tapauksessa . The komento ei vain kopioi tiedostoja, vaan sillä on myös kyky purkaa automaattisesti pakattuja tiedostoja, kuten seuraava osoittaa komento, joka purkaa archive.tar.gz tiedosto tiedostoon hakemistosta. Tämän jälkeen, komento asentaa tarvittavat Python-paketit ja komento tekee portin 80 käytettävissä.

COPY:n käyttäminen Docker-tiedostossa

Esimerkki Docker-tiedostosta

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

ADD:n käyttö Docker-tiedostossa

Esimerkki Docker-tiedostosta

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Add files from a remote URL
ADD https://example.com/data/archive.tar.gz /app/

# Extract the archive file
RUN tar -xzf /app/archive.tar.gz -C /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

COPY:n ja ADD:n perusteellinen analyysi Dockerfilessa

Vaikka molemmat ja komennot palvelevat tiedostojen kopioimista isäntäjärjestelmästä säilön tiedostojärjestelmään, niillä on erilliset ominaisuudet ja käyttötapaukset, jotka tekevät niistä sopivia eri skenaarioissa. The komento on yksinkertaisempi ja ennakoitavampi. Sitä käytetään parhaiten tiedostojen peruskopiointiin, jossa ei tarvita lisäkäsittelyä, kuten arkistojen purkamista tai etätiedostojen hakemista. Tämä komento varmistaa, että vain paikalliset tiedostot ja hakemistot kopioidaan säilöön, mikä ylläpitää puhdasta ja suojattua rakennusympäristöä.

Toisaalta, komento tarjoaa enemmän toimintoja, mutta lisää monimutkaisuutta ja mahdollisia tietoturvariskejä. The komento voi käsitellä URL-latauksia ja purkaa automaattisesti pakattuja tiedostoja, kuten , .gzip, ja . Tästä voi olla hyötyä tapauksissa, joissa rakennusprosessi vaatii etäresursseja tai arkistoja, jotka on purettava kuvan luomisen aikana. Näihin lisäominaisuuksiin liittyy kuitenkin riskejä, kuten tiedostojen tahaton päällekirjoittaminen ja tietoturva-aukkoja, kun ne ladataan etäsijainneista. Siksi on erittäin tärkeää ottaa nämä tekijät huolellisesti huomioon, kun päätetään niiden välillä ja .

Yleisiä kysymyksiä ja vastauksia KOPIOISTA ja ADD:sta Dockerfilessa

  1. Mikä on ensisijainen käyttötarkoitus komento Docker-tiedostossa?
  2. The komentoa käytetään ensisijaisesti paikallisten tiedostojen ja hakemistojen kopioimiseen isäntäjärjestelmästä Docker-säilöön.
  3. Milloin kannattaa käyttää komento sen sijaan ?
  4. Sinun tulisi käyttää -komentoa, kun sinun on kopioitava tiedostoja URL-osoitteesta tai kun sinun on purettava pakattuja tiedostoja rakennusprosessin aikana.
  5. Mitä turvallisuusvaikutuksia käyttämällä komento?
  6. The komento voi aiheuttaa tietoturvariskejä, erityisesti ladattaessa tiedostoja etä-URL-osoitteista, koska se voi mahdollisesti korvata olemassa olevat tiedostot tai tuoda haavoittuvuuksia.
  7. Voiko komento purkaa pakatut tiedostot?
  8. Ei, komento ei pysty purkamaan pakattuja tiedostoja; se yksinkertaisesti kopioi ne sellaisina kuin ne ovat.
  9. Kuinka käsitellä pakattuja tiedostoja eri tavalla kuin ?
  10. The komento purkaa automaattisesti pakatut tiedostot, kuten , , ja .bzip2 kun ne lisätään säiliöön.
  11. Onko mahdollista käyttää yleismerkkejä kanssa komento?
  12. Kyllä, voit käyttää yleismerkkejä kanssa -komento kopioidaksesi useita tiedostoja tai hakemistoja, jotka vastaavat kuviota.
  13. Mitä tapahtuu, jos URL-osoite annetaan osoitteelle komento ei ole tavoitettavissa?
  14. Jos URL-osoite on annettu komento ei ole tavoitettavissa, Dockerin koontiprosessi epäonnistuu.
  15. Mitä komentoa tulisi käyttää yksinkertaiseen paikalliseen tiedostokopiointiin?
  16. Yksinkertaisiin paikallisiin tiedostojen kopiointitoimintoihin kannattaa käyttää komento, koska se on yksinkertaisempi ja turvallisempi.
  17. Voiko komentoa käytetään tiedostojen lisäämiseen sekä paikallisista että etälähteistä?
  18. Kyllä komento voi lisätä tiedostoja sekä paikallisista lähteistä että etä-URL-osoitteista, mikä tekee siitä monipuolisemman tietyissä skenaarioissa.

Ymmärtää, milloin käyttää ja Dockerfile-tiedostossa on välttämätön konttikoonnosten optimoimiseksi. Sillä aikaa on suoraviivainen ja turvallinen paikallisille tiedostoille, ADD tarjoaa lisäominaisuuksia lisän monimutkaisuuden ja mahdollisten turvallisuusongelmien kustannuksella. Oikean komennon valitseminen erityistarpeidesi perusteella voi parantaa Docker-kuviesi tehokkuutta ja turvallisuutta.