Cara Membuat Tumpukan Lampu Berbasis Docker Menggunakan Docker di Ubuntu 20.04

Cara Membuat Tumpukan Lampu Berbasis Docker Menggunakan Docker di Ubuntu 20.04

Tumpukan lampu

Lampu adalah tumpukan perangkat lunak yang mungkin sebagian besar situs web berjalan. Linux mewakili dasar dari tumpukan, dan implementasi tradisional mencakup Apache sebagai server web, database MySQL, dan PHP sebagai bahasa pemrograman sisi server. Namun, ada banyak variasi yang mungkin: mariadb, misalnya, sering digunakan sebagai pengganti mysql, yang merupakan garpu, dan bahasa pemrograman lainnya, karena python atau perl dapat digunakan alih -alih php. Dalam artikel ini kita akan melihat cara menerapkan tumpukan lampu dasar menggunakan Docker dan utilitas komposisi Docker.

Dalam tutorial ini Anda akan belajar:

  • Cara menginstal docker dan compose docker di ubuntu 20.04
  • Cara mendefinisikan layanan dan volume menggunakan komposisi Docker
  • Cara memetakan port host ke port kontainer di file konfigurasi komposisi docker
  • Cara menggunakan bind mount dan volume bernama
  • Cara Membangun Proyek dengan Komposisi Docker
