Rumah > Peranti teknologi > industri IT > Cara Membina Gambar Dengan Dockerfile

Cara Membina Gambar Dengan Dockerfile

Christopher Nolan
Lepaskan: 2025-02-18 12:36:13
asal
722 orang telah melayarinya

How to Build an Image with the Dockerfile

dari aplikasi bangunan, memasang kebergantungan dan perkhidmatan, untuk penempatan automatik, dan banyak lagi - semuanya bermula dengan Dockerfile. Mari kita semak sintaks Dockerfile, dari asas ke kerumitan, dan beberapa amalan terbaik ketika membina imej Docker.

Panduan ini akan menulis Dockerfile yang membimbing Docker untuk memilih Linux (imej asas) yang diminimumkan untuk aplikasi yang akan kami sampaikan, dan dilengkapi dengan toolset dan konfigurasi khusus kami untuk membina pengedaran Linux kami dengan berkesan, pengedaran ini betul -betul betul

Sesuai untuk menjalankan aplikasi kami.

mata utama How to Build an Image with the Dockerfile

Docker membolehkan pengguna untuk "membina, menyampaikan dan menjalankan sebarang aplikasi, tidak kira di mana ia berada" dengan membungkus aplikasi dengan semua binari yang diperlukan, perpustakaan runtime, alat backend, tweak sistem operasi dan perkhidmatan. dihantar segera dan dikerahkan secara automatik.

    DockerFile adalah fail teks biasa yang mengandungi arahan untuk membina imej di Docker, yang merupakan titik permulaan untuk membina aplikasi, memasang kebergantungan dan perkhidmatan, dan penempatan automatik. Sintaks Dockerfile adalah serupa dengan fail konfigurasi Apache, dan diproses satu arahan demi satu.
  • DockerFile mengarahkan Docker untuk memilih imej asas (mis., Minimized Linux) untuk aplikasi yang akan dihantar, dan dilengkapi dengan satu set alat yang dipilih dan konfigurasi khusus, dengan berkesan membuat pengedaran Linux tersuai yang sesuai untuk menjalankan aplikasi.
  • DockerFile membolehkan anda memilih dan memasang alat dan perpustakaan tertentu, menetapkan pembolehubah persekitaran, menambah fail dan direktori, mengendalikan masalah cache, dan banyak lagi untuk memastikan bahawa bekas mempunyai semua yang anda perlukan.
  • Perintah Docker Build digunakan untuk membina imej berdasarkan arahan di Dockerfile, sementara arahan Docker Run digunakan untuk memulakan terminal interaktif dengan imej yang dicipta.
  • mengapa memilih Docker

Dengan Docker anda boleh "membina, menyampaikan, dan menjalankan apa -apa permohonan, tidak kira di mana anda berada." Iaitu, anda boleh membungkus aplikasi anda dengan semua perpustakaan binari dan runtime, alat backend, penalaan sistem operasi dan juga perkhidmatan khusus yang diperlukan untuk aplikasi yang dijalankan - dan membolehkannya dihantar dan digunakan secara automatik.

Docker melaksanakan teknologi kontena perisian menjadikannya mungkin. Walaupun saya tidak akan pergi ke butiran di belakangnya di sini, anda boleh membaca lebih lanjut mengenai Docker, apa bekas perisian dan bagaimana mereka bekerja dalam memahami Docker, bekas, dan penghantaran perisian yang lebih selamat. How to Build an Image with the Dockerfile

Memasang Docker

Sebelum anda memulakan, anda perlu memasang Docker, sama ada pada mesin tempatan atau pada pelayan jauh.

Nasib baik, versi terkini Docker (versi 1.12 sebagai penulisan ini) menjadikan proses pemasangan sangat lancar, dan anda boleh mendapatkan panduan yang mudah dan mudah difahami untuk Windows, MacOS, dan Linux.

Dockerfile

Untuk membina imej di Docker, anda perlu menetapkan arahan untuk membina dan konteks dalam fail teks biasa yang dipanggil DockerFile (lebih banyak lagi kemudian). Fail ini mempunyai sintaks yang serupa dengan fail konfigurasi Apache -satu arahan setiap baris dan parameter yang sepadan, semua arahan diproses dalam urutan. Komen bermula dengan # aksara dan ruang. Akhirnya, sebaik sahaja anda mempunyai Dockerfile, pembentukan Docker Command akan membina imej, yang akan kami tutup dengan lebih terperinci kemudian.

