1

Dockerizing LEMP Stack with Docker-Compose on Ubuntu

Naka-post sa

Dockerizing LEMP Stack with Docker-Compose on Ubuntu

Docker-Compose ay isang command line tool para sa pagtukoy at pamamahala ng mga application ng multi-container docker. Ang pag-compose ay isang script sawa, maaari itong i-install gamit ang command na pip sa madali (pip ay ang utos na mag-install ng Python software mula sa reporter ng python package). Sa pagsulat, maaari kaming magpatakbo ng maraming mga lalagyan ng docker na may isang solong utos. Pinapayagan ka nitong lumikha ng isang lalagyan bilang isang serbisyo, mahusay para sa iyong pag-unlad, pagsusuri at pagtatanghal na kapaligiran.

Sa tutorial na ito, gagabayan kita ng hakbang-hakbang upang magamit ang docker-compose upang lumikha ng isang kapaligiran ng LEMP Stack (LEMP = Linux - Nginx - MySQL - PHP). Patakbuhin namin ang lahat ng mga bahagi sa iba't ibang mga container ng Docker, nag-set up kami ng isang lalagyan ng Nginx, lalagyan ng PHP, lalagyan ng PHPMyAdmin, at lalagyan ng MySQL / MariaDB.

Kinakailangan

  • Ubuntu server 16.04 -64bit
  • Mga pribilehiyo ng Root

Hakbang 1 - I-install ang Docker

Sa hakbang na ito, i-install namin ang Docker. Available ang Docker sa repository ng Ubuntu, i-update lamang ang iyong imbakan at pagkatapos ay i-install ito.

I-update ang ubuntu repository at mag-upgrade:

sudo apt-makakuha ng update
sudo apt-makakuha ng upgrade

I-install ang pinakabagong Docker mula sa ubuntu repository.

sudo apt-get install -y docker.io

Simulan ang docker at paganahin ito upang magsimula sa oras ng pag-boot:

systemctl start docker
systemctl enable docker

Ang mga serbisyo ng Docker ay tumatakbo.

Susunod, maaari mong subukan ang paggamit ng docker na may utos sa ibaba upang subukan ito:

docker run hello-world

Hello world from docker.

Hello Docker

Hakbang 2 - I-install ang Docker-Compose

Sa unang hakbang, naka-install na kami ng Docker. Ngayon ay i-install namin ang docker-compose.

Kailangan namin ang python-pip para sa pag-install ng compose, i-install ang python at python-pip na may apt:

sudo apt-get install -y python python-pip

Kapag natapos na ang pag-install, i-install ang docker-sumulat gamit ang utos ng pip.

i-install ang pip ng docker-compose

Ngayon, tingnan ang bersyon ng docker-compose:

docker-compose -version

Na-install na ang Docker-compose.

I-install ang Docker Bumuo sa Ubuntu

Hakbang 3 - Lumikha at I-configure ang Docker Environment

Sa hakbang na ito, itatayo namin ang aming docker-compose na kapaligiran. Gagamitin namin ang isang hindi gumagamit ng ugat, kaya kailangan naming likhain ang user na iyon ngayon.

Magdagdag ng bagong gumagamit na pinangalanang 'hakase'(piliin ang iyong sariling pangalan ng user dito kung gusto mo):

useradd -m -s / bin / bash hakase
passwd hakase

Susunod, idagdag ang bagong user sa 'docker'pangkat at i-restart ang docker.

usermod -a -G docker hakase
sudo systemctl restart docker

Ngayon ang user 'hakase'Maaaring gumamit ng docker nang walang sudo.

Susunod, mula sa root user, mag-log in sa user ng 'hakase' na may su.

su - hakase

Lumikha ng isang bagong direktoryo para sa pagsulat ng kapaligiran.

mkdir lemp-compose /
cd lemp-compose /

Ito ang aming docker-compose na kapaligiran, ang lahat ng mga file na dapat nasa lalagyan ng Docker ay dapat nasa direktoryong ito. Kapag gumagamit kami ng docker-compose, kailangan namin ng isang .yml file na pinangalanang 'docker-compose.yml'.

Sa direktoryo ng 'lemp-compose', lumikha ng ilang bagong mga direktoryo at isang docker-compose.yml file:

pindutin ang docker-compose.yml
mkdir -p {logs, nginx, pampubliko, db-data}

  • mga tala: Direktoryo para sa Nginx log file.
  • nginx: Naglalaman ng configuration ng Nginx tulad ng virtual host atbp
  • publiko: direktoryo para sa mga web file, index.html, at file ng impormasyon sa PHP.
  • db-data: Ang dami ng data ng direktoryo ng MariaDB.

Lumikha ng mga log file error.log at access.log sa 'mga tala'direktoryo.

pindutin ang mga log / {error, access} .log

Lumikha ng bagong nginx virtual host configuration file sa 'nginx'direktoryo:

vim nginx / app.conf

I-paste ang configuration sa ibaba:

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; lokasyon / {try_files $ uri $ uri / /index.php?$args; } lokasyon ~ .php $ {isama fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass php; } lokasyon ~ *. (js | css | png | jpg | jpeg | gif | ico) $ {expires max; log_not_found off; }}

I-save ang file at exit vim.

Lumikha ng isang bagong index.html file at PHP file info sa 'publiko'direktoryo.

echo '<h1> LEMP Docker-Gumawa </ h1> <p> <b> hakase-labs </ b>'> public / index.html
echo '<? php phpinfo (); ?> '> public / info.php

Ngayon ay maaari mong makita ang direktoryo ng kapaligiran tulad ng ipinapakita sa ibaba:

puno

Ang Docker ay sumulat ng kapaligiran ng proyekto

Hakbang 4 - Pag-configure ng file na docker-compose.yml

Sa nakaraang hakbang, lumikha kami ng mga direktoryo at mga file na kinakailangan para sa aming mga lalagyan. Sa hakbang na ito, nais naming i-edit ang file na 'docker-compose.yml'. Sa file na docker-compose.yml, tutukuyin namin ang aming mga serbisyo para sa stack ng LEMP, ang mga base na imahe para sa bawat lalagyan, at ang mga docker volume.

Mag-login sa 'hakase'user at i-edit ang docker-compose.yml file na may kalakasan:

su - hakase
cd lemp-compose /
vim docker-compose.yml

- Tukuyin ang mga serbisyo ng Nginx

Ilagay ang configuration nginx sa ibaba:

nginx: image: 'bitnami / nginx' ports: - '80: 80' links: - phpfpm volume: - ./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

Sa configuration na iyon, natukoy na namin ang:

  • nginx: pangalan ng serbisyo
  • larawan: gumagamit kami ng 'bitnami / nginx'docker images
  • daungan: ilantad ang container port 80 sa host port 80
  • mga link: mga link 'nginx'lalagyan ng serbisyo sa'phpfpm'lalagyan
  • mga volume: i-mount ang mga lokal na direktoryo sa lalagyan. I-mount ang direktoryo ng file ng log, i-mount ang configuration ng Nginx virtual host at i-mount ang direktoryo ng root ng web.

- Tukuyin ang mga serbisyo ng PHP-fpm

Ilagay ang configuration sa ibaba ng block Nginx:

phpfpm: image: 'bitnami / php-fpm' port: - '9000: 9000' na volume: - ./public:/myapps

Namin tinukoy dito:

  • phpfpm: tukuyin ang pangalan ng serbisyo.
  • larawan: tukuyin ang base na imahe para sa serbisyo ng phpfpm na may 'bitnami / php-fpm'larawan.
  • daungan: Nagpapatakbo kami ng PHP-fpm sa TCP port 9000 at paglalantad sa port 9000 sa host.
  • mga volume: i-mount ang direktoryo ng root ng web 'publiko'sa'myapps'sa lalagyan.

- Tukuyin ang serbisyo ng MySQL

Sa ikatlong bloke, i-paste ang configuration sa ibaba para sa container service ng MariaDB:

mysql: image: 'mariadb' port: - '3306: 3306' volume: - ./db-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD = hakase-labs123

