Cara Membuat Stack Lampu Berdasarkan Docker Menggunakan Docker di Ubuntu 20.04

Cara Membuat Stack Lampu Berdasarkan Docker Menggunakan Docker di Ubuntu 20.04

Timbunan lampu

Lampu adalah timbunan perisian yang mungkin majoriti laman web dijalankan. Linux mewakili asas timbunan, dan pelaksanaan tradisional termasuk Apache sebagai pelayan web, pangkalan data MySQL, dan PHP sebagai bahasa pengaturcaraan sisi pelayan. Walau bagaimanapun, terdapat banyak variasi yang mungkin: MariaDB, misalnya, sering digunakan sebagai pengganti MySQL, yang mana ia adalah garpu, dan bahasa pengaturcaraan lain, seperti Python atau Perl boleh digunakan dan bukannya PHP. Dalam artikel ini, kita akan melihat bagaimana untuk melaksanakan timbunan lampu asas menggunakan Docker dan utiliti docker.

Dalam tutorial ini anda akan belajar:

  • Cara Memasang Docker dan Docker-Compose di Ubuntu 20.04
  • Cara Menentukan Perkhidmatan dan Jilid Menggunakan Docker-Compose
  • Cara memetakan port hos ke pelabuhan kontena dalam fail konfigurasi docker
  • Cara Menggunakan Mount Bind dan Jumlah Dinamakan
  • Cara Membina Projek Dengan Docker-Compose