Sebelum kita mula menulis Dockerfile, kita akan menubuhkan ruang kerja. Kami akan membuat direktori yang dipanggil my_image di direktori rumah, menggunakannya sebagai direktori kerja kami, dan meletakkan fail docker di dalamnya:

mkdir ~/my_build
cd ~/my_build
touch Dockerfile
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sekarang kita sudah bersedia untuk mula membina imej.

Pilih Basic Mirror

Apabila membuat imej, dalam kebanyakan kes anda akan menggunakan satu titik permulaan -i.e. Ini boleh menjadi Ubuntu, MySQL, WordPress, atau imej lain yang terdapat di Docker Hub. Anda juga boleh menggunakan imej yang anda buat sebelum ini.

NOTA : Anda boleh membuat imej asas anda sendiri menggunakan imej minimum Docker (dipanggil Scratch) yang mengandungi alat teras dan struktur direktori anda sendiri. Saya tidak akan meliputi proses ini di sini, tetapi anda boleh merujuk kepada panduan untuk membuat imej asas di laman web Docker.

Sebagai contoh, jika anda ingin memulakan dengan pengedaran Debian yang diminimumkan, anda akan menambah yang berikut ke Dockerfile anda:

# 设置基础镜像
FROM debian
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

dari mestilah arahan pertama yang anda gunakan semasa menulis fail docker. Ambil perhatian bahawa anda juga boleh menggunakan versi tertentu imej asas dengan menambahkan: dan versi_name pada akhir nama imej. Contohnya:

# 设置基础镜像
FROM debian:sid
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Dalam kod di atas, kami menggunakan "Sid" Debian (tidak stabil). Ini juga penting apabila anda memerlukan versi tertentu Ruby atau Python Interpreter, versi MySQL, dan lain -lain. Apabila anda menggunakan imej asas rasmi mana -mana alat ini. Pada masa ini, dalam panduan ini, kami akan berpegang pada imej Debian lalai (stabil).

Tentukan penyelenggara dan tambahkan metadata

Anda boleh memilih untuk menentukan siapa penyelenggara, menggantikan Lucero del Alba dengan nama atau orang atau pasukan yang bertanggungjawab untuk pembinaan:

# 作者
MAINTAINER Lucero del Alba
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Ini tidak diperlukan, tetapi kami juga boleh menambah beberapa metadata menggunakan arahan label, yang akan tersedia kemudian apabila memeriksa imej menggunakan perintah pemeriksaan Docker:

# 额外的元数据
LABEL version="1.0"
LABEL description="First image with Dockerfile."
Salin selepas log masuk
Salin selepas log masuk
Untuk maklumat lanjut mengenai ciri ini, lihat tag objek Docker.

Buat pengedaran anda sendiri

How to Build an Image with the Dockerfile Pada ketika ini, kami akan memilih beberapa alat dan perpustakaan untuk dimasukkan ke dalam cermin supaya bekas kami mempunyai segala yang kami perlukan untuk melakukan tindakan yang diharapkan. Pada akhir tutorial ini, kami akan melakukan pekerjaan yang sangat dekat dengan sebenarnya membina taburan Linux.

Beberapa bekas (seperti yang menjalankan pangkalan data PostgreSQL) direka untuk dijalankan di latar belakang. Walau bagaimanapun, kami sering memerlukan konsol untuk melakukan operasi tertentu pada bekas, jadi kami mungkin memerlukan beberapa alat tambahan kerana imej yang mendasari hanya akan membungkus alat GNU minimum.

Masalah Cache Penyelesaian Masalah

Anda pasti akan mempunyai masalah caching apabila cuba memasang pakej tambahan pada imej anda. Ini kerana imej yang mendasari telah cache metadata dan repositori masa nyata dari mana anda mengekstrak data dengan kerap.

Dalam pengedaran berasaskan debian, anda boleh menambah arahan berikut sebelum memasang pakej baru untuk mengendalikan ini:

