Kādas ir labākās prakses, izmantojot instrukcijas ADD un COPY Docker?
sobes.tech AI
Atbilde no AI
Ir vairākas labākās prakses, kas saistītas ar ADD un COPY instrukcijām Docker, kas vērstas uz drošības, skaidrības un būvniecības efektivitātes uzlabošanu:
Galvenā atšķirība starp ADD un COPY:
COPYvienkārši nokopē failus un direktorijas no norādītā avota uz konteinerā norādīto mērķi. Avotam jābūt vietējam failam vai direktorijai.ADDir plašākas iespējas: tā var kopēt vietējos failus un direktorijas, kā arī izvilkt arhīvus (tar, gzip, bzip2) un saņemt failus no URL.
Labākās prakses:
-
Izvēlieties
COPYpārADD: lielākajā daļā gadījumu pietiek arCOPY. Tas ir skaidrāks, jo vienkārši kopē vietējos failus.ADDizmantošana arhīvu izvilkšanai vai lejupielādei no URL var būt mazāk paredzama un palielina būvniecības sarežģītību. -
Izmantojiet
COPYvietējiem failiem: ja jums jākopē faili no būvniecības konteksta uz attēlu, vienmēr izmantojietCOPY.# Tā vietā, lai izmantotu `ADD . /app` COPY . /app -
Esiet uzmanīgs ar URL
ADD:ADDar URL izmantošana var novest pie nestabilitātes būvniecībā, ja attālais resurss nav pieejams. Tas arī var būt mazāk droši, jo jūs esat atkarīgs no ārēja avota. Ieteicams izmantotcurlvaiwgetatsevišķā slānī (RUN) failu lejupielādei no URL, kas sniedz lielāku kontroli un ļauj veikt pārbaudi ar kontrolsummu.# Tā vietā, lai izmantotu `ADD http://example.com/file.tar.gz /tmp/` RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* \ && curl -fsSL http://example.com/file.tar.gz -o /tmp/file.tar.gz \ && tar -xzf /tmp/file.tar.gz -C /app \ && rm /tmp/file.tar.gz -
Izvilkiet arhīvus atsevišķā slānī, izmantojot
ADD: ja jums ir jā izmantoADDarhīva izvilkšanai (mazāk izplatīts scenārijs), pārliecinieties, ka to darāt atsevišķā slānī. Tomēr, kā minēts iepriekš, biežāk ir labāk izmantotRUNar izvilkšanas komandu. -
Kopējiet tikai nepieciešamos failus: nekopējiet visu būvniecības kontekstu (
COPY . /app), ja tajā ir nevajadzīgi faili (kods, testu dati, slēptas direktorijas utt.). Izmantojiet.dockerignore, lai izslēgtu šos failus. Tas samazina attēla izmēru un paātrina būvniecību, samazinot datu apjomu, kas tiek pārsūtīts Docker demonam.Piemērs
.dockerignore:.git node_modules *.log tmp/# Kopējiet tikai nepieciešamos failus pēc `.dockerignore` piemērošanas COPY . /app -
Izmantojiet absolūtos ceļus mērķa norādīšanai: vienmēr norādiet absolūto ceļu uz mērķi attēlā (/app, /usr/local/bin utt.). Tas padara Dockerfile skaidrāku un paredzamu, izvairoties no nenoteiktības par pašreizējo darba direktoriju (
WORKDIR).# Vienmēr norādiet absolūto ceļu COPY src /app/src -
Mainiet kārtību atkarībā no biežuma izmaiņām: novietojiet
COPYvaiADDinstrukcijas failiem, kas mainās retāk (piemēram, atkarību faili kāpackage.json,requirements.txt), augstāk Dockerfile, nekā failiem, kas mainās biežāk (programmas kods). Tas ļauj Docker efektīvi izmantot kešatmiņu.# Atkarību faili (mainās retāk) COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt # Programmas kods (mainās biežāk) COPY . /app/
Kopsavilkuma tabula:
| Instrukcija | Apraksts | Ieteicamā lietošana | No kā izvairīties |
|---|---|---|---|
COPY |
Kopē vietējos failus/direktorijas | Kopēt vietējos failus un direktorijas uz attēlu. | Ja nepieciešama arhīvu izvilkšana vai lejupielāde no URL, nelietojiet. |
ADD |
Kopē vietējos failus/direktorijas, izvelk arhīvus, lejupielādē no URL | Lietot arhīvu automātiskai izvilkšanai (retāk). | Lietot tikai COPY. Lietot URL lejupielādei. |
Šo praksi ievērošana ļauj izveidot drošākus, uzticamākus un efektīvākus Docker attēlus.