Cara Membuat Tumpukan Lampu Berbasis Docker Menggunakan Docker di Ubuntu 20.04
- 4868
- 1187
- John Ratke
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
Persyaratan dan konvensi perangkat lunak yang digunakan
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 |
-
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, danDocker-Compose
, yang merupakan utilitas yang memungkinkan kami dengan mudah mengatur aplikasi multi-kontainer menggunakanyaml
file konfigurasi. Kedua paket tersedia di repositori resmi Ubuntu. Kami dapat menginstalnya melaluitepat
:$ 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
-
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
opsimkdir
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 dipanggilDocker-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.
-
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:
MenyalinVersi: '3.Layanan 7 ': php-httpd: gambar: php: 7.Port 3 -Apache: - 80:80 Volume: - "./DocumentRoot:/var/www/html "
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, versi3.7
adalah yang terbaru dan direkomendasikan. - 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 iniPHP: 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 port80
di host ke port80
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 keDocker-Compose
memerintah. Dengan proyek dan berjalan, jika kita menavigasilocalhost
Dengan browser kami, kita harus melihat halaman berikut:
Halaman phpinfoUntuk 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:
MenyalinVersi: '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:
Di dalam jasa bait, kami mendefinisikan layanan lain dan menyebutnya
Mariadb
dan dengangambar
instruksi yang kami tentukan kami ingin menggunakan10.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 darivolume
Subbagian dari setiap layanan yang ditentukan. Dalam hal ini kami menyebut volume kamimariadb-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:
MenyalinVersi: '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:
Kami menamai layanan kami
phpMyadmin
dan mengonfigurasinya untuk menggunakan phpMyadmin/phpMyadmin Gambar dari Dockerhub. Kami juga menggunakantautan
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 olehdb
Nama, oleh karena itu kita perlu membuat alias dengan nama yang sama untuk layanan Mariadb kita. Ini persis apatautan
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 port80
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 phpMyadminKami 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 definisiphp-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:
MenyalinVersi: '3.Layanan 7 ': php-httpd: build: konteks: ./port php -httpd: - 80:80 volume: - "./Documentroot:/var/www/html "[…]
Dalam
membangun
bagian kami mendefinisikan konfigurasi yang diterapkan pada waktu pembangunan. Dalam hal ini, kami menggunakankonteks
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
- « Ubuntu 20.04 Instalasi Desktop Cinnamon
- Cara mendaftar dan menghapus repositori PPA di Ubuntu 20.04 Linux »