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 publikmyapps 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 808080 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/