mkdir ~/my_build
cd ~/my_build
touch Dockerfile
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Memasang Alat Asas

alat seperti editor kod, locale, git atau tmux - kini adalah masa untuk memasang semua yang anda perlukan selepas itu supaya mereka dibundel dalam imej.

kami akan memasang satu setiap baris:

# 设置基础镜像
FROM debian
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

kita boleh memasang semua ini dalam satu baris, tetapi jika kita mahu menambah atau mengeluarkan pakej kemudian, kita perlu mengubah keseluruhan proses. Jadi amalan terbaik di sini adalah untuk memasang satu pakej setiap baris supaya anda boleh mendapat manfaat daripada cache Docker.

Di samping itu, pastikan ia mudah. Anda tidak mahu memasang alat "hanya dalam kes" kerana ini boleh meningkatkan masa membina dan saiz imej.

Pasang perpustakaan runtime untuk aplikasi

kami juga akan menyampaikan permohonan kami dalam imej ini. Adakah anda memerlukan versi tertentu PHP, Ruby atau Python, dan beberapa modul? Sekarang adalah masa untuk menyampaikan semua program dan runtimes yang diperlukan untuk menyampaikan permohonan.

anda boleh menentukan seperti yang anda suka, kerana bekas ini direka untuk menjalankan aplikasi anda sahaja:

Dalam contoh ini, kami akan memasang Python 3 bersama -sama dengan PsyCOPG 2 (untuk menyambung ke pangkalan data PostgreSQL), modul misai Python, dan modul YAML. (Apabila anda membuat Dockerfile anda sendiri, anda secara semula jadi akan memasang kebergantungan khusus yang anda perlukan.)
# 设置基础镜像
FROM debian:sid
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pakej kompilasi dan muat turun

Pengedaran anda juga mungkin tidak mempunyai pakej untuk modul atau program tertentu yang anda perlukan. Tetapi anda tidak perlu memasangnya secara manual di dalam bekas yang sedang berjalan! Sebaliknya, anda boleh menggunakan arahan Run (satu setiap baris) untuk memuat turun, menyusun, dan menyediakan mana -mana perpustakaan yang anda perlukan untuk permohonan anda.

Anda juga boleh skrip fail ini pada fail yang berasingan, tambahkan fail ini ke membina dan menjalankannya, yang akan kita lihat dalam penyampaian bahagian permohonan anda sendiri.

Pembersihan

Untuk membuat cermin anda kemas dan sekecil mungkin, sebaiknya dibersihkan pada akhir urutan pemasangan

:

Juga, sila ambil perhatian bahawa kami menggunakan apt-get kerana kami memilih Debian, tetapi sila gunakan arahan yang sepadan untuk pengedaran imej asas.

# 作者
MAINTAINER Lucero del Alba
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
menghantar aplikasi anda sendiri

Tujuan untuk membina persekitaran ini adalah untuk membolehkan anda menyampaikan aplikasi anda dengan lancar dan bersiap sedia untuk dijalankan. Untuk menambah kandungan fail, direktori, dan juga URL jauh ke imej, kami akan menggunakan Arahan Tambah.

Walau bagaimanapun, sebelum menambah fail, kita perlu meletakkannya dalam konteks

yang sesuai. Untuk memudahkan operasi, kami meletakkan segala -galanya dalam direktori my_build yang disebutkan di atas, bersama dengan Dockerfile itu sendiri.

Dengan mengandaikan menggunakan aplikasi dan semua yang kami mahu masukkan ke dalam imej, kami mempunyai fail berikut dalam ~/my_build (di mana app.py dan lib.py berada dalam aplikasi subdirektori/):

mkdir ~/my_build
cd ~/my_build
touch Dockerfile
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kami menambah skrip .bashrc dan .profile ke direktori / root dalam bekas supaya mereka melaksanakan apabila kita memulakan shell pada bekas dan menyalin kandungan app / ke / app / direktori dalam bekas.

kami menambah arahan berikut:

# 设置基础镜像
FROM debian
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Tetapkan persekitaran anda

Akhirnya, kami akan menetapkan beberapa pembolehubah persekitaran yang diperlukan pada tahap sistem dan aplikasi.

