Dockering LEMP Stack me Docker-Compose në Ubuntu
Docker-Compose është një mjet i linjës komanduese për përcaktimin dhe menaxhimin e aplikacioneve docker me shumë kontejnerë. Compose është një skrip python, ai mund të instalohet lehtësisht me komandën pip (pip është komanda për të instaluar softuerin Python nga depoja e paketave python). Me kompozimin, ne mund të ekzekutojmë kontejnerë të shumtë docker me një komandë të vetme. Kjo ju lejon të krijoni një kontejner si shërbim, i shkëlqyeshëm për mjedisin tuaj të zhvillimit, testimit dhe vendosjes.
Në këtë tutorial, unë do t'ju udhëzoj hap pas hapi për të përdorur docker-compose për të krijuar një mjedis LEMP Stack (LEMP=Linux - Nginx - MySQL - PHP). Ne do të ekzekutojmë të gjithë komponentët në kontejnerë të ndryshëm Docker, ne vendosim një kontejner Nginx, kontejner PHP, kontejner PHPMyAdmin dhe një kontejner MySQL/MariaDB.
Kushtet paraprake
- Serveri Ubuntu 16.04 -64 bit
- Privilegjet e rrënjës
Hapi 1 - Instaloni Docker
Në këtë hap, ne do të instalojmë Docker. Docker është i disponueshëm në depon e Ubuntu, thjesht përditësoni depon tuaj dhe më pas instaloni atë.
Përditësoni depon e ubuntu dhe përmirësoni:
sudo apt-get update
sudo apt-get upgrade
Instaloni Docker-in më të fundit nga depoja e ubuntu.
sudo apt-get install -y docker.io
Nisni docker dhe aktivizoni atë të fillojë në kohën e nisjes:
systemctl start docker
systemctl enable docker
Shërbimet Docker po funksionojnë.
Tjetra, mund të provoni të përdorni docker me komandën më poshtë për ta testuar atë:
docker run hello-world
Përshëndetje botë nga docker.
Hapi 2 - Instaloni Docker-Compose
Në hapin e parë, ne kemi instaluar tashmë Docker. Tani do të instalojmë docker-compose.
Ne kemi nevojë për python-pip për instalimin e kompozimit, instaloni python dhe python-pip me apt:
sudo apt-get install -y python python-pip
Kur instalimi të përfundojë, instaloni docker-compose me komandën pip.
pip install docker-compose
Tani kontrolloni versionin docker-compose:
docker-compose --version
Docker-compose është instaluar.
Hapi 3 - Krijoni dhe konfiguroni Mjedisin Docker
Në këtë hap, ne do të ndërtojmë mjedisin tonë docker-compose. Ne do të përdorim një përdorues jo-root, kështu që duhet ta krijojmë atë përdorues tani.
Shtoni një përdorues të ri të quajtur hakase (zgjidhni emrin tuaj të përdoruesit këtu nëse dëshironi):
useradd -m -s /bin/bash hakase
passwd hakase
Më pas, shtoni përdoruesin e ri në grupin docker dhe rinisni dokerin.
usermod -a -G docker hakase
sudo systemctl restart docker
Tani përdoruesi hakase mund të përdorë docker pa sudo.
Më pas, nga përdoruesi rrënjë, hyni në përdoruesin hakase me su.
su - hakase
Krijo një drejtori të re për mjedisin e kompozimit.
mkdir lemp-compose/
cd lemp-compose/
Ky është mjedisi ynë docker-compose, të gjithë skedarët që do të jenë në kontejnerin Docker duhet të jenë në këtë direktori. Kur përdorim docker-compose, na duhet një skedar .yml me emrin docker-compose.yml.
Në drejtorinë lemp-compose, krijoni disa drejtori të reja dhe një skedar docker-compose.yml:
touch docker-compose.yml
mkdir -p {logs,nginx,public,db-data}
- regjistrat: Drejtoria për skedarët e regjistrave Nginx.
- nginx: përmban konfigurimin Nginx si host virtual etj.
- public: direktori për skedarët në ueb, index.html dhe skedar informacioni PHP.
- db-data: vëllimi i drejtorisë së të dhënave MariaDB.
Krijo skedarët e regjistrit error.log dhe access.log në drejtorinë logs.
touch logs/{error,access}.log
Krijoni një skedar të ri konfigurimi të hostit virtual nginx në drejtorinë nginx:
vim nginx/app.conf
Ngjitni konfigurimin më poshtë:
upstream php {
server phpfpm:9000;
}
server {
server_name 193.70.36.50;
error_log "/opt/bitnami/nginx/logs/myapp-error.log";
access_log "/opt/bitnami/nginx/logs/myapp-access.log";
root /myapps;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
Ruani skedarin dhe dilni nga vim.
Krijo një skedar të ri index.html dhe skedar informacioni PHP në drejtorinë publike.
echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
echo '<?php phpinfo(); ?>' > public/info.php
Tani mund të shihni direktorinë e mjedisit siç tregohet më poshtë:
tree
Hapi 4 - Konfigurimi i skedarit docker-compose.yml
Në hapin e mëparshëm, ne kemi krijuar drejtoritë dhe skedarët e nevojshëm për kontejnerët tanë. Në këtë hap, ne duam të modifikojmë skedarin docker-compose.yml. Në skedarin docker-compose.yml, ne do të përcaktojmë shërbimet tona për pirgun LEMP, imazhet bazë për çdo kontejner dhe vëllimet e dokerit.
Identifikohu te përdoruesi hakase dhe modifiko skedarin docker-compose.yml me vim:
su - hakase
cd lemp-compose/
vim docker-compose.yml
- Përcaktoni shërbimet Nginx
Ngjitni konfigurimin nginx më poshtë:
nginx:
image: 'bitnami/nginx'
ports:
- '80:80'
links:
- phpfpm
volumes:
- ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
- ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
- ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
- ./public:/myapps
Në atë konfigurim, ne kemi përcaktuar tashmë:
- nginx: emri i shërbimit
- imazh: po përdorni bitnami/nginx imazhe docker
- portet: ekspozoni portën e kontejnerit 80 në portën pritës 80
- lidhje: lidh kontejnerin e shërbimit nginx me kontejnerin phpfpm
- volume: montoni drejtoritë lokale në kontejner. Montoni direktorinë e skedarëve të regjistrave, montoni konfigurimin e hostit virtual Nginx dhe montoni direktorinë rrënjësore të uebit.
- Përcaktoni shërbimet PHP-fpm
Ngjitni konfigurimin poshtë bllokut Nginx:
phpfpm:
image: 'bitnami/php-fpm'
ports:
- '9000:9000'
volumes:
- ./public:/myapps
Ne përcaktuam këtu:
- phpfpm: përcaktoni emrin e shërbimit.
- imazh: përcaktoni imazhin bazë për shërbimin phpfpm me imazhin bitnami/php-fpm.
- portet: Ne po ekzekutojmë PHP-fpm me portën TCP 9000 dhe ia ekspozojmë portën 9000 hostit.
- vëllimet: montoni direktoriumin rrënjësor të uebit publik në myapps në kontejner.
- Përcaktoni shërbimin MySQL
Në bllokun e tretë, ngjitni konfigurimin më poshtë për kontejnerin e shërbimit MariaDB:
mysql:
image: 'mariadb'
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hakase-labs123
Këtu mund të shihni se ne po përdorim:
- mysql: si emri i shërbimit.
- imazh: kontejneri bazohet në imazhet e dokerit mariadb.
- portet: kontejneri i shërbimit duke përdorur portën 3306 për lidhjen MySQL dhe ekspozoje atë te hosti në portën 3306 .
- vëllimet: db-data directory mysql
- mjedis: vendosni variablin e mjedisit MYSQL_ROOT_PASSWORD për fjalëkalimin rrënjë mysql në imazhet e dokerit, të ekzekutuar gjatë ndërtimit të kontejnerit.
- Konfigurimi i shërbimeve PHPMyAdmin
Blloku i fundit, ngjitni konfigurimin më poshtë:
phpmyadmin:
image: 'phpmyadmin/phpmyadmin'
restart: always
ports:
- '8080:80'
links:
- mysql:mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: hakase-labs123
PMA_HOST: mysql
Ne jemi duke përdorur një imazh të dokerit phpmyadmin, duke hartuar portin e kontejnerit 80 në 8080 në host, e lidhim kontejnerin me kontejnerin mariadb, vendosim rinisjen gjithmonë dhe vendosni disa variabla mjedisi të imazhit të dokerit, duke përfshirë grupin PMA_HOST.
Ruani skedarin dhe dilni nga vim.
Ju mund të shihni shembullin e plotë në github.
Hapi 5 - Ekzekuto Docker-Compose
Tani ishin gati për të ekzekutuar docker-compose. Shënim: kur dëshironi të ekzekutoni docker-compose, duhet të jeni në direktorinë e projektit docker-compose dhe sigurohuni që ekziston skedari yml me konfigurimin e kompozimit.
Ekzekutoni komandën më poshtë për të rrotulluar pirgun LEMP:
docker-compose up -d
-d: funksionon si demon ose sfond
Ju do të shihni rezultatin që kontejnerët e rinj janë krijuar, kontrolloni atë me komandën më poshtë:
docker-compose ps
Tani ne kemi katër kontejnerë që funksionojnë Nginx, PHP-fpm, MariaDB dhe PHPMyAdmin.
Hapi 6 - Testimi
Kontrollimi i porteve që përdoren nga përfaqësuesi docker në host.
netstat -plntu
Mund të shohim portin 80 për kontejnerin Nginx, portin 3306 për kontejnerin MariaDB, portin 9000 për kontejnerin php-fpm dhe portin 8080 për kontejnerin PHPMyAdmin.
Hyni në portin 80 nga shfletuesi i internetit dhe do të shihni skedarin tonë index.html.
Sigurohuni që PHP-fpm po funksionon, hyni në të nga shfletuesi i internetit.
Hyni në kontejnerin MySQL në guaskën MySQL.
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123
Tani krijoni një bazë të dhënash të re:
create database hakase_db;
exit
Kontejneri i guaskës MariaDB mysql është i aksesueshëm dhe ne kemi krijuar një bazë të dhënash të re hakase_db.
Më pas, hyni në PHPMyAdmin në portin 8080: http://serverip-adresa:8080/.
Do të shihni faqen e hyrjes në PHPMyAdmin, thjesht shkruani emrin e përdoruesit root dhe fjalëkalimi është hakase-labs123.
Do të lidheni automatikisht me kontejnerin mysql që është përcaktuar në ndryshoren e mjedisit PMA_HOST.
Klikoni Shko dhe do të shihni pultin e phpmyadmin që është i lidhur me kontejnerin mysql.
Sukses! Stack LEMP po funksionon nën një konfigurim docker-compose, i përbërë nga katër kontejnerë.
Referenca
- https://hub.docker.com/r/bitnami/nginx/
- https://hub.docker.com/r/bitnami/php-fpm/
- https://hub.docker.com/_/mariadb/
- https://hub.docker.com/r/phpmyadmin/phpmyadmin/
- https://docs.docker.com/compose/
- https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose
- https://linux-console.net/tutorial/how-to-create-docker-images-with-dockerfile/