Cara menyesuaikan gambar Docker dengan Dockerfiles

Cara menyesuaikan gambar Docker dengan Dockerfiles

Artikel ini menunjukkan cara menyesuaikan imej Docker menggunakan fail penerangan yang dinamakan Dockerfile. Anda akan melihat bagaimana untuk memperluaskan imej yang ada, menyesuaikannya dengan keperluan anda, dan juga bagaimana untuk menerbitkan imej yang dihasilkan ke Hub Docker.

Dalam tutorial ini anda akan belajar:

  • Cara menyesuaikan gambar dengan fail docker.
  • Cara menerbitkan imej yang dihasilkan di Hub Docker.
HTTPS didayakan.

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Ubuntu 18.04 Bionic Beaver
Perisian Docker
Yang lain Akses istimewa ke sistem linux anda sebagai akar atau melalui sudo perintah.
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pengenalan



Artikel sebelumnya membentangkan konsep Docker dan beberapa arahan Docker asas. Dalam artikel ini, anda akan melihat cara menyesuaikan dan memperluaskan imej Docker yang sedia ada, menerangkan pengubahsuaian dalam fail docker, dan menerbitkan imej ke pendaftaran.

Dockerfile

Dalam artikel sebelumnya, anda telah membuat pengubahsuaian kepada bekas yang sedang berjalan dan melakukan perubahan pada cache imej tempatan. Walaupun ia merupakan sumber yang berguna untuk situasi tertentu, disyorkan bahawa penyesuaian dibuat dengan cara yang lebih didokumenkan, supaya imej itu dapat digunakan untuk tuan rumah lain. Cara yang disyorkan adalah menulis fail docker.

Dockerfile adalah fail yaml, yang merupakan fail teks dengan beberapa sintaks: hubungan dinyatakan menggunakan lekukan (ruang) dan setiap baris terdiri daripada pasangan kunci dan nilai.

Mari mulakan dengan fail docker mudah yang memasang pakej props (Mengandungi arahan htop dan ps) kepada gambar debian.

Buat direktori baru, masuk ke dalamnya, dan simpan fail di bawah dengan nama Dockerfile (modal d):

Dari Debian Run Apt-Get Update & \ Apt-Get -y Pasang Procps 
Salinan

Dockerfile ini menyatakan bahawa imej asas dinamakan Debian (Dari fasal). Sekiranya ia tidak wujud di dalam negara, ia akan dimuat turun dari Hub Docker. The Jalankan Perintah melaksanakan apt-get dua kali. Perhatikan penggunaan backslash (\) untuk memecahkan garis dan penggunaan -y untuk melangkau pengesahan pengesahan apt-get pemasangan.

Langkah seterusnya ialah membina gambar dengan Docker membina.



$ docker membina -t mydebian . Menghantar Konteks Membina ke Docker Daemon 2.041 F21A05A59966 Berjaya menandakan Mydebian: terkini 
Salinan

Bendera -t mydebian menamakan gambar baru. Titik (.) memberitahu Docker untuk menggunakan direktori semasa untuk mencari fail docker. Perhatikan bahawa lapisan baru dicipta dan dikeluarkan kerana garis fail docker ditafsirkan.

Mesti ada imej baru di cache tempatan.

$ Docker Images Repository Tag Image Id dicipta saiz mydebian terbaru F21A05A59966 8 minit yang lalu 119MB Debian terbaru BE2868Bebaba 7 minggu lalu 101MB 
Salinan

Bekas dari imej ini dapat dibuat.

$ docker run -it -nama mydebian_container mydebian root@ef9eb174874a:/# ps -ef uid pid ppid c stime tty time cmd root 1 0 0 02:43 pts/0 00:00:00 Bash root 9 1 0 02:43 pts/0 00:00:00 ps -ef 
Salinan

Mulai sekarang anda boleh membuat bekas yang menjalankan Debian dengan procps pakej, dan arahan htop dan ps akan dipasang.

Sekarang mari kita buat Dockerfile untuk mempunyai Apache dan PHP yang dipasang pada masa membina imej, untuk mencapai objektif yang sama dari artikel sebelumnya, ketika perintah dilaksanakan di dalam bekas.

Dari debian run apt-get update & \ apt-get -y memasang procps libapache2-mod-php cmd service apache2 start 
Salinan

Kami telah menambah libapache2-mod-php dalam baris 3 dan a Cmd perintah dalam baris 4 untuk memulakan Apache. Apabila bekas dimulakan, Cmd arahan dilaksanakan. Terdapat hanya satu Cmd perintah per dockerfile. Apabila Cmd arahan ditentukan, ia menggantikan Cmd Perintah gambar yang anda luangkan. Jika Cmd Perintah ditinggalkan, salah satu imej asas akan dilaksanakan (jika ada). Seperti yang anda mungkin fikirkan, fail docker dari imej asas debian mempunyai Cmd perintah untuk melaksanakan bash. Anda boleh menyemak ini di hab docker.



$ docker run -d -nama mydebian_container2 -d -p 8000: 80 -v "$ pwd":/var/www/html mydebian ad325685b738464c49bff40b65c682416 Nama Pelabuhan AD325685B738 Perkhidmatan Mydebian "/bin/Sh -c '..." 11 saat yang lalu sehingga 5 saat 0.0.0.0: 8000-> 80/TCP mydebian_container2 
Salinan

Kali ini kami memulakan bekas menggunakan -d beralih kerana kami mahu ia terpisah dari terminal.

Perintah Dockerfile penting

Dockerfile mempunyai arahan lain di luar Dari, Jalankan, dan Cmd.

Perintah Env digunakan untuk menetapkan pembolehubah persekitaran dalam imej, seperti http_proxy, sebagai contoh. Banyak imej menggunakan pembolehubah persekitaran untuk lulus parameter ke bekas baru. Sebagai contoh, periksa imej pangkalan data seperti MySQL dan PostgreSQL di Docker Hub.

Perintah SALINAN salin fail dan direktori dari tuan rumah ke imej pada masa binaan. Laluan sumber (hujah pertama) adalah relatif kepada direktori semasa.

Perintah TAMBAH sama dengan SALINAN, Dengan perbezaannya, jika sumbernya adalah fail tar yang dimampatkan, ia akan dikompresi secara automatik dalam direktori destinasi di dalam gambar. Kecuali penggunaan itu, Docker mengesyorkan penggunaan SALINAN perintah apabila mungkin.

Perintah Dedahkan Menunjukkan pelabuhan mana imej boleh didedahkan oleh Docker. Semasa penciptaan kontena, pelabuhan tersebut boleh dipetakan untuk menjadi tuan rumah port, jika dikehendaki.

Perintah Workdir menetapkan direktori yang akan digunakan oleh Docker apabila arahan dilaksanakan di dalam bekas dengan Docker Exec.

Membuat gambar dengan HTTPS diaktifkan

Sekarang kami akan melanjutkan imej PHP Apache rasmi untuk mengaktifkan SSL dengan sijil yang dihasilkan secara automatik untuk mengasingkan cara menggunakan arahan yang disebutkan. Dalam direktori baru Buat fail docker berikut.



Dari PHP: 7 -Apache Run OpenSSL Req -X509 -Nodes -Days 365 -Newkey RSA: 2048 -Keyout/etc/ssl/swasta/ssl -cert -snakeoil.kunci -out/etc/ssl/certs/ssl-cert-snakeoil.pem -subj "/c = br/st = rio grande do sul/l = porto alegre/o = keselamatan/ou = pembangunan/cn = contoh.com "Run A2enMod Rewrite Run A2ensite Default-SSL Run A2enMod SSL Expose 443 Copy ./html/var/www/html workdir/var/www/html 
Salinan

Dalam Baris 3 kami membuat sijil. Talian 5 - 7 Dayakan Mod_Rewrite dan SSL. Baris 9 mendedahkan port 443 (port 80 sudah didedahkan oleh imej hulu). Baris 11 menambah direktori aplikasi ke bekas. Akhirnya, Line 13 menetapkan direktori kerja sebagai direktori kerja Apache. Semua arahan dilaksanakan oleh Docker Exec akan menggunakan direktori ini sebagai asas secara lalai.

Sekarang, buat direktori bernama html dan fail yang dinamakan phpinfo.php dengan kandungan ini.

 
Salinan

Mari kita bina dan jalankan bekas.

Docker Build -t App_image . Docker Run -D - -RM -P 80:80 -P 443: 443 -Name App_Container App_image 
Salinan

Sekarang, anda boleh mengakses phpinfo.php Skrip melalui kedua -duanya, HTTP dan HTTPS.

http: // localhost/phpinfo.php https: // localhost/phpinfo.php 
Salinan HTTPS didayakan.

Di https penyemak imbas akan mengadu tentang keselamatan sijil kerana ini ditandatangani sendiri, tetapi amaran itu dapat diabaikan.

Menerbitkan gambar ke Hub Docker



Imej -imej yang dibuat hanya ada di dalam negara, di cache tempatan Docker. Anda mungkin ingin berkongsi dengan tuan rumah Docker yang lain, atau dengan rakan sepasukan, atau bahkan menjadikan mereka awam ke dunia. Walau apa pun, anda ingin menerbitkan gambar anda ke pendaftaran Docker. Mereka boleh diterbitkan ke pendaftaran berasaskan awan, seperti Hub Docker yang, dengan cara itu, adalah lalai jika anda tidak secara jelas menentukan pendaftaran. Pertama buat ID Docker percuma, kemudian log masuk:

$ Docker Login Login dengan ID Docker anda untuk menolak dan menarik imej dari Docker Hub. Sekiranya anda tidak mempunyai ID Docker, pergi ke https: // hub.Docker.com untuk mencipta satu. Nama Pengguna: Kata Laluan Infroger: Log masuk berjaya 
Salinan

Seterusnya, tandakan gambar dengan nama repositori (Infroger), Nama Imej dan Tag (Versi Imej).

$ docker tag App_image Infroger/App_image: 1 $ Docker Images Repository Tag Id Id dicipta Saiz Infroger/App_image 1 C093151FC68f 14 jam yang lalu 381MB App3_image terkini c093151fc68f 14 jam yang lalu 381MB 
Salinan

Kemudian tolak gambar ke repositori.

$ docker push infroger/app_image: 1 dorongan merujuk kepada repositori [docker.io/infroger/app_image] 27f7f2b01c49: Pushed 81b08cd5fe07: Pushed d1c23d198f84: Pushed e66392ad9b85: Pushed a71f63e3a00f: Pushed 9c58778f21dd: Pushed 973719bed9b7: Pushed 8f5090ef2ac0: Pushed fbdafdbe3319: Pushed a5c4801ecf39: Pushed e9ba112d38b9: Pushed 25ba5230dadf: Pushed f2907ce42b47: Pushed e31bf34cfab9: Pushed 9066d03e98e0: Ditolak 96DB4CE698AD: ditolak abae6a338e5c: ditolak 4572a80a7a5e: ditolak ef68f6734aa4: ditolak: Digest: sha256: 2e7e53fcdf800ad0c4837cd7cd70cd70cd70cd70cd70cd70 
Salinan

Sekarang pergi ke Hub Docker dan periksa gambar ada:



https: // hub.Docker.com/r/infroger/app_image 

Di Docker Hub dengan pendaftaran percuma, anda boleh mempunyai satu repositori swasta, dengan repositori awam yang tidak terhad. Jika tidak, anda mungkin mahu menjalankan pendaftaran Docker anda sendiri, yang boleh dilakukan dengan satu arahan:

Docker Run -D -P 5000: 5000 - -Restart = Sentiasa -Name Registry Registry: 2 

Kelebihan mempunyai pendaftaran swasta adalah privasi. Tetapi anda mempunyai beban untuk menguruskan keselamatan, ketersediaan tinggi, keperluan penyimpanan, kawalan akses, dan lain -lain.

Kesimpulan

Dalam artikel ini, kami telah meliputi cara memperluaskan imej sedia ada dan menyesuaikannya dengan keperluan anda menggunakan Dockerfile. Kami juga melihat cara menerbitkan imej ke pendaftaran docker. Anda boleh melakukan banyak perkara setakat ini, tetapi kami hanya menggaru dunia docker. Dalam artikel seterusnya, kita akan melihat bentuk orkestrasi kontena tempatan yang sangat mudah dengan Docker mengarang.

Lebih banyak dalam siri artikel Docker ini

  • Tangan Pengenalan kepada Bekas Docker
  • Cara Berinteraksi dengan Bekas Docker

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Perkara yang perlu dipasang di Ubuntu 22.04
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Cara Gunung ISO di Linux
  • Cara Dual Boot Kali Linux dan Windows 10
  • Ubuntu 20.04 Panduan