The first step is to confirm that there are tar packages needed in your environment, and you can use [docker pull]() to download these images
Now we're using a downloaded image, so we need to import it
[root@docker01 ~]# docker load -i nginx.tar && docker load -i wordpress.tar && docker load -i mysql-5.7.tar && docker load -i php.7.2-fpm.tar //Import nginx,wordpress,mysql,php mirrors
Whole process:
Client http requests server port 80, which is mapped to Nginx container port 80 for Nginx processing.
Nginx parses the request, reading the content directly from the server if it is a static resource; if it is a PHP script, invoke the server through the PHP container to get the script, and then FastCGI processes it.
FastCGI parses PHP scripts and accesses MySQL containers to read and write data when necessary.
Deploy LNMP
[172.16.10.0/24]()
[Nginx: 172.16.10.10]()
[Mysql: 172.16.10.20]()
[Php : 172.16.10.30]()
Visit Home Directory of Web Site: /wwroot
Configuration file for Nginx: /docker
/etc/nginx/conf.d #nginx configuration file
[root@docker01 ~]# docker run -itd --name test nginx:latest //Start a nginx to copy the configuration file and access the home directory [root@docker01 ~]# mkdir -p /wwwroot /docker //Create mount directory [root@docker01 ~]# docker cp test:/etc/nginx /docker/ //Copy profile to mount directory [root@docker01 ~]# ls /docker/ nginx
/usr/share/nginx/html #nginx home directory
[root@docker01 ~]# docker cp test:/usr/share/nginx/html /wwwroot/ //Copy Access Directory to Mount Directory [root@docker01 ~]# ls /wwwroot/ html
1) Create a custom network
[root@docker01 ~]# docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 lnmp
2) Run nginx container
[root@docker01 ~]# netstat -anpt | grep 80 //Check if port 80 is occupied
[root@docker01 ~]# docker run -itd --name nginx -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html -p 80:80 --network lnmp --ip 172.16.10.10 nginx //Run a nginx service, specify ip, map port, mount directory
[root@docker01 ~]# docker ps //See if the container exists
[root@docker01 ~]# cd /wwwroot/html [root@docker01 wwwroot]# vim index.html hello lnmp! //Create Test Page [root@docker01 wwwroot]# curl 127.0.0.1 hello lnmp! //Test Access
3) Run mysql container
[root@docker01 html]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123.com -d -p 3306:3306 --network lnmp --ip 172.16.10.20 mysql:5.7 //Run a nginx service, specify ip, map port
-e: Set environment variables
[root@docker02 ~]# docker ps
Install mysql and set the password
[root@docker01 html]# yum -y install mysql //Install mysql [root@docker01 ~]# mysql -u root -p123.com -h 127.0.0.1 -P 3306
Create a new library to verify:
MySQL [(none)]> create database name;
Check to see if there are any libraries just created:
MySQL [(none)]> show databases;
4) Run the php container and create the php page
[root@docker01 html]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php:7.2-fpm
[root@docker01 ~]# cd /wwwroot/html [root@docker01 wwwroot]# vim test.php <?php phpinfo(); ?> //Add php test interface
[root@docker02 ~]# docker ps
5) Modify nginx configuration files, nginx and php connections
[root@docker01 html]# cd /docker/nginx/conf.d/ [root@docker01 conf.d]# vim default.conf
location / { root /usr/share/nginx/html; index index.html index.htm index.php; #10 Add index.php }
location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 172.16.10.30:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Restart nginx after setup
[root@docker01 conf.d]# docker restart nginx //Restart nginx [root@docker01 conf.d]# docker ps
Browser Test Access to nginx and php
The instructions are a connection between nginx and php, no problem, then a connection between PHP and MySQL.Here we use a database management tool called phpmyadmin
6) Modify nginx configuration files, php and mysql connections
[root@docker01 html]# cd /wwwroot/html
Upload phpMyAdmin package If not, download it at https://github.com/phpmyadmin/phpmyadmin/releases
[root@docker01 html]# unzip phpMyAdmin-4.9.1-all-languages.zip //Unzip phpmyadmin package [root@docker01 html]# mv phpMyAdmin-4.9.1-all-languages phpmyadmin //Change the name of the file you just Unzipped [root@docker01 html]# cd /docker/nginx/conf.d/ [root@docker01 conf.d]# vim default.conf //Modify nginx configuration file
location /phpmyadmin { root /usr/share/nginx/html; index index.html index.htm index.php; }
location ~ /phpmyadmin/(?<after_ali>(.*)\.(php|php5)?$) { root /usr/share/nginx/html; fastcgi_pass 172.16.10.30:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
[root@docker01 conf.d]# docker restart nginx [root@docker01 conf.d]# docker ps
Browser Access http://192.168.1.11/phpmyadmin/index.php
Red box is a normal phenomenon, don't panic, we will solve it next
We need to make changes to the php mirror to add php and MySQL connection modules
Write a Dockerfile
[root@docker01 conf.d]# cd [root@docker01 ~]# vim Dockerfile FROM php:7.2-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install mysqli pdo pdo_mysql
Creating php mirror based on dockerfile
[root@docker01 ~]# docker build -t phpmysql . //Create a mirror based on Dockerfile
Remove previous php containers
[root@docker01 ~]# docker stop phpfpm [root@docker01 ~]# docker rm phpfpm //Close and remove php container
Run container with new php image
[root@docker01 ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 phpmysql //Rerun with new php image
//Modify the phpmyadmin configuration file, specify the IP of the connected database, and restart the php container
[root@docker01 html]# cd /wwwroot/html/phpmyadmin/ [root@docker01 phpmyadmin]# cp config.sample.inc.php config.inc.php [root@docker01 phpmyadmin]# vim config.inc.php $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['host'] = '172.16.10.20'; #31 Write the IP address of the mysql database $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['AllowNoPassword'] = false;
[root@docker01 phpmyadmin]# docker restart phpfpm //Restart phpfpm container
Browser Test Access http://192.168.1.11/phpmyadmin/index.php
User name: root password: 123.com
After successful login you will see the database previously created by mysql