Cara membuat tumpukan lampu berbasis Docker menggunakan Docker-Compose di Ubuntu 18.04 Bionic Beaver Linux

Cara membuat tumpukan lampu berbasis Docker menggunakan Docker-Compose di Ubuntu 18.04 Bionic Beaver Linux

Objektif

Mengikuti tutorial ini Anda akan dapat membuat lingkungan lampu menggunakan teknologi Docker.

Persyaratan

  • Izin root
  • Pengetahuan Dasar Docker

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root
    langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Versi lain dari tutorial ini

Ubuntu 20.04 (fossa fokus)

Perkenalan


Docker adalah proyek open source yang bertujuan menyediakan perangkat lunak di dalam wadah. Anda dapat menganggap wadah sebagai semacam "paket", lingkungan yang terisolasi yang berbagi kernel dengan mesin host dan berisi semua yang dibutuhkan aplikasi. Semua wadah dibangun menggunakan gambar-gambar (Repositori Gambar Pusat untuk mereka menjadi Dockerhub).

Dalam tutorial ini, kita akan melihat cara membuat tumpukan lampu berdasarkan komponen berlabuh: mengikuti filosofi "satu layanan per kontainer", kami akan mengumpulkan lingkungan menggunakan Docker-Compose, alat untuk mengatur komposisi wadah.

Satu layanan vs banyak layanan untuk wadah

Ada beberapa keuntungan dalam menggunakan satu layanan per kontainer, alih -alih menjalankan beberapa layanan di. Modularitas, misalnya, (kita dapat menggunakan kembali wadah untuk tujuan yang berbeda), atau pemeliharaan yang lebih baik: lebih mudah untuk fokus pada bagian lingkungan tertentu daripada mempertimbangkan semuanya sekaligus. Jika kita ingin menghormati filosofi ini, kita harus membuat wadah untuk setiap komponen tumpukan lampu kita: satu untuk Apache-PHP dan satu untuk database. Wadah yang berbeda harus dapat berbicara satu sama lain: untuk dengan mudah mengatur wadah terkait yang akan kami gunakan Docker-Compose.

Langkah awal

Sebelum melanjutkan kita perlu menginstal buruh pelabuhan Dan Docker-Compose di sistem kami:

# apt-get install docker docker-compose

Paket akan dipasang dalam beberapa detik, dan buruh pelabuhan Layanan akan dimulai secara otomatis. Kami sekarang dapat melanjutkan membuat direktori untuk proyek kami dan di dalamnya, yang lain untuk memegang halaman yang akan dilayani oleh Apache. DocumentRoot akan menjadi nama yang bermakna untuk itu; dalam hal ini satu -satunya halaman yang akan dilayani indeks.php:

$ mkdir -p Dockerized-Lamp/DocumentRoot $ echo ""> Dockerized-Lamp/Documentroot/Index.php 
Menyalin

Di sini kode kami hanya terdiri dari phpinfo Fungsi: Ini output (halaman yang menunjukkan informasi tentang PHP, jika Anda tidak tahu) akan menjadi apa yang akan ditampilkan server kami secara default. Sekarang mari kita gunakan editor favorit kami untuk membuat Docker-Compose.YML File untuk proyek kami.



PHP-APACHE

Kami sekarang dapat mulai memberikan instruksi tentang membangun dan menghubungkan wadah kami ke dalam file komposisi Docker. Ini adalah file yang menggunakan yaml sintaksis. Semua definisi harus diberikan ke dalam jasa bagian.

Versi: Layanan '3': PHP-APACHE: Gambar: PHP: 7.2.Port 1 -Apache: - 80:80 Volume: - ./Documentroot:/var/www/html tautan: - 'mariadb' 
Menyalin

Mari kita lihat apa yang baru saja kita lakukan di sini. Baris pertama yang kami masukkan ke dalam file, Versi: kapan, Menentukan versi Sintaks Kompose Docker apa yang akan kami gunakan, dalam hal ini versi 3, Versi utama terbaru yang tersedia. Di dalam jasa bagian, kami mulai menggambarkan layanan kami dengan menentukan namanya, PHP-APACHE (Nama sewenang -wenang, Anda dapat menggunakan apa pun yang Anda inginkan), lalu instruksi untuk membangunnya.

Itu gambar Kata kunci memberi tahu Docker gambar apa yang ingin kami gunakan untuk membangun wadah kami: dalam hal ini saya menggunakan 7.2.1-apache yang akan memberi kami Php 7.2.1 Bersama dengan server web Apache. Butuh versi PHP lain? Anda hanya perlu memilih dari banyak yang disediakan di halaman gambar di Dockerhub.

Instruksi kedua yang kami berikan adalah Ports: Kami menyuruh Docker untuk memetakan port 80 di tuan rumah kami, ke port 80 Pada wadah: cara ini akan muncul saat kami menjalankan server web secara langsung di sistem kami.

Kami kemudian menggunakan volume instruksi untuk menentukan a Bind Mount. Karena selama pengembangan, kode banyak berubah dan cepat, tidak masuk akal dalam meletakkan kode secara langsung di dalam wadah: dengan cara ini kita harus membangunnya kembali setiap kali kita membuat beberapa modifikasi. Sebaliknya, apa yang akan kita lakukan adalah memberitahu Docker untuk mengikat Root document direktori, at /var/www/html di dalam wadah. Direktori ini mewakili Apache utama VirtualHost root dokumen, oleh karena itu kode yang kami masukkan ke dalamnya, akan segera tersedia.

Akhirnya kami menggunakan tautan Kata Kunci Menentukan Mariadb sebagai argumennya. Kata kunci ini tidak diperlukan, seperti kelihatannya, untuk membuat koneksi antara kedua wadah: bahkan tanpa menentukannya, Mariadb Layanan akan dapat dijangkau dari dalam wadah yang dibangun untuk Apache-PHP layanan, dengan menggunakan namanya sebagai nama host. Kata kunci melakukan dua hal: pertama mari kita tentukan secara opsional alias Kami dapat menggunakan untuk merujuk suatu layanan selain namanya. Jadi, misalnya, dengan menulis:

Tautan: MariaDB: Layanan Database 
Menyalin

Layanan ini juga dapat dicapai menggunakan Database-Service. Hal kedua tautan tidak, tentukan ketergantungan: dalam hal ini PHP-APACHE Layanan akan dianggap tergantung dari Mariadb satu, jadi yang terakhir akan dimulai sebelum yang pertama saat membangun atau memulai lingkungan.



Pasang ekstensi PHP

Dockerfile php-apache default tidak termasuk beberapa ekstensi php, seperti mysqli atau pdo. Untuk menginstalnya, kami harus membangun DockerFile kami sendiri, berdasarkan itu. Untuk melakukan itu, kami membuat direktori di dalam proyek kami bernama PHP-Apache (ini akan menjadi milik kami membangun konteks) dan di dalamnya, dockerfile kami. Tempel dan simpan kode di bawah ini sebagai PHP-Apache/Dockerfile:

 Dari PHP: 7.2.1-APACHE MURTER EGIDIO DUCILE RUN DOCKER-PHP-EXT-INSTALL PDO_MYSQL MYSQLI 
Menyalin

Seperti yang Anda lihat, dengan DARI Instruksi, kami menentukan bahwa DockerFile ini harus didasarkan pada yang default. Lalu kami memasukkan a BERLARI Instruksi: Menggunakan skrip yang disediakan dalam gambar itu sendiri, Docker-php-ext-install, Kami menyertakan ekstensi yang diperlukan untuk menggunakan PDO dan Mysqli. Pada titik ini, jika kami ingin menggunakan DockerFile khusus kami, kami harus sedikit mengubah bagian PHP-APACHE di Docker-Compose kami.YML, dengan cara ini:

Versi: Layanan '3': PHP-APACHE: Build: Context: ./PHP -APACHE Ports: - 80:80 Volume: - ./Documentroot:/var/www/html tautan: - 'mariadb' 
Menyalin

Apa yang telah berubah? Alih -alih secara langsung menentukan gambar jarak jauh yang akan digunakan, kami menyediakan konteks instruksi, di dalam membangun bagian, sehingga dockerfile yang terkandung dalam direktori yang kami buat dan di sini disediakan sebagai argumen, akan secara otomatis digunakan. Direktori konteks diimpor oleh Docker Daemon saat membangun gambar, jadi jika kami ingin menambahkan file tambahan, kami harus meletakkannya juga di sana.

Layanan database

Database di bagian penting dari lingkungan lampu, ini digunakan untuk kegigihan. Dalam hal ini kita akan menggunakan Mariadb:

Mariadb: Gambar: Mariadb: 10.1 volume: - mariadb:/var/lib/mysql lingkungan: tz: "europe/rome" mysql_allow_empty_password: "no" mysql_root_password: "rootpwd" mysql_user: 'testUser' mysql_password: 'testpassword' testpassword ' 
Menyalin

Kami sudah tahu apa itu gambar kata kunci untuk. Hal yang sama berlaku untuk volume instruksi, kecuali fakta bahwa kali ini kami tidak menyatakan a Bind Mount, Sebaliknya, kami mereferensikan a volume bernama, untuk kegigihan. Penting untuk fokus pada perbedaan antara keduanya untuk sesaat.