Ramai di antara kamu menggunakan watak Debian lalai yang ditetapkan untuk melakukannya, tetapi kerana kita mensasarkan penonton antarabangsa, mari kita lihat bagaimana untuk memiliki terminal UTF-8. Kami memasang pakej tempatan sebelum ini, jadi sekarang yang perlu kita lakukan ialah menjana set aksara dan menubuhkan persekitaran Linux yang sesuai:

# 设置基础镜像
FROM debian:sid
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Anda juga mungkin perlu menetapkan beberapa pembolehubah persekitaran untuk aplikasi untuk menukar kata laluan dan laluan. DockerFile memberikan arahan env untuk melakukan ini dengan tepat:

# 作者
MAINTAINER Lucero del Alba
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Perhatikan bahawa anda juga boleh lulus pembolehubah persekitaran dari baris arahan apabila memulakan bekas, yang mungkin mudah untuk berkongsi beberapa maklumat sensitif (seperti kata laluan).

Dockerfile penuh

Sudah tentu, anda perlu menyesuaikan fail Docker seperti yang anda mahukan, tetapi semoga anda memahami kemungkinannya.

ini adalah fail lengkap:

# 额外的元数据
LABEL version="1.0"
LABEL description="First image with Dockerfile."
Salin selepas log masuk
Salin selepas log masuk

Bina cermin

Dari dalam direktori my_build, kami akan menggunakan perintah membina docker, lulus bendera -t untuk "tag" imej baru dengan nama, dalam hal ini my_image. .

# 更新源列表
RUN apt-get clean
RUN apt-get update
Salin selepas log masuk
Ini akan menghasilkan output panjang di mana setiap "langkah" adalah arahan dalam fail docker kami. Berikut adalah output yang dipenggal:

# 每行安装一个基本应用程序,以获得更好的缓存
RUN apt-get install -qy git
RUN apt-get install -qy locales
RUN apt-get install -qy nano
RUN apt-get install -qy tmux
RUN apt-get install -qy wget
Salin selepas log masuk
Senaraikan cermin

kita boleh menggunakan arahan imej Docker untuk menyenaraikan imej kami:

# 安装应用程序运行时和模块
RUN apt-get install -qy python3
RUN apt-get install -qy python3-psycopg2
RUN apt-get install -qy python3-pystache
RUN apt-get install -qy python3-yaml
Salin selepas log masuk
ini akan mengeluarkan imej my_image yang baru dan lain -lain yang kami muat turun:

# 清理
RUN apt-get -qy autoremove
Salin selepas log masuk
... itu, cermin kami bersedia untuk dihantar dan dijalankan!

Mulakan bekas

Akhirnya, untuk memulakan terminal interaktif kami yang baru diwujudkan, kami akan menggunakan arahan Docker Run:

<code>.bashrc
.profile
app/app.py
app/lib.py
Dockerfile</code>
Salin selepas log masuk
Langkah seterusnya

Saya tidak memperkenalkan semua kemungkinan Dockerfile. Khususnya, saya tidak mengkaji bagaimana mendedahkan pelabuhan supaya anda boleh menjalankan perkhidmatan dan juga menghubungkan bekas di antara mereka; dan ciri -ciri berguna yang lain.

kami akan memperkenalkannya dalam artikel masa depan. Pada masa ini, anda mungkin ingin menyemak sumber -sumber berikut.

dari laman web Docker:

    Rujukan Dockerfile
  • amalan terbaik untuk menulis dockerfile
dari SitePoint:

  • Memahami Docker, bekas dan penghantaran perisian yang lebih selamat
  • Docker Sub-Channel
  • Semua artikel berkaitan Docker

Soalan Lazim mengenai Cara Membina Imej Menggunakan Dockerfile

Apakah kepentingan membina imej Docker menggunakan Dockerfile?

DockerFile adalah dokumen teks yang mengandungi semua arahan yang boleh dipanggil pengguna pada baris arahan untuk memasang imej. Menggunakan DockerFile memudahkan proses membina imej dalam Docker. Ia membolehkan anda mengautomasikan proses itu, menjadikannya lebih efisien dan kurang terdedah kepada kesilapan. DockerFile juga menyediakan dokumentasi yang jelas dan versi tentang cara membina imej, yang memudahkan pemaju lain untuk memahami kerja dan menggunakan atau mengubah suai anda.

