Docker COPY ve ADD Komutları
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/
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: