Docker COPY ve ADD Komutları
4 min read

Docker COPY ve ADD Komutları

Docker COPY ve ADD komutları ile dosya ve dizinleri konteynerlara kopyalayabilirsiniz.
Docker COPY ve ADD Komutları
Photo by Bernd 📷 Dittrich / Unsplash

Docker COPY ve ADD komutları, Dockerfile içinde host ve konteyner arasında dosya ve dizin kopyalamayı mümkün kılan iki farklı anahtardır. Bu yazımızda bu iki komutun detaylarına bakacağız.

1. Docker COPY Komutu Nedir?

Docker COPY komutu, host sisteminden konteyner sistemine dosya veya dizinleri kopyalamak için kullanılır. Bu komut ile konteyner sisteminde kullanmak istediğiniz dosyaları veya dizinleri host sisteminden konteyner sistemine kopyalayabilirsiniz.

Örnek olarak, bir web uygulaması çalıştırmak için bir konteyner oluşturalım ve COPY komutu ile host sistemindeki /path/to/myapp dizinini konteyner sistemine /usr/src/myapp dizinine kopyalayalım:

FROM node:latest

COPY /path/to/myapp /usr/src/myapp

Bu Dockerfile'ı kullanarak konteyneri oluşturalım:

$ docker build -t my-app .

Bu konteyneri çalıştıralım

$ docker run -d -p 3000:3000 my-app

Bu komut, host sistemindeki /path/to/myapp dizinini konteyner sistemine /usr/src/myapp dizinine kopyalar ve konteyner arka planda çalışmaya devam eder.

Dosya veya dizinleri konteyner sisteminde farklı bir yere kopyalamak isteyebilirsiniz. Örneğin, host sistemindeki /path/to/config dosyasını konteyner sistemindeki /etc/myapp/config dizinine kopyalamak isteyebilirsiniz. Bu durumda, COPY komutunu şöyle kullanabilirsiniz:

COPY /path/to/config /etc/myapp/config

Bu komut, host sistemindeki /path/to/config dosyasını konteyner sistemindeki /etc/myapp/config dizinine kopyalar.

Bu örnekte gördüğünüz gibi COPY komutu, host sisteminden konteyner sistemine dosya veya dizinleri kopyalamak için kullanılır ve konteyner sisteminde kullanmak istediğiniz dosyaları veya dizinleri host sisteminden konteyner sistemine kopyalayabilirsiniz.

2. Docker ADD Komutu Nedir?

Docker ADD komutu, host sisteminden konteyner sistemine dosya veya dizinleri kopyalamak için kullanılır. Bu komut ile konteyner sisteminde kullanmak istediğiniz dosyaları veya dizinleri host sisteminden konteyner sistemine kopyalayabilirsiniz. Ayrıca, ADD komutu, COPY komutuna benzer şekilde çalışır ancak ek olarak arşiv dosyalarını otomatik olarak açabilir. Örneğin, .tar, .tar.gz, .tgz, .zip gibi arşiv dosyalarını otomatik olarak açabilir ve içindeki dosyaları konteyner sistemine kopyalayabilir. Üstelik kaynak olarak URL de kullanabilirsiniz.

ADD komutu bir kaynak ve bir hedef gerektirir.

ADD source destination
  • Kaynak bir dosya ise, basitçe hedef dizine kopyalanır.
  • Kaynak bir dizin ise içeriği hedefe kopyalanır ancak dizinin kendisi kopyalanmaz.
  • Kaynak bir tar veya bir URL (ayrıca) olabilir.
  • Kaynağın, docker build komutunun çalıştırıldığı dizinde olması gerekir.
  • Bir ADD komutunda birden çok kaynak kullanılabilir.

Örnek olarak, bir web uygulaması çalıştırmak için bir konteyner oluşturalım ve ADD komutu ile host sistemindeki /path/to/myapp.tar.gz arşiv dosyasını konteyner sistemine /usr/src/myapp dizinine kopyalayalım:

FROM node:latest

ADD /path/to/myapp.tar.gz /usr/src/myapp

Bu Dockerfile'ı kullanarak konteyneri oluşturalım:

$ docker build -t my-app .

Bu konteyneri çalıştıralım

$ docker run -d -p 3000:3000 my-app

Bu komut, host sistemindeki /path/to/myapp.tar.gz arşiv dosyasını konteyner sistemine /usr/src/myapp dizinine kopyalar ve arşiv dosyasını otomatik olarak açar ve içindeki dosyaları konteyner sistemine kopyalar ve konteyner arka planda çalışmaya devam eder.

Tek seferde birden fazla kaynak dosya da belirtebilirsiniz.

ADD codes/file1.cpp codes/file2.cpp root/test/
📍
Birden çok kaynak dosya veya dizin eklerken, hedef dizinin sonunda bir / bulunmalıdır.

Bir url'den dosya indirmek için ADD komutunu kullanabilirsiniz. Örnek olarak, bir web uygulaması çalıştırmak için bir konteyner oluşturalım ve ADD komutu ile https://example.com/myapp.tar.gz url'sinden arşiv dosyasını konteyner sistemine /usr/src/myapp dizinine kopyalayalım:

ADD https://example.com/myapp.tar.gz /usr/src/myapp

Bu komut, https://example.com/myapp.tar.gz url'sinden indirilen arşiv dosyasını konteyner sistemine /usr/src/myapp dizinine kopyalar ve arşiv dosyasını otomatik olarak açar ve içindeki dosyaları konteyner sistemine kopyalar ve konteyner arka planda çalışmaya devam eder.

Dosya veya dizinleri konteyner sisteminde farklı bir yere kopyalamak isteyebilirsiniz. Örneğin, host sistemindeki /path/to/config.zip arşiv dosyasını konteyner sistemindeki /etc/myapp/config dizinine kopyalamak isteyebilirsiniz. Bu durumda, ADD komutunu şöyle kullanabilirsiniz:

ADD /path/to/config.zip /etc/myapp/config

Bu komut, host sistemindeki /path/to/config.zip arşiv dosyasını konteyner sistemindeki /etc/myapp/config dizinine kopyalar ve arşiv dosyasını otomatik olarak açar ve içindeki dosyaları konteyner sistemine kopyalar.

3. Docker COPY ve ADD Komutlarının Farkı Nedir?

Docker COPY ve ADD komutları, host sisteminden konteyner sistemine dosya veya dizinleri kopyalamak için kullanılan iki farklı anahtardır.

COPY komutu sadece dosya veya dizinleri kopyalarken, ADD komutu .tar, .tar.gz, .tgz, .zip gibi arşiv dosyalarını otomatik olarak açabilir ve içindeki dosyaları konteyner sistemine kopyalayabilir. Ayrıca bir web kaynağındaki dosyayı da aynı şekilde  kaynak olarak kullanabilir.

Docker derslerine sıradaki yazı ile devam edebilirsiniz:

Docker WORKDIR Komutu
Workdir komutu ile belirtilen dizine kolaylıkla geçiş yapabilirsiniz.