Seperti yang dikatakan sebelumnya, a Bind Mount adalah cara cepat untuk memasang direktori host di dalam wadah, sehingga file yang terkandung dalam direktori tersebut dapat diakses dari dalam lingkungan terbatas: untuk menentukan bind mount, Sintaks pendek adalah:

:

Jalur host dapat berupa relatif (ke file komposisi docker) atau jalur absolut, sedangkan titik mount di dalam wadah harus ditentukan dalam bentuk absolut.

A volume bernama adalah sesuatu yang berbeda: itu benar Volume Docker digunakan untuk kegigihan, dan umumnya lebih disukai daripada bind mount, karena tidak tergantung pada struktur file host (salah satu dari banyak keuntungan dari kontainer itu adalah portabilitas mereka). Sintaks yang akan digunakan untuk referensi a volume bernama Di dalam definisi layanan adalah:

:

A volume bernama siklus hidup tidak tergantung dari wadah yang menggunakannya, dan harus dinyatakan dalam volume Bagian dari file komposisi Docker, seperti yang akan kita lihat sebentar lagi.

Kembali ke definisi layanan sekarang. Kata kunci terakhir yang kami gunakan adalah lingkungan: Ini memungkinkan kita mengatur beberapa variabel lingkungan yang akan mempengaruhi perilaku layanan. Pertama kami gunakan Tz Untuk menentukan zona waktu database kami: dalam hal ini saya menggunakan "Eropa/Roma". Nama -nama variabel lain mengatakan segalanya tentang tujuan mereka: Dengan menggunakannya, kami menetapkan detail penting sebagai nama basis data default yang akan dibuat (testdb), pengguna yang akan dibuat dan kata sandinya. Kami juga mengatur kata sandi pengguna root dan memutuskan untuk tidak mengizinkan kata sandi kosong.



Bagian volume

Di bagian ini kita harus menyatakan volume bernama Kami direferensikan dari Mariadb Definisi server:

Volume: Mariadb: 
Menyalin

Pada akhirnya, ini adalah bagaimana file kami akan terlihat secara keseluruhan:

Versi: Layanan '3': PHP-APACHE: Gambar: PHP: 7.2.Port 1 -Apache: - 80:80 Volume: - ./DocumentRoot:/var/www/html: z Links: - 'mariadb' mariadb: gambar: mariadb: 10.1 volume: - mariadb:/var/lib/mysql lingkungan: tz: "Eropa/rome" mysql_allow_empty_password: "no" mysql_root_password: "rootpwd" mysql_user: 'testUser' mysql_password: 'volumsword' maLumSword ': testpassword:' testpassword ':' maLum -maRumsword: 'maRiMADED:' maLUMADED: 'MARI -MOLUBASE:' TESTPASE: 'TESTPASE': 'TESTPASE': 'TestPass,' TestPass, 
Menyalin

Sangat penting untuk menghormati lekukan file yang akan ditafsirkan dengan benar.

Mari Bangun Lingkungan Kita

Setelah kami menentukan semua instruksi untuk layanan kami, kami dapat menggunakan Docker-Compose Up Perintah untuk membangunnya. Perintah harus dieksekusi di dalam direktori yang sama di mana Docker-Compose.YML File terletak:

# Docker-Compose Up

Beberapa menit dan kami akan siap untuk pergi. Pada akhirnya jika semuanya berjalan dengan baik, dengan menavigasi ke localhost Di host kami, kami akan melihat output dari skrip PHP yang kami tempatkan di dalam Root document:

Lingkungan lampu kami sekarang siap digunakan.

Menutup pikiran

Kami telah melihat cara membuat dasar LAMPU lingkungan, menggunakan Docker dan mengatur kontainer dan layanan dengan Docker-Compose. Pengaturan yang kami gunakan difokuskan pada pengembangan, dan dapat diperluas lebih lanjut dan diubah agar sesuai dengan kebutuhan yang berbeda: Dokumentasi Docker Ini adalah sumber tertulis yang sangat baik Anda dapat berkonsultasi untuk memperluas pengetahuan Docker Anda. Jangan ragu untuk meninggalkan komentar untuk keraguan atau pertanyaan apa pun yang Anda miliki.

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
  • Cara membuat tumpukan lampu berbasis Docker menggunakan Docker di…
  • Ubuntu 20.04 trik dan hal -hal yang mungkin tidak Anda ketahui
  • Ubuntu 20.04 Panduan
  • Ubuntu 20.04 Hadoop
  • 8 Lingkungan Desktop Ubuntu Terbaik (20.04 FOSSA FOCAL…
  • Daftar dan Instalasi Klien FTP di Ubuntu 20.04 Linux…
  • Cara Terhubung ke Docker Container Via SSH
  • Cara memasang tumpukan lampu di almalinux