Cara Membuat Tumpukan Lampu Berbasis Docker Menggunakan Docker di Ubuntu 20.04

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 Dipasang Ubuntu 20.04 atau ditingkatkan ubuntu ke 20.04 FOSSA FOCAL
Perangkat lunak Docker, Docker-Compose
Lainnya Izin Root untuk Membangun Wadah Docker dan Luncurkan Layanan Docker
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
  1. Menginstal Paket dan Memulai Layanan Docker

    Untuk membuat tumpukan lampu berbasis Docker di Ubuntu 20.04 FOSSA FOCAL, hal pertama yang harus kami lakukan adalah menginstal perangkat lunak yang kami butuhkan: buruh pelabuhan dirinya sendiri, dan Docker-Compose, yang merupakan utilitas yang memungkinkan kami dengan mudah mengatur aplikasi multi-kontainer menggunakan yaml file konfigurasi. Kedua paket tersedia di repositori resmi Ubuntu. Kami dapat menginstalnya melalui tepat:

    $ sudo apt menginstal docker docker-compose 

    Setelah instalasi dilakukan, kita harus memulai buruh pelabuhan layanan dan aktifkan saat boot. Kami dapat melakukan kedua operasi dengan satu perintah tunggal:

    $ Systemctl Enable - -NOW Docker 
  2. Pengaturan Proyek

    Langkah pertama dalam perjalanan kami terdiri dari penciptaan direktori yang akan kami gunakan sebagai akar dari proyek kami. Demi artikel ini kita akan menyebutnya LinuxConfig. Di dalam direktori ini kami akan membuat yang lain, Root document, Yang akan meng -host file situs web kami. Kita dapat membuat kedua direktori sekaligus menggunakan -P opsi mkdir memerintah:

    $ mkdir -p linuxconfig/documentrooth 


    Di dalam LinuxConfig Direktori, kami mendefinisikan konfigurasi komposisi Docker untuk proyek kami di dalam file YAML, yang secara default harus dipanggil Docker-Compose.YML. Ada tiga bait utama yang dapat kita gunakan dalam file konfigurasi: jasa, volume Dan Jaringan.

    Setiap bagian digunakan untuk mengonfigurasi aspek yang sesuai dari suatu proyek. Dalam tutorial ini kita hanya akan menggunakan dua yang pertama. Kami akan menerapkan komponen tumpukan lampu sebagai layanan di dalam wadah terpisah mereka sendiri.

    Wadah yang dibuat dengan komposisi Docker akan menjadi anggota dari jaringan yang sama dan karenanya akan dapat berbicara satu sama lain secara default. Dalam jaringan, setiap wadah akan dapat merujuk yang lain dengan nama host yang identik dengan nama mereka, atau dengan nama yang digunakan untuk menentukan layanan yang diterapkan oleh wadah.

    Secara default wadah akan dinamai menggunakan nama direktori yang berisi file konfigurasi sebagai awalan. Dalam hal ini, misalnya, wadah yang digunakan untuk layanan yang disebut php-httpd, akan dinamai linuxconfig_php-httpd_1.

  3. Mendefinisikan Layanan PHP + HTTPD

    Layanan pertama yang akan kami tentukan dalam file konfigurasi akan termasuk Php Sebagai modul server web Apache. Kami akan menggunakan salah satu gambar PHP resmi yang tersedia di Dockerhub Sebagai dasar untuk wadah kami, khususnya yang memiliki -Apache sufiks, yang menyediakan pengaturan yang kami sebutkan di atas. Mari kita mulai menulis konfigurasi kita:

    Versi: '3.Layanan 7 ': php-httpd: gambar: php: 7.Port 3 -Apache: - 80:80 Volume: - "./DocumentRoot:/var/www/html " 
    Menyalin

    Hal pertama yang kami tentukan dalam file konfigurasi adalah Versi: kapan. Dengan instruksi ini kami mendeklarasikan versi spesifik apa yang akan kami gunakan. Pada saat penulisan, versi 3.7 adalah yang terbaru dan direkomendasikan.

  4. Setelah mendeklarasikan versi File Compose, kami mulai menulis melayani bait; Di dalamnya kami mendefinisikan layanan yang akan menyusun tumpukan lampu kami. Kami menelepon layanan pertama php-httpd. Nama layanan sepenuhnya sewenang -wenang, tetapi selalu merupakan kebiasaan yang baik untuk menggunakan satu yang bermakna dalam konteks proyek.

    Itu gambar Instruksi digunakan untuk menentukan gambar mana wadah harus didasarkan, dalam hal ini PHP: 7.3-Apache.

    Itu Ports Instruksi digunakan untuk mengekspos port pada wadah, dan untuk membuat peta antara port host dan port kontainer. Peta tersebut didefinisikan dengan memisahkan port dengan a :. Di sisi kiri kami menentukan port host, dan di sebelah kanan, port di dalam wadah itu harus dipetakan. Dalam hal ini kami memetakan port 80 di host ke port 80 pada wadah, karena itu adalah port default yang digunakan oleh server web Apache.

    Instruksi terakhir yang kami gunakan adalah volume: dengan itu kita dapat menentukan pemetaan antara a volume bernama atau a jalur (relatif atau absolut) pada sistem host ke jalur pada wadah, di mana ia akan dipasang.

    Dalam pengaturan kami, ./Documentroot Direktori akan meng -host file situs: itu akan dipasang di /var/www/html Direktori di dalam wadah, karena yang terakhir adalah root dokumen yang digunakan oleh Apache VirtualHost default. Pengaturan seperti itu disebut a Bind Mount dan sangat berguna selama pengembangan karena perubahan yang kami lakukan pada file proyek, segera tercermin di dalam wadah. Kelemahan dari konfigurasi ini adalah ia menetapkan ketergantungan antara wadah dan struktur file mesin host, mengurangi salah satu keuntungan utama menggunakan Docker: Portability.

    Direktori yang akan dipasang di dalam wadah akan dibuat secara otomatis jika tidak ada saat Docker-Compose Up Perintah diluncurkan: dalam hal ini akan dimiliki oleh root jika tidak ditentukan lain.

    Di dalam Root document Direktori Kami sekarang dapat membuat file indeks, dan mencoba membangun proyek kami untuk memverifikasi pengaturan berfungsi:

    $ echo "DocumentRoot/Index.php $ sudo docker -compose up -d 

    Setelah menjalankan perintah, gambar Docker yang dibutuhkan akan diunduh dari Dockerhub dan wadah yang akan kami buat dengan pengaturan yang kami sediakan dan jalankan di latar belakang (mereka tidak akan memblokir terminal), karena dari -D opsi yang kami berikan ke Docker-Compose memerintah. Dengan proyek dan berjalan, jika kita menavigasi localhost Dengan browser kami, kita harus melihat halaman berikut:



    Halaman phpinfo

    Untuk menghentikan proyek, dari direktori hosting Docker-Compose.YML file, kami dapat menjalankan:

    $ sudo docker-compose stop 

    Mendefinisikan layanan mariadb

    Bagian penting dari tumpukan lampu adalah lapisan database. Dalam konfigurasi kami, kami akan menggunakan Mariadb dan gambar Docker resminya tersedia di Dockerhub:

    Versi: '3.Layanan 7 ': php-httpd: gambar: php: 7.Port 3 -Apache: - 80:80 Volume: - "./Documentroot:/var/www/html "mariadb: gambar: mariadb: 10.5.2 volumes: - mariadb-volume:/var/lib/mysql environment: TZ: "Europe/Rome" MYSQL_ALLOW_EMPTY_PASSWORD: "no" MYSQL_ROOT_PASSWORD: "rootpwd" MYSQL_USER: 'testuser' MYSQL_PASSWORD: 'testpassword' MYSQL_DATABASE: 'testdb' volumes: mariadb-volume: 
    Menyalin

    Di dalam jasa bait, kami mendefinisikan layanan lain dan menyebutnya Mariadb dan dengan gambar instruksi yang kami tentukan kami ingin menggunakan 10.5.2 Versi gambar resmi.

    Dalam definisi layanan sebelumnya kami menggunakan bind mount. Kali ini, sebaliknya, kami menggunakan Docker yang tepat volume bernama, untuk dipasang /var/lib/mysql Di dalam wadah (itu adalah direktori data default yang digunakan oleh mariadb). Tidak seperti bind mount, volume bernama tidak membuat dependensi wadah pada struktur sistem file host. Dikelola sepenuhnya oleh Docker, mereka adalah metode yang disarankan untuk data yang bertahan yang akan hilang saat wadah dihancurkan.

    Volume bernama dapat didefinisikan di utama volume bait dari file konfigurasi dan dapat direferensikan dari volume Subbagian dari setiap layanan yang ditentukan. Dalam hal ini kami menyebut volume kami mariadb-volume.

    Sebagai langkah selanjutnya kami menentukan nilai beberapa Variabel Lingkungan digunakan untuk mempengaruhi perilaku wadah. Variabel lingkungan didefinisikan dalam lingkungan bagian dari definisi layanan. Variabel yang kami tentukan dalam kasus ini memiliki efek berikut:

    Variabel Memengaruhi
    Tz Atur zona waktu yang digunakan oleh server mariadb
    Mysql_allow_empty_password Aktifkan atau nonaktifkan penggunaan kata sandi kosong untuk pengguna root db
    Mysql_root_password Ini adalah variabel wajib dan digunakan untuk mengatur kata sandi pengguna root db
    Mysql_database Secara opsional digunakan untuk menentukan nama database yang akan dibuat pada startup gambar
    Mysql_user Opsional digunakan untuk menentukan nama pengguna yang akan dibuat dengan izin superuser untuk database yang ditentukan dengan mysql_database
    Mysql_password Digunakan untuk menentukan kata sandi untuk pengguna yang dibuat dengan nama yang disediakan oleh mysql_user

    Pada titik ini kita harus memiliki server web yang berfungsi dapat bekerja dengan PHP, dan database untuk menyimpan data kami.

    Bonus - PhpMyadmin

    Tumpukan lampu dasar kami sekarang harus lengkap. Sebagai bonus, kami mungkin ingin menambahkan phpMyadmin untuk itu, untuk dengan mudah mengontrol basis data mariadb kami dari antarmuka web yang ramah pengguna. Mari Tambahkan Definisi Layanan Terkait ke Konfigurasi Komposis Docker kami:

    Versi: '3.Layanan 7 ': php-httpd: gambar: php: 7.Port 3 -Apache: - 80:80 Volume: - "./Documentroot:/var/www/html "mariadb: gambar: mariadb: 10.5.2 volumes: - mariadb-volume:/var/lib/mysql environment: TZ: "Europe/Rome" MYSQL_ALLOW_EMPTY_PASSWORD: "no" MYSQL_ROOT_PASSWORD: "rootpwd" MYSQL_USER: 'testuser' MYSQL_PASSWORD: 'testpassword' MYSQL_DATABASE: 'testdb' phpmyadmin: Gambar: phpMyadmin/phpMyadmin tautan: - 'mariadb: db' port: - 8081: 80 Volume: mariadb -volume: 
    Menyalin

    Kami menamai layanan kami phpMyadmin dan mengonfigurasinya untuk menggunakan phpMyadmin/phpMyadmin Gambar dari Dockerhub. Kami juga menggunakan tautan Kata kunci untuk pertama kalinya; Untuk apa ini? Seperti yang sudah kita ketahui, secara default, dan tanpa konfigurasi khusus yang diperlukan, semua wadah yang dibuat dalam konfigurasi komposisi Docker yang sama dapat berbicara satu sama lain. Gambar phpmyadmin dikonfigurasi untuk merujuk wadah basis data yang sedang berjalan oleh db Nama, oleh karena itu kita perlu membuat alias dengan nama yang sama untuk layanan Mariadb kita. Ini persis apa tautan digunakan untuk: untuk mendefinisikan alias tambahan untuk mencapai layanan dari yang lain.

    Di dalam definisi layanan, kami juga memetakan port 8081 mesin host kami, ke port 80 Di dalam wadah (port 80 sudah dipetakan ke port yang sama di dalam wadah php-httpd). Oleh karena itu antarmuka phpMyadmin akan dapat dicapai pada Localhost: 8081 alamat. Mari kita membangun kembali proyek kita dan memverifikasi:

    $ sudo docker -compose up -d -Build 


    Halaman login phpMyadmin

    Kami dapat masuk dengan kredensial yang kami tentukan untuk layanan database kami, dan memverifikasi bahwa testdb Basis data telah dibuat:



    Beranda phpMyadmin

    Menggunakan gambar khusus untuk layanan

    Dalam contoh di atas kami selalu menggunakan gambar vanilla dalam definisi layanan kami. Ada kasus di mana kami mungkin ingin menggunakan gambar Docker khusus berdasarkan mereka. Misalnya, katakanlah kami ingin membangun layanan php-httpd, tetapi sertakan ekstensi php tambahan: bagaimana kami bisa melakukannya? Pada akar proyek, kami mendefinisikan direktori baru, dan untuk kenyamanan, beri nama setelah layanan:

    $ mkdir php-httpd 

    Di dalam direktori ini kami membuat DockerFile, digunakan untuk memperluas gambar dasar, dengan konten berikut:

    Dari PHP: 7.3-APACHE LABEL MAGERER = "[email protected] "run apt-get update && apt-get install -y libmcrypt-dev \ && peCl install mcrypt-1.0.2 \ && docker-php-ext-enable mcrypt 

    Kembali ke kami Docker-Compose.YML file, kami memodifikasi definisi php-httpd melayani. Kami tidak dapat merujuk gambar secara langsung seperti yang kami lakukan sebelumnya. Sebagai gantinya, kami menentukan direktori yang berisi DockerFile khusus kami sebagai konteks build:

    Versi: '3.Layanan 7 ': php-httpd: build: konteks: ./port php -httpd: - 80:80 volume: - "./Documentroot:/var/www/html "[…] 
    Menyalin

    Dalam membangun bagian kami mendefinisikan konfigurasi yang diterapkan pada waktu pembangunan. Dalam hal ini, kami menggunakan konteks Untuk merujuk direktori yang berisi Dockerfile: Direktori tersebut digunakan sebagai konteks build, dan isinya dikirim ke daemon Docker ketika wadah dibangun. Untuk menerapkan modifikasi, kita harus membangun kembali proyek.

    Ngomong -ngomong, untuk mengetahui lebih banyak tentang ekstensi tambahan dalam gambar PHP Docker, Anda dapat melihat dokumentasi resmi, dan secara khusus Ekstensi Pecl bagian.

    Kesimpulan

    Dalam tutorial ini kami melihat cara membangun tumpukan lampu dasar menggunakan teknologi wadah dengan Docker dan Docker-Compose. Kami melihat cara mendefinisikan berbagai layanan di dalam komposisi Docker.file konfigurasi YML, dan cara mengkonfigurasi mount bind, volume bernama dan pemetaan port host-container. Kami juga melihat cara menggunakan gambar khusus. Anda dapat melihat referensi komposisi Docker untuk daftar instruksi terperinci yang dapat digunakan di dalam file konfigurasi komposisi Docker.

Tutorial Linux Terkait:

  • Ubuntu 20.04 WordPress dengan Instalasi Apache
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Instalasi ampache raspberry pi
  • Instalasi OpenLitespeed WordPress
  • Bagaimana bekerja dengan WooCommerce Rest API dengan Python
  • Cara memasang tumpukan lampu di almalinux
  • Cara Mengatur Linux Apache Mysql Python Server
  • Ubuntu 20.04: WordPress dengan instalasi nginx
  • Cara mengubah kata sandi pengguna mariadb
  • Instal MySQL di Ubuntu 20.04 LTS Linux