Cara Membuat Stack Lampu Berdasarkan Docker Menggunakan Docker di Ubuntu 20.04
- 2920
- 387
- Dave Kreiger V
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
Keperluan perisian dan konvensyen yang digunakan
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 |
-
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, danDocker-compose
, yang merupakan utiliti yang membolehkan kami menganjurkan aplikasi pelbagai kontain dengan mudahyaml
fail konfigurasi. Kedua -dua pakej boleh didapati di repositori rasmi Ubuntu. Kita boleh memasangnya melaluiApt
:$ 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
-
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
Pilihanmkdir
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 dipanggilDocker-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.
-
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:
SalinanVersi: '3.7 'Perkhidmatan: PHP-HTTPD: Imej: PHP: 7.3 -APACHE PORTS: - 80:80 Jilid: - "./Documentroot:/var/www/html "
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, versi3.7
adalah yang terkini dan disyorkan. - 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 iniPHP: 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 pelabuhan80
di tuan rumah ke pelabuhan80
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 kepadaDocker-compose
perintah. Dengan projek itu berjalan, jika kita menavigasilocalhost
Dengan penyemak imbas kami, kami harus melihat halaman berikut:
Halaman phpinfoUntuk 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:
SalinanVersi: '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:
Di dalam perkhidmatan stanza, kami menentukan perkhidmatan lain dan memanggilnya
Mariadb
dan dengangambar
arahan yang kami tentukan kami mahu menggunakan10.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 darijilid
subseksyen setiap perkhidmatan yang ditetapkan. Dalam kes ini kita memanggil kelantangan kitaMariaDB-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:
SalinanVersi: '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:
Kami menamakan perkhidmatan kami
phpmyadmin
dan mengkonfigurasikannya untuk menggunakan phpmyadmin/phpmyadmin Imej dari DockerHub. Kami juga menggunakanpautan
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 olehdb
Nama, oleh itu kita perlu membuat alias dengan nama yang sama untuk perkhidmatan MariaDB kami. Ini betul -betul apapautan
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 pelabuhan80
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 phpmyadminKami 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 definisiPHP-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:
SalinanVersi: '3.7 'Perkhidmatan: PHP-HTTPD: Membina: Konteks: ./port php -httpd: - 80:80 jilid: - "./DocumentRoot:/var/www/html "[...]
Di dalam
membina
seksyen kita menentukan konfigurasi yang digunakan pada masa bina. Dalam kes ini, kami menggunakankonteks
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
- « Ubuntu 20.04 Pemasangan Desktop Cinnamon
- Cara menyenaraikan dan mengeluarkan repositori PPA di Ubuntu 20.04 Linux »