GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menyalin file dari dockerfile ke host?

Ini sekarang dimungkinkan sejak Docker 19.03.0 pada Juli 2019 memperkenalkan "output build kustom". Lihat dokumen resmi tentang keluaran build khusus.

Untuk mengaktifkan keluaran build khusus dari image build ke host selama proses build, Anda perlu mengaktifkan BuildKit yang merupakan cara baru yang kompatibel dengan mesin untuk melakukan fase pembuatan. Lihat dokumen resmi untuk mengaktifkan BuildKit.

Hal ini dapat dilakukan dengan 2 cara:

  1. Atur variabel lingkungan DOCKER_BUILDKIT=1 , atau
  2. Atur di mesin buruh pelabuhan secara default dengan menambahkan "features": { "buildkit": true } ke root config json.

Dari dokumen resmi tentang keluaran build khusus:

pengekspor khusus memungkinkan Anda mengekspor artefak pembangunan sebagai file di sistem file lokal alih-alih gambar Docker, yang dapat berguna untuk membuat binari lokal, pembuatan kode, dll.

...

Eksportir lokal menulis file build yang dihasilkan ke direktori di sisi klien. Pengekspor tar mirip tetapi menulis file sebagai tarball tunggal (.tar).

Jika tidak ada jenis yang ditentukan, nilai default ke direktori keluaran pengekspor lokal.

...

Opsi --output mengekspor semua file dari tahap target. Pola umum untuk mengekspor hanya file tertentu adalah melakukan build multi-tahap dan menyalin file yang diinginkan ke tahap awal baru dengan COPY --from.

misalnya contoh Dockerfile

FROM alpine:latest AS stage1
WORKDIR /app
RUN echo "hello world" > output.txt

FROM scratch AS export-stage
COPY --from=stage1 /app/output.txt .

Berlari

DOCKER_BUILDKIT=1 docker build --file Dockerfile --output out .

Ujung keluarannya adalah:

 => [export-stage 1/1] COPY --from=stage1 /app/output.txt .
0.0s
 => exporting to client
0.1s
 => => copying files 45B
0.1s

Ini menghasilkan file lokal out/output.txt yang dibuat oleh RUN perintah.

$ cat out/output.txt
hello world

Semua file dihasilkan dari tahap target

--output opsi akan mengekspor semua file dari tahap target. Jadi gunakan tahap non-gores dengan COPY --from akan menyebabkan file asing disalin ke output. Rekomendasinya adalah menggunakan tahapan awal dengan COPY --from .


Menyalin file "dari Dockerfile" ke host tidak didukung. Dockerfile hanyalah resep yang menentukan cara membuat image.

Saat Anda membangun, Anda memiliki kesempatan untuk menyalin file dari host ke image yang sedang Anda bangun (dengan kode COPY direktif atau ADD )

Anda juga dapat menyalin file dari wadah (gambar yang telah docker run 'd) ke host dengan docker cp (sebenarnya, cp juga dapat menyalin dari host ke container)

Jika Anda ingin kembali ke host Anda beberapa file yang mungkin dihasilkan selama proses build (seperti misalnya memanggil skrip yang menghasilkan ssl), Anda dapat menjalankan container, memasang folder dari host Anda, dan menjalankan perintah cp.

Lihat misalnya skrip getcrt ini.

docker run -u root --entrypoint=/bin/sh --rm -i -v ${HOME}/b2d/apache:/apache apache << COMMANDS
pwd
cp crt /apache
cp key /apache
echo Changing owner from \$(id -u):\$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /apache/crt
chown -R $(id -u):$(id -u) /apache/key
COMMANDS

Semuanya antara COMMANDS adalah perintah yang dijalankan pada wadah, termasuk cp yang menyalin di host ${HOME}/b2d/apache folder, dipasang di dalam wadah sebagai /apache dengan -v ${HOME}/b2d/apache:/apache .

Itu berarti setiap kali Anda menyalin apa pun di /apache dalam wadah, Anda sebenarnya menyalin di ${HOME}/b2d/apache pada tuan rumah!


Meskipun tidak didukung secara langsung melalui Dockerfile fungsi, Anda dapat menyalin file dari gambar buruh pelabuhan yang dibuat.

containerId=$(docker create example:latest)
docker cp "$containerId":/source/path /destination/path
docker rm "$containerId"

Linux
  1. Pelajari cara menyalin file dan folder dari/ke server lain

  2. Bagaimana cara menyalin 10 file terbaru teratas dari satu direktori ke direktori lain?

  3. Cara menyalin banyak file secara bersamaan menggunakan scp

  1. Bagaimana saya bisa menyalin file dari Google Cloud Compute Server ke mesin lokal saya

  2. Bagaimana mencegah proses dari menulis file

  3. Bagaimana cara menghapus karakter yang tidak valid dari nama file?

  1. Cara Menemukan dan Menyalin Jenis File Tertentu Dari Satu Direktori Ke Direktori Lain Di Linux

  2. Bagaimana Cara Menyalin File Dari Anggur Ke Desktop?

  3. Bagaimana Cara Menyalin File Secara Rekursif Dengan Ekstensi File??