Dito makikita mo na ginagamit namin ang:

  • MySQL: bilang pangalan ng serbisyo.
  • larawan: ang lalagyan ay batay sa 'mariadb'docker images.
  • daungan: lalagyan ng serbisyo gamit ang port 3306 para sa MySQL connection, at ilantad ito sa host sa port 3306 .
  • mga volume: db-data direktoryo mysql
  • kapaligiran: itakda ang variable ng kapaligiran 'MYSQL_ROOT_PASSWORD'para sa password ng mysql root sa mga imahe ng docker, isinagawa kapag binubuo ang lalagyan.

- Pagsasaayos ng PHPMyAdmin serbisyo

Ang huling bloke, i-paste ang configuration sa ibaba:

phpmyadmin: image: 'phpmyadmin / phpmyadmin' restart: always ports: - '8080: 80' links: - mysql: mysql environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: hakase-labs123 PMA_HOST: mysql

Ginagamit namin ang imaheng docker ng 'phpmyadmin', port ng lalagyan ng pag-map 80 sa 8080 sa host, i-link ang lalagyan sa mariadb lalagyan, itakda ang restart laging at itakda ang ilang mga variable sa kapaligiran ng docker na imahe, kabilang ang 'PMA_HOST'.

I-save ang file at exit vim.

Maaari mong makita ang buong halimbawa sa github.

Hakbang 5 - Patakbuhin ang Docker-Gumawa

Ngayon handa na kaming magpatakbo ng docker-compose. Tandaan: kapag gusto mong magpatakbo ng docker-compose, dapat kang nasa docker-sumulat ng direktoryo ng proyekto at siguraduhing mayroong yml na file sa pagsulat ng pagsasaayos.

Patakbuhin ang utos sa ibaba upang paikutin ang LEMP stack:

docker-compose up -d

-d: tumatakbo bilang demonyo o background

Makikita mo ang resulta na nalikha ang mga bagong lalagyan, suriin ito sa utos sa ibaba:

docker-compose ps

pagpapatakbo ng docker-compose

Ngayon kami ay apat na lalagyan na tumatakbo Nginx, PHP-fpm, MariaDB at PHPMyAdmin.

Hakbang 6 - Pagsubok

Sinusuri ang mga port na ginagamit ng docker-proxy sa host.

netstat -plntu

ang lahat ng port ng docker ay naka-map sa host

Maaari naming makita ang port 80 para sa lalagyan Nginx, port 3306 para sa container MariaDB, port 9000 para sa php-fpm na lalagyan, at port 8080 para sa lalagyan ng PHPMyAdmin.

I-access ang port 80 mula sa web browser, at makikita mo ang aming index.html file.

http://serverip-address/

Ang nginx docker container ay gumagana

Tiyaking tumatakbo ang PHP-fpm, i-access ito mula sa web browser.

http://serverip-address/info.php

Nagtatrabaho ang php-fpm docker container

I-access ang lalagyan ng MySQL sa shell ng MySQL.

docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123

Ngayon ay lumikha ng isang bagong database:

lumikha ng database hakase_db;
lumabas

Ang MariaDB mysql shell lalagyan ay mapupuntahan, at lumikha kami ng isang bagong database 'hakase_db'.

ma-access ang mysql shell docker container

Susunod, ma-access ang PHPMyAdmin sa port 8080: http://serverip-address:8080/.

Makikita mo ang PHPMyAdmin login page, i-type lamang ang pangalan ng user 'ugat'at ang password ay'hakase-labs123'.

phpmyadmin docker container

Ikaw ay awtomatikong nakakonekta sa mysql lalagyan na tinukoy sa PMA_HOST variable ng kapaligiran.

I-click ang 'Go'at makikita mo ang phpmyadmin dashboard na konektado sa'MySQL'lalagyan.

Gumagana ang phpmyadmin at mysql docker container

Tagumpay! Ang LEMP Stack ay tumatakbo sa ilalim ng setup ng docker-compose, na binubuo ng apat na lalagyan.

Sanggunian

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

pinagmulan

Mag-iwan ng Sagot

Ang iyong email address ay hindi ilalathala. Ang mga kailangang field ay may markang *