Cara Membuat Stack Lampu Berdasarkan Docker Menggunakan Docker di Ubuntu 20.04

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Dipasang Ubuntu 20.04 atau dinaik taraf Ubuntu hingga 20.04 Focal Fossa
Perisian Docker, Docker-Compose
Yang lain Kebenaran Root untuk Membina Bekas Docker dan Melancarkan Perkhidmatan Docker
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
  1. Memasang pakej dan memulakan perkhidmatan Docker

    Untuk membuat timbunan lampu berasaskan docker di Ubuntu 20.04 Focal Fossa, perkara pertama yang perlu kita lakukan ialah memasang perisian yang kita perlukan: Docker sendiri, dan Docker-compose, yang merupakan utiliti yang membolehkan kami menganjurkan aplikasi pelbagai kontain dengan mudah yaml fail konfigurasi. Kedua -dua pakej boleh didapati di repositori rasmi Ubuntu. Kita boleh memasangnya melalui Apt:

    $ sudo apt memasang docker docker 

    Setelah pemasangan dilakukan, kita mesti memulakan Docker perkhidmatan dan membolehkannya di but. Kami boleh melakukan kedua -dua operasi dengan satu arahan tunggal:

    $ Systemctl Enable --now docker 
  2. Persediaan Projek

    Langkah pertama dalam perjalanan kami terdiri daripada penciptaan direktori yang akan kami gunakan sebagai akar projek kami. Demi artikel ini kita akan menyebutnya Linuxconfig. Di dalam direktori ini kita akan membuat yang lain, Documentroot, yang akan menjadi tuan rumah fail laman web kami. Kita boleh membuat kedua -dua direktori sekaligus menggunakan -p Pilihan mkdir Perintah:

    $ mkdir -p linuxconfig/documentroot 


    Di dalam Linuxconfig direktori, kami menentukan konfigurasi docker-compose untuk projek kami di dalam fail yaml, yang secara lalai harus dipanggil Docker-compose.yml. Terdapat tiga stanza utama yang boleh kita gunakan dalam fail konfigurasi: perkhidmatan, jilid dan rangkaian.

    Setiap bahagian digunakan untuk mengkonfigurasi aspek projek yang sepadan. Dalam tutorial ini kita akan menggunakan hanya dua yang pertama. Kami akan melaksanakan komponen timbunan lampu sebagai perkhidmatan di dalam bekas berasingan mereka sendiri.

    Bekas yang dibuat dengan komposik docker akan menjadi ahli rangkaian yang sama dan oleh itu akan dapat bercakap antara satu sama lain secara lalai. Dalam rangkaian, setiap bekas akan dapat merujuk kepada yang lain dengan nama host yang sama dengan nama mereka, atau dengan nama yang digunakan untuk menentukan perkhidmatan yang dilaksanakan oleh bekas.

    Secara lalai bekas akan dinamakan menggunakan nama direktori yang mengandungi fail konfigurasi sebagai awalan. Dalam kes ini, sebagai contoh, bekas yang digunakan untuk perkhidmatan yang dipanggil PHP-HTTPD, akan dinamakan linuxconfig_php-httpd_1.

  3. Menentukan perkhidmatan php + httpd

    Perkhidmatan pertama yang akan kami tentukan dalam fail konfigurasi akan termasuk Php Sebagai modul pelayan web Apache. Kami akan menggunakan salah satu imej PHP rasmi yang terdapat di DockerHub sebagai pangkalan untuk bekas kami, khususnya yang mempunyai -Apache akhiran, yang menyediakan persediaan yang kami nyatakan di atas. Mari mula menulis konfigurasi kami:

    Versi: '3.7 'Perkhidmatan: PHP-HTTPD: Imej: PHP: 7.3 -APACHE PORTS: - 80:80 Jilid: - "./Documentroot:/var/www/html " 
    Salinan

    Perkara pertama yang kami nyatakan dalam fail konfigurasi adalah versi. Dengan arahan ini, kami mengisytiharkan versi khusus fail yang akan kami gunakan. Pada masa penulisan, versi 3.7 adalah yang terkini dan disyorkan.

  4. Setelah mengisytiharkan versi fail, kami mula menulis perkhidmatan rangkap; Di dalamnya kami menentukan perkhidmatan yang akan menyusun timbunan lampu kami. Kami memanggil perkhidmatan pertama PHP-HTTPD. Nama perkhidmatan benar -benar sewenang -wenangnya, tetapi selalu menjadi kebiasaan yang baik untuk menggunakannya yang bermakna dalam konteks projek.

    The gambar Arahan digunakan untuk menentukan di mana imej bekas harus didasarkan, dalam hal ini PHP: 7.3-APACHE.

    The pelabuhan Arahan digunakan untuk mendedahkan port pada bekas, dan untuk membuat peta antara port hos dan pelabuhan kontena. Peta tersebut ditakrifkan dengan memisahkan port dengan a :. Di sebelah kiri kami menentukan port tuan rumah, dan di sebelah kanan, pelabuhan di dalam bekas ia harus dipetakan ke. Dalam kes ini kita memetakan pelabuhan 80 di tuan rumah ke pelabuhan 80 Di bekas, kerana ia adalah port lalai yang digunakan oleh pelayan web Apache.

    Arahan terakhir yang kami gunakan adalah jilid: dengan itu kita dapat menentukan pemetaan antara a Volume bernama atau a jalan (relatif atau mutlak) pada sistem tuan rumah ke jalan pada bekas, di mana ia akan dipasang.

    Dalam persediaan kami, ./Documentroot Direktori akan menjadi tuan rumah fail tapak: ia akan dipasang di /var/www/html Direktori di dalam bekas, kerana yang terakhir adalah akar dokumen yang digunakan oleh Apache VirtualHost lalai. Persediaan sedemikian dipanggil a mengikat gunung dan sangat berguna semasa pembangunan kerana perubahan yang kita buat pada fail projek, segera dicerminkan di dalam bekas. Kelemahan konfigurasi ini adalah bahawa ia mewujudkan kebergantungan antara bekas dan struktur fail mesin tuan rumah, mengurangkan salah satu kelebihan utama menggunakan Docker: Portability.

    Direktori yang akan dipasang di dalam bekas akan dibuat secara automatik jika tidak wujud apabila Docker-compose up Perintah dilancarkan: dalam hal ini ia akan dimiliki oleh root jika tidak dinyatakan sebaliknya.

    Di dalam Documentroot Direktori kita kini boleh membuat fail indeks, dan cuba membina projek kami untuk mengesahkan persediaan berfungsi:

    $ echo "Dokumen/indeks.php $ sudo docker -compose up -d 

    Selepas melaksanakan arahan, imej Docker yang diperlukan akan dimuat turun dari DockerHub dan bekas yang akan kami buat dengan tetapan yang kami berikan dan berjalan di latar belakang (mereka tidak akan menyekat terminal), kerana -d pilihan yang kami berikan kepada Docker-compose perintah. Dengan projek itu berjalan, jika kita menavigasi localhost Dengan penyemak imbas kami, kami harus melihat halaman berikut:



    Halaman phpinfo

    Untuk menghentikan projek itu, dari direktori yang menganjurkan Docker-compose.yml fail, kita boleh menjalankan:

    $ sudo docker-comprose stop 

    Menentukan perkhidmatan MariaDB

    Bahagian penting dalam timbunan lampu adalah lapisan pangkalan data. Dalam konfigurasi kami, kami akan menggunakan Mariadb dan imej Docker rasmi yang terdapat di DockerHub:

    Versi: '3.7 'Perkhidmatan: PHP-HTTPD: Imej: PHP: 7.3 -APACHE PORTS: - 80:80 Jilid: - "./Documentroot:/var/www/html "MariaDB: Imej: Mariadb: 10.5.2 jilid: - MariaDB -Volume:/var/lib/mysql Alam Sekitar: TZ: "Europe/Rome" mysql_allow_empty_password: "tidak" mysql_root_password: "rootpwd" mysql_user: 'testuser' mysql_password: 'testpassword' MariaDB-Volume: 
    Salinan

    Di dalam perkhidmatan stanza, kami menentukan perkhidmatan lain dan memanggilnya Mariadb dan dengan gambar arahan yang kami tentukan kami mahu menggunakan 10.5.2 versi gambar rasmi.

    Dalam definisi perkhidmatan sebelumnya, kami menggunakan gunung mengikat. Kali ini, sebaliknya, kami menggunakan Docker yang betul Volume bernama, untuk dipasang pada /var/lib/mysql Di dalam bekas (ia adalah direktori data lalai yang digunakan oleh MariaDB). Tidak seperti gunung mengikat, jumlah yang dinamakan tidak menghasilkan kebergantungan bekas pada struktur sistem fail tuan rumah. Sepenuhnya diuruskan oleh Docker, mereka adalah kaedah yang disyorkan untuk berterusan data yang sebaliknya akan hilang apabila bekas dimusnahkan.

    Jumlah bernama boleh ditakrifkan di bahagian utama jilid stanza fail konfigurasi dan boleh dirujuk dari jilid subseksyen setiap perkhidmatan yang ditetapkan. Dalam kes ini kita memanggil kelantangan kita MariaDB-Volume.

    Sebagai langkah seterusnya, kami menentukan nilai beberapa Pembolehubah persekitaran digunakan untuk mempengaruhi tingkah laku kontena. Pembolehubah persekitaran ditakrifkan dalam persekitaran bahagian definisi perkhidmatan. Pembolehubah yang kami tentukan dalam kes ini mempunyai kesan berikut:

    Pembolehubah Kesan
    TZ Tetapkan zon waktu yang digunakan oleh pelayan MariaDB
    Mysql_allow_empty_password Aktifkan atau lumpuhkan penggunaan kata laluan kosong untuk pengguna root db
    Mysql_root_password Ini adalah pemboleh ubah wajib dan digunakan untuk menetapkan kata laluan pengguna akar db
    Mysql_database Pilihan digunakan untuk menentukan nama pangkalan data yang akan dibuat pada permulaan imej
    Mysql_user Pilihan digunakan untuk menentukan nama pengguna yang akan dibuat dengan kebenaran super untuk pangkalan data yang ditentukan dengan mysql_database
    Mysql_password Digunakan untuk menentukan kata laluan untuk pengguna yang dibuat dengan nama yang disediakan oleh mysql_user

    Pada ketika ini, kita harus mempunyai pelayan web yang bekerja dapat bekerja dengan PHP, dan pangkalan data untuk menyimpan data kami.

    Bonus - phpmyadmin

    Tumpukan lampu asas kami kini akan selesai. Sebagai bonus, kita mungkin mahu menambah phpmyadmin Untuk itu, untuk mengawal pangkalan data MariaDB dengan mudah dari antara muka web yang mesra pengguna. Mari tambahkan definisi perkhidmatan yang berkaitan dengan konfigurasi docker kami:

    Versi: '3.7 'Perkhidmatan: PHP-HTTPD: Imej: PHP: 7.3 -APACHE PORTS: - 80:80 Jilid: - "./Documentroot:/var/www/html "MariaDB: Imej: Mariadb: 10.5.2 jilid: - MariaDB -Volume:/var/lib/mysql Alam Sekitar: TZ: "Europe/Rome" mysql_allow_empty_password: "tidak" mysql_root_password: "rootpwd" mysql_user: 'mysql_password' Imej: phpmyadmin/phpmyadmin Pautan: - 'MariaDB: DB' Port: - 8081: 80 Volume: Mariadb -Volume: 
    Salinan

    Kami menamakan perkhidmatan kami phpmyadmin dan mengkonfigurasikannya untuk menggunakan phpmyadmin/phpmyadmin Imej dari DockerHub. Kami juga menggunakan pautan Kata kunci untuk kali pertama; Untuk apakah ini? Seperti yang sudah kita ketahui, secara lalai, dan tanpa konfigurasi khas yang diperlukan, semua bekas yang dibuat dalam konfigurasi docker-compose yang sama dapat bercakap antara satu sama lain. Imej phpmyadmin dikonfigurasikan untuk merujuk bekas pangkalan data yang dijalankan oleh db Nama, oleh itu kita perlu membuat alias dengan nama yang sama untuk perkhidmatan MariaDB kami. Ini betul -betul apa pautan digunakan untuk: untuk menentukan alias tambahan untuk mencapai perkhidmatan dari yang lain.

    Di dalam definisi perkhidmatan kami juga memetakan pelabuhan 8081 mesin tuan rumah kami, ke pelabuhan 80 Di dalam bekas (port 80 sudah dipetakan ke port yang sama di dalam bekas php-httpd). Oleh itu, antara muka phpmyadmin dapat dicapai di Localhost: 8081 alamat. Mari membina semula projek kami dan mengesahkannya:

    $ sudo docker -compose up -d -membina 


    Halaman log masuk phpmyadmin

    Kami boleh log masuk dengan kelayakan yang kami tentukan untuk perkhidmatan pangkalan data kami, dan mengesahkan bahawa testdb pangkalan data telah dibuat:



    Laman Utama Phpmyadmin

    Menggunakan gambar tersuai untuk perkhidmatan

    Dalam contoh di atas, kami selalu menggunakan imej vanila dalam definisi perkhidmatan kami. Terdapat kes di mana kita mungkin mahu menggunakan imej docker tersuai berdasarkannya. Sebagai contoh, katakan kami ingin membina perkhidmatan php-httpd, tetapi termasuk lanjutan php tambahan: bagaimana kita boleh melakukannya? Pada akar projek, kami mentakrifkan direktori baru, dan untuk nama kemudahannya selepas perkhidmatan:

    $ mkdir php-httpd 

    Di dalam direktori ini, kami membuat fail docker, digunakan untuk melanjutkan imej asas, dengan kandungan berikut:

    Dari PHP: 7.Penjaga label 3-APACHE = "[email protected] "run apt-get update & & apt-get install -y libmcrypt-dev \ && pecl install mcrypt-1.0.2 \ && dock-php-ext-enable mcrypt 

    Kembali ke kami Docker-compose.yml fail, kami mengubah suai definisi PHP-HTTPD perkhidmatan. Kita tidak dapat merujuk imej secara langsung seperti yang kita lakukan sebelumnya. Sebaliknya, kami menentukan direktori yang mengandungi Dockerfile Custom kami sebagai konteks membina:

    Versi: '3.7 'Perkhidmatan: PHP-HTTPD: Membina: Konteks: ./port php -httpd: - 80:80 jilid: - "./DocumentRoot:/var/www/html "[...] 
    Salinan

    Di dalam membina seksyen kita menentukan konfigurasi yang digunakan pada masa bina. Dalam kes ini, kami menggunakan konteks Untuk merujuk direktori yang mengandungi Dockerfile: Direktori tersebut digunakan sebagai konteks membina, dan kandungannya dihantar ke daemon docker apabila bekas dibina. Untuk memohon pengubahsuaian, kita mesti membina semula projek.

    Dengan cara ini, untuk mengetahui lebih lanjut mengenai sambungan tambahan dalam imej Docker PHP, anda boleh melihat dokumentasi rasmi, dan khususnya Sambungan PECL seksyen.

    Kesimpulan

    Dalam tutorial ini, kita melihat bagaimana untuk membina timbunan lampu asas menggunakan teknologi kontena dengan docker dan docker-compose. Kami melihat bagaimana untuk menentukan pelbagai perkhidmatan di dalam Docker-Compose.Fail konfigurasi YML, dan cara mengkonfigurasi pengikat mount, bernama jumlah dan pemetaan pelabuhan tuan rumah. Kami juga melihat cara menggunakan gambar tersuai. Anda boleh melihat rujukan docker-compose untuk senarai arahan terperinci yang boleh digunakan di dalam fail konfigurasi docker-compose.

Tutorial Linux Berkaitan:

  • Ubuntu 20.04 WordPress dengan pemasangan Apache
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pemasangan ampache raspberry pi
  • Pemasangan WordPress OpenLiteSpeed
  • Cara Bekerja Dengan API Rest WooCommerce dengan Python
  • Cara memasang timbunan lampu pada almalinux
  • Cara Menyiapkan Linux Apache Mysql Python Server
  • Ubuntu 20.04: WordPress dengan pemasangan nginx
  • Cara menukar kata laluan pengguna Mariadb
  • Pasang mysql di Ubuntu 20.04 LTS Linux