Docker'da ADD va COPY ko'rsatmalaridan foydalanish uchun eng yaxshi amaliyotlar qanday?
sobes.tech AI
AIdan javob
Docker'da ADD və COPY əmrləri üçün, şəkillərin təhlükəsizliyini, şəffaflığını və səmərəliliyini artırmağa yönəlmiş bir neçə ən yaxşı praktika mövcuddur.
ADD və COPY arasındakı əsas fərq:
COPYsadəcə olaraq, hostdakı göstərilən mənbədən konteynerdəki hədəfə faylları və qovluqları köçürür. Mənbə yerli fayl və ya qovluq olmalıdır.ADDdaha geniş imkanlara malikdir: yerli fayl və qovluqları köçürə bilər, arxivləri (tar, gzip, bzip2) çıxara və URL-dən fayllar yükləyə bilər.
Ən yaxşı praktika:
-
ADDyerinəCOPYistifadə edin: Əksər hallarda,COPYkifayət edir. Bu daha şəffafdır, çünki sadəcə yerli faylları köçürür. Arxivləri çıxarmaq və ya URL-dən yükləmək üçünADDistifadə etmək daha az proqnozlaşdırıla bilər və inşaatı çətinləşdirə bilər. -
Yerli fayllar üçün
COPYistifadə edin: Əgər inşaat kontekstindən imaga fayllar köçürməlisinizsə, həmişəCOPYistifadə edin.# `ADD` yerinə COPY . /app -
ADDiçindəki URL-lərə diqqət yetirin:ADDilə URL istifadə etmək, uzaq resurs əlçatan olmadıqda inşaatın stabilliyinə təsir edə bilər. Bundan əlavə, bu daha az təhlükəsiz ola bilər, çünki xarici mənbəyə bağlıdır. URL-dən resurs yükləmək üçüncurlvə yawgetistifadə etmək daha yaxşıdır və bu, daha çox nəzarət və yoxlama imkanı verir.# `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 -
ADDistifadə edərkən arxivləri ayrı bir qatmanda çıxarın: Əgər zəruri olsa,ADDilə arxiv çıxarmaq üçün istifadə edirsinizsə (daha az yaygın), bunu ayrı bir qatmanda edin. Ancaq, əvvəlki kimi, adətən,RUNilə açıq şəkildə çıxarmaq daha yaxşıdır. -
Yalnız lazım olan faylları köçürün: Bütün inşaat kontekstini (
COPY . /app) köçürməyin, əgər içində lazımsız fayllar (mənbə kodu, test məlumatları, gizli qovluqlar və s.) varsa. Bu faylları istisna etmək üçün.dockerignoreistifadə edin. Bu, imicin ölçüsünü azaldır və inşaatı sürətləndirir, çünki Docker demonuna ötürülən məlumatların miqdarını azaldır..dockerignorenümunəsi:.git node_modules *.log tmp/# `.dockerignore` tətbiq edildikdən sonra yalnız lazım olan faylları köçürün COPY . /app -
Hədəflər üçün mütləq yollar istifadə edin: Həmişə
/app,/usr/local/binvə s. kimi mütləq yollar göstərin. Bu, Dockerfile-i daha anlaşılan və proqnozlaşdırıla bilən edir, cari iş qovluğunun (WORKDIR) qeyri-müəyyənliyindən qaçınır.# Həmişə mütləq yollar göstərin COPY src /app/src -
Dəyişiklik tezliyinə görə sıralamayı dəyişin:
COPYvə yaADDəmrlərini, daha az dəyişən fayllar üçün (məsələn,package.json,requirements.txtkimi asılılıq faylları), Dockerfile-in yuxarısına yerləşdirin və daha çox dəyişən fayllar üçün (tətbiq mənbə kodu) aşağıya yerləşdirin. Bu, Docker-ın qatların keşi istifadə etməsini daha səmərəli edir.# Asılılıq faylları (daha az dəyişir) COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt # Tətbiq mənbə kodu (daha çox dəyişir) COPY . /app/
Qısa cədvəl:
| Əmr | Təsviri | Tövsiyə olunan istifadə | Nədən qaçınmaq lazımdır |
|---|---|---|---|
COPY |
Yerli fayl/dizinləri köçürür | Yerli fayl və dizinləri imaga köçürmək. | Arxivləri çıxarmaq və ya URL-dən yükləmək lazım olarsa istifadə etməyin. |
ADD |
Yerli fayl/dizinləri köçürür, arxivləri çıxarır, URL-dən yükləyir | Avtomatik arxiv çıxarma üçün istifadə olunur (nadirdir). | Yerli faylları köçürmək üçün istifadə etməyin (COPY üstünlükdür). URL-dən yükləmək üçün istifadə edin. |
Bu praktikalara riayət etmək, daha etibarlı, təhlükəsiz və səmərəli Docker imajlarının yaradılmasına kömək edir.