Bagaimana untuk mengoptimumkan proses binaan menggunakan Dockerfile?

Dockerfile menyediakan pelbagai cara untuk mengoptimumkan proses membina. Salah satu cara yang paling berkesan ialah menggunakan binaan pelbagai peringkat. Ini membolehkan anda menggunakan pelbagai dari pernyataan di Dockerfile anda. Setiap dari arahan boleh menggunakan asas yang berbeza, dan setiap arahan memulakan tahap pembinaan baru. Anda boleh menyalin artifak secara pilihan dari satu tahap ke tahap yang lain, meninggalkan semua yang anda tidak mahu muncul dalam imej akhir.

Apakah amalan terbaik untuk menulis dockerfiles?

Terdapat beberapa amalan terbaik untuk menulis dockerfiles. Pertama, anda harus mengelakkan memasang pakej yang tidak perlu untuk memastikan saiz cermin kecil. Kedua, gunakan pelbagai peringkat membina untuk mengoptimumkan proses membina. Ketiga, setiap Dockerfile harus mewakili satu aplikasi. Jika anda mempunyai pelbagai aplikasi, anda harus menggunakan pelbagai dockerfiles. Akhirnya, anda harus menggunakan fail .dockerignore untuk mengecualikan fail dan direktori yang tidak boleh dimasukkan ke dalam imej.

bagaimana debug dockerfile?

Dockerfile boleh didebitkan dengan membina imej dan menjalankannya dengan perintah shell. Jika binaan gagal, Docker mengembalikan mesej ralat yang dapat membantu anda mengenal pasti masalah. Anda juga boleh menggunakan arahan Run untuk melaksanakan arahan yang akan membantu anda debug dockerfile anda.

Bolehkah saya menggunakan pembolehubah persekitaran dalam dockerfile?

Ya, anda boleh menggunakan pembolehubah persekitaran dalam fail docker anda. Arahan ENV menetapkan pembolehubah persekitaran kepada nilai ini. Nilai ini akan berada dalam persekitaran semua arahan berikutnya dalam fasa binaan dan juga boleh diganti dalam talian dalam banyak arahan.

bagaimana untuk menyalin fail dari hos ke imej docker?

Anda boleh menggunakan Arahan Salinan untuk menyalin fail baru dari hos ke imej Docker. Salin fail dari sumber pada tuan rumah ke destinasi dalam imej Docker.

Bagaimana untuk mendedahkan port dalam imej docker?

Anda boleh menggunakan Arahan Dedahkan untuk memberitahu Container Docker untuk mendengar port rangkaian yang ditentukan semasa runtime. Walau bagaimanapun, ini sebenarnya tidak menerbitkan pelabuhan. Untuk menerbitkan port, anda perlu menggunakan bendera -p pada arahan Docker Run.

Bagaimana untuk menyediakan direktori kerja dalam imej docker?

Anda boleh menggunakan Arahan WorkDir untuk menetapkan direktori kerja untuk mana -mana larian berikutnya, CMD, entrypoint, salinan, dan menambah arahan dalam DockerFile.

Bagaimana untuk menjalankan arahan dalam imej Docker?

Anda boleh menggunakan arahan Run untuk menjalankan arahan dalam imej Docker. Ini akan melaksanakan sebarang arahan pada lapisan baru di atas imej semasa dan menyerahkan hasilnya.

Bagaimana untuk menentukan arahan lalai untuk imej docker?

Anda boleh menggunakan Arahan CMD untuk memberikan nilai lalai untuk bekas pelaksanaan. Ini termasuk fail yang boleh dilaksanakan, atau fail yang boleh dieksekusi boleh ditinggalkan, dalam hal ini anda mesti menentukan Arahan EntryPoint.

Output yang disemak semula ini mengekalkan pemformatan imej asal dan mengelakkan perubahan ketara kepada makna artikel semasa menyusun semula ayat dan perenggan untuk keaslian.

Atas ialah kandungan terperinci Cara Membina Gambar Dengan Dockerfile. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan