Cara Menyesuaikan Gambar Docker Dengan DockerFiles

Cara Menyesuaikan Gambar Docker Dengan DockerFiles

Artikel ini menunjukkan cara menyesuaikan gambar Docker menggunakan file deskripsi bernama Dockerfile. Anda akan melihat cara memperluas gambar yang ada, menyesuaikannya dengan kebutuhan Anda, dan juga cara menerbitkan gambar yang dihasilkan ke hub Docker.

Dalam tutorial ini Anda akan belajar:

  • Cara menyesuaikan gambar dengan dockerfile.
  • Cara menerbitkan gambar yang dihasilkan di hub Docker.
HTTPS diaktifkan.

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Ubuntu 18.04 Bionic Beaver
Perangkat lunak Buruh pelabuhan
Lainnya Akses istimewa ke sistem Linux Anda sebagai root atau melalui sudo memerintah.
Konvensi # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Perkenalan



Artikel sebelumnya menyajikan konsep Docker dan beberapa perintah Docker dasar. Di artikel ini, Anda akan melihat cara menyesuaikan dan memperluas gambar Docker yang ada, menggambarkan modifikasi dalam DockerFile, dan menerbitkan gambar ke registri.

Dockerfile

Di artikel sebelumnya, Anda telah membuat modifikasi pada wadah yang berjalan dan melakukan perubahan pada cache gambar lokal. Meskipun ini merupakan sumber yang bermanfaat untuk situasi tertentu, disarankan agar kustomisasi dibuat dengan cara yang lebih terdokumentasi, sehingga gambar dapat digunakan ke host lain. Cara yang disarankan adalah menulis Dockerfile.

DockerFile adalah file YAML, yang merupakan file teks dengan beberapa sintaks: Hubungan diekspresikan menggunakan indentasi (spasi) dan setiap baris terdiri dari pasangan kunci dan nilai.

Mari kita mulai dengan dockerfile sederhana yang menginstal paket Atribut (berisi perintah htop Dan ps) ke gambar Debian.

Buat direktori baru, masuk ke dalamnya, dan simpan file di bawah ini dengan nama Dockerfile (Modal D):

Dari debian run apt-get update && \ apt-get -y install procps 
Menyalin

Dockerfile ini menyatakan bahwa gambar dasar bernama Debian (DARI ayat). Jika tidak ada secara lokal, itu akan diunduh dari hub Docker. Itu BERLARI Perintah mengeksekusi apt-get dua kali. Perhatikan penggunaan backslash (\) untuk memecahkan garis dan penggunaan -y untuk melewatkan prompt konfirmasi instalasi apt-get.

Langkah selanjutnya adalah membangun gambar dengan Docker Build.



$ docker build -t mydebian . Mengirim Konteks Bangun ke Docker Daemon 2.048KB Langkah 1/2: Dari Debian ---> Be2868BebAba Langkah 2/2: Jalankan Pembaruan APT-GET && APT-GET -Y INSTALAN PROCPS ---> Berlari di 52A16B346AFC… Menghapus Wadah Menengah 52A16B346AFC ---> F21A0599666666666666666666666666 6 F21A05A59966 Berhasil Tagged Mydebian: Terbaru 
Menyalin

Bendera -t Mydebian menamakan gambar baru. Titik (.) memberitahu Docker untuk menggunakan direktori saat ini untuk mencari Dockerfile. Perhatikan bahwa lapisan baru dibuat dan dihapus saat garis dockerfile ditafsirkan.

Harus ada gambar baru di cache lokal.

$ docker gambar tag repositori ID dibuat ukuran mydebian mydebian terbaru f21a05a59966 8 menit yang lalu 119MB debian BE2868BebABA terbaru 7 minggu lalu 101MB 
Menyalin

Wadah dari gambar ini dapat dibuat.

$ docker run -it --name mydebian_container mydebian root@ef9eb174874a:/# ps -ef uid pid ppid c stime tty waktu 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 
Menyalin

Mulai sekarang Anda dapat membuat wadah yang menjalankan Debian dengan procps paket, dan perintah htop Dan ps akan sudah diinstal.

Sekarang mari kita buat DockerFile untuk memasang Apache dan PHP pada waktu pembuatan gambar, untuk mencapai tujuan yang sama dari artikel sebelumnya, ketika perintah dieksekusi di dalam wadah.

Dari debian run app-get update && \ apt-get -y install procps libapache2-mod-php cmd service apache2 start 
Menyalin

Kami telah menambahkan Libapache2-Mod-PHP di baris 3 dan a Cmd Perintah dalam baris 4 untuk memulai Apache. Saat wadah dimulai, Cmd perintah dieksekusi. Hanya ada satu Cmd Perintah per Dockerfile. Ketika Cmd Perintah ditentukan, menggantikan Cmd Perintah gambar yang Anda perluas. Jika Cmd Perintah dihilangkan, salah satu gambar dasar akan dieksekusi (jika ada). Seperti yang sudah Anda duga, dockerfile dari gambar dasar Debian memiliki a Cmd Perintah untuk mengeksekusi bash. Anda dapat memeriksa ini di hub Docker.



$ docker run -d --Name mydebian_container2 -d -p 8000: 80 -v "$ pwd":/var/www/html mydebian ad325685b738464c4c49bffer4282842828428284282842828428284282842848282848284282848284282848284828482848284828482848284284 Nama port AD325685B738 Mydebian "/bin/sh -c 'layanan…" 11 detik yang lalu naik 5 detik 0.0.0.0: 8000-> 80/tcp mydebian_container2 
Menyalin

Kali ini kami memulai wadah menggunakan -D beralih karena kami ingin dilepas dari terminal.

Perintah Dockerfile yang penting

Dockerfile memiliki perintah lain di luar DARI, BERLARI, Dan Cmd.

Memerintah Env digunakan untuk mengatur variabel lingkungan dalam gambar, seperti http_proxy, Misalnya. Banyak gambar menggunakan variabel lingkungan untuk meneruskan parameter ke wadah baru. Sebagai contoh, periksa gambar database seperti MySQL dan PostgreSQL di Docker Hub.

Memerintah MENYALIN Menyalin file dan direktori dari host ke gambar saat membangun waktu. Jalur sumber (argumen pertama) relatif terhadap direktori saat ini.

Memerintah MENAMBAHKAN mirip dengan MENYALIN, Dengan perbedaan bahwa, jika sumbernya adalah file tar terkompresi, itu akan secara otomatis didekompresi di direktori tujuan di dalam gambar. Kecuali untuk penggunaan itu, Docker merekomendasikan penggunaan MENYALIN Perintah jika memungkinkan.

Memerintah MEMBUKA menunjukkan port gambar mana yang dapat diekspos oleh Docker. Selama pembuatan wadah, port tersebut dapat dipetakan ke port host, jika diinginkan.

Memerintah Workdir menetapkan direktori yang akan digunakan Docker saat perintah dieksekusi di dalam wadah dengan Docker Exec.

Membuat gambar dengan HTTPS diaktifkan

Sekarang kami akan memperpanjang gambar PHP Apache resmi untuk mengaktifkan SSL dengan sertifikat yang dihasilkan secara otomatis untuk mencari-cari cara menggunakan perintah yang disebutkan. Di direktori baru, buat DockerFile berikut.



Dari PHP: 7 -Apache Run OpenSSL Req -x509 -Nodes -days 365 -NewKey RSA: 2048 -Keyout/etc/ssl/private/ssl -cert -snakeoil.kunci -out/etc/ssl/sertifikat/ssl-cert-snakeoil.PEM -subj "/c = br/st = rio grande do sul/l = porto alegre/o = keamanan/ou = pengembangan/cn = contoh.com "run a2enmod recrite run a2ensite default-ssl run a2enmod ssl paparkan 443 copy ./html/var/www/html workdir/var/www/html 
Menyalin

Di baris 3 kami membuat sertifikat. Baris 5 - 7 Aktifkan MOD_REWRITE dan SSL. Baris 9 memaparkan port 443 (port 80 sudah diekspos oleh gambar hulu). Baris 11 menambahkan direktori aplikasi ke wadah. Akhirnya, baris 13 menetapkan direktori kerja sebagai direktori kerja apache. Semua perintah yang dieksekusi oleh Docker Exec akan menggunakan direktori ini sebagai pangkalan secara default.

Sekarang, buat direktori bernama html dan file bernama phpinfo.php dengan konten ini.

 
Menyalin

Sekarang mari kita bangun dan jalankan wadah.

Docker build -t app_image . Docker run -d --rm -p 80:80 -p 443: 443 --Name app_container app_image 
Menyalin

Sekarang, Anda dapat mengakses phpinfo.php skrip melalui keduanya, http dan https.

http: // localhost/phpinfo.php https: // localhost/phpinfo.php 
Menyalin HTTPS diaktifkan.

Di https, browser akan mengeluh tentang keamanan sertifikat karena ini ditandatangani sendiri, tetapi peringatan itu dapat diabaikan.

Menerbitkan gambar ke hub Docker



Gambar yang dibuat hanya ada secara lokal, dalam cache lokal Docker. Anda mungkin ingin membaginya dengan host Docker lain, atau dengan rekan satu tim, atau bahkan membuat mereka publik. Bagaimanapun, Anda ingin mempublikasikan gambar Anda ke registri Docker. Mereka dapat dipublikasikan ke registri berbasis cloud, seperti hub Docker yang, omong-omong, adalah default jika Anda tidak secara eksplisit menentukan registri. Pertama -tama buat ID Docker gratis, lalu login:

$ Docker Login Login dengan ID Docker Anda untuk mendorong dan menarik gambar dari hub Docker. Jika Anda tidak memiliki ID Docker, pergilah ke https: // hub.buruh pelabuhan.com untuk membuat satu. Nama Pengguna: Kata Sandi Infroger: Login berhasil 
Menyalin

Berikutnya, Tandai gambar dengan nama repositori (infroger), nama gambar dan tag (versi gambar).

$ Docker Tag app_image infroger/app_image: 1 $ docker gambar tag repositori gambar id dibuat ukuran infroger/app_image 1 c093151fc68f 14 jam yang lalu 381mb app3_image c093151fc68f 14 jam 381mb 
Menyalin

Kemudian dorong gambar ke repositori.

$ Docker Push Infroger/App_Image: 1 Push mengacu pada 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: Didorong 96DB4CE698AD: Didorong ABAE6A338E5C: Didorong 4572A80A7A5E: Didorong EF68F6734AA4: Didorong 1: Digest: SHA256: 2E7E366F800AD0C4837CD700141496 
Menyalin

Sekarang buka Docker Hub dan periksa gambarnya ada:



https: // hub.buruh pelabuhan.com/r/infroger/app_image 

Di Docker Hub dengan pendaftaran gratis, Anda dapat memiliki satu repositori pribadi, dengan repositori publik yang tidak terbatas. Jika tidak, Anda mungkin ingin menjalankan registri Docker Anda sendiri, yang dapat dilakukan dengan satu perintah:

Docker Run -d -P 5000: 5000 --RestArt = Selalu --Name Registry Registry: 2 

Keuntungan memiliki pendaftaran pribadi adalah privasi. Tetapi Anda memiliki beban untuk mengelola keamanan, ketersediaan tinggi, persyaratan penyimpanan, kontrol akses, dll.

Kesimpulan

Di artikel ini, kami telah membahas cara memperluas gambar yang ada dan menyesuaikannya dengan kebutuhan Anda menggunakan DockerFile. Kami juga telah melihat cara menerbitkan gambar ke registri Docker. Anda dapat melakukan banyak hal sejauh ini, tetapi kami hanya menggaruk dunia Docker. Di artikel berikutnya, kita akan melihat bentuk orkestrasi wadah lokal yang sangat sederhana dengan komposisi Docker.

Lainnya dalam seri artikel Docker ini

  • A Hands On Idening ke wadah Docker
  • Cara berinteraksi dengan wadah Docker

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Hal -hal yang harus diinstal pada Ubuntu 22.04
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Cara memasang gambar iso di linux
  • Cara Dual Boot Kali Linux dan Windows 10
  • Ubuntu 20.04 Panduan