如何在Docker上设置LEMP堆栈
在本教程中,我们将在Docker内设置LEMP堆栈。
我们可以在几分钟内轻松拉动和设置Docker内的LEMP图像。
但是为了更好地了解堆栈,我们将逐个设置nginx,mysql,php/phpmyadmin的每个图像。
一旦掌握了Docker中LEMP堆栈的核心思想,我们就可以尝试将堆栈设置为单个图像。
要在Docker中安装/设置LEMP,我们需要首先安装Docker和Docker。
执行以下命令以安装这两个。
root@demohost:~# apt-get install docker docker-compose
启动Docker服务
root@demohost:~# service docker start
文件夹设置
我们将为LEMP堆栈使用以下文件夹结构。
- 由名称lemp-docker创建一个根目录和一个文件docker-compose.yml
- 对于nginx日志,在LEMP-Docker内的名称"日志"创建目录,并在日志目录中创建两个文件nginx-access.log和nginx-error.log。
- 对于nginx配置文件,通过LEMP-Docker内部的名称"站点可用"创建目录并创建默认配置文件。
- 最后,PHP文件由LEMP-Docker中的名称uply_html创建一个目录。我们将在稍后阶段放置在此目录中的PHP文件。
所以我们的目录结构看起来像以下 -
LEMP-Docker /├──Docker组成。
yml├──日志│├──nginx-access。
日志│└──nginx-error。
log├──public_html│└──索引。
PHP└──可用└──默认
让我们快速创建上面的目录结构和文件。
root@demohost:~# cd ~ root@demohost:~# mkdir LEMP-Docker root@demohost:~# cd LEMP-Docker/ root@demohost:~/LEMP-Docker# mkdir logs root@demohost:~/LEMP-Docker# touch logs/nginx-access.log logs/nginx-error.log root@demohost:~/LEMP-Docker# mkdir sites-available root@demohost:~/LEMP-Docker# touch sites-available/default root@demohost:~/LEMP-Docker# mkdir public_html root@demohost:~/LEMP-Docker# touch docker-compose.yml
接下来,我们将编辑nginx默认配置"默认值"并添加以下内容。
在server_name指令中,放置Docker的IP地址。
要找到它使用命令$ifconfig并查找行inet addr:在行Docker中*
root@demohost:~/LEMP-Docker# vi sites-available/default server { listen 80; # this path MUST be exactly as docker-compose.fpm.volumes, # even if it doesn't exists in this dock. root /usr/share/nginx/html; index index.html; server_name 172.17.0.1; location/{ try_files $uri /index.html$is_args$args; } }
安装nginx.
要设置nginx容器,我们将在Docker-Compose中添加以下内容。
yml文件
root@demohost:~/LEMP-Docker# vi docker-compose.yml nginx: image: tutum/nginx ports: - "80:80" volumes: - ./sites-available/default:/etc/nginx/sites-available/default - ./sites-available/default:/etc/nginx/sites-enabled/default - ./logs/nginx-error.log:/var/log/nginx/error.log - ./logs/nginx-access.log:/var/log/nginx/access.log
上面的Docker组合。
YML将从Tutum/nginx和代理端口80从容器中拉出Nginx图像,以送达Docker主机的端口80。
然后,我们将从nginx/default目录挂载默认的nginx配置文件到可用的站点和启用位站点的nginx容器文件夹。
Similary我们将链接日志/*。
从Docker主机记录以在容器内记录。
现在从CWD中,运行以下命令才能提取并创建nginx容器。
root@demohost:~/LEMP-Docker# docker-compose up -d Pulling nginx (tutum/nginx:latest)... latest: Pulling from tutum/nginx faecf96fd5ab: Pull complete 995977506e98: Pull complete ------------------------ ------------------------ Digest: sha256:69a727916ab40de88f66407fb0115e35b759d7c6088852d901208479bec47429 Status: Downloaded newer image for tutum/nginx:latest ------------------------
要检查实际创建nginx容器,请执行以下命令。
root@demohost:~/LEMP-Docker# docker ps
要在NGINX容器中创建隧道并获取Bash shell,请使用以下命令。
root@demohost:~/LEMP-Docker# docker exec -i -t 75088fe8fe60 bash
现在找到nginx进程
root@75088fe8fe60:/# ps -aux | grep NGINX USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 85892 6572 ? Ss 07:13 0:00 nginx: master process /usr/sbin/nginx www-data 6 0.0 0.3 86212 3428 ? S 07:13 0:00 nginx: worker process www-data 7 0.0 0.3 86212 3428 ? S 07:13 0:00 nginx: worker process www-data 8 0.0 0.3 86212 3428 ? S 07:13 0:00 nginx: worker process www-data 9 0.0 0.3 86212 3428 ? S 07:13 0:00 nginx: worker process
退出nginx容器bash shell
root@75088fe8fe60:/#exit
最后打开我们喜欢的浏览器,将其指向http://<doocker_host_ip>。
我们将以下面的纽金克斯欢迎页面接受迎接。
停止并卸下容器的时间。
root@demohost:~/LEMP-Docker# docker stop 75088fe8fe60 root@demohost:~/LEMP-Docker# docker rm 75088fe8fe60
安装PHP/FPM
为了使用NGINX的PHP,我们需要使用FPM模块的PHP。
因此,我们将编辑Docker-Compose。
yml并选择图像php:fpm指定fpm的端口,它是9000,并将docker主机的public_html目录安装到/usr/share/nginx/html目录的php-fpm容器
phpfpm: image: php:fpm ports: - "9000:9000" volumes: - ./public_html:/usr/share/nginx/html
我们将在后台启动容器并使它们使用以下命令离开它们。
root@demohost:~/LEMP-Docker# docker-compose up -d Pulling phpfpm (php:fpm)... fpm: Pulling from library/php 75a822cd7888: Pull complete e4d8a4e038be: Pull complete ---------------------------- ---------------------------- Digest: sha256:01d1d6345bc30f206fb048c5f1afa882f17f54f275ffe7fd5a83524d8294bc79 Status: Downloaded newer image for php:fpm ----------------------------
使用以下命令检查运行容器,PHP-FPM在端口9000中运行并映射到Docker主机的端口9000。
root@demohost:~/LEMP-Docker# docker ps -a
将隧道创建到PHP-FPM容器中并获取BASH Shell,使用以下命令。
root@demohost:~/LEMP-Docker# docker exec -i -t 841f20b8e7e3 bash
使用以下命令检查容器内的进程。
root@95dec1e1eb47:/var/www/html# ps -aux
一旦我们确定正在运行PHP-FPM容器,我们将修改默认的nginx配置文件,以便它可以处理PHP文件。
在Location/{}部分后,在文件站点中的可用/默认部分添加以下部分。
location ~ \.php${ fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 172.17.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
所以我们的最终NGINX默认配置文件如下所示 -
接下来创建文件索引。
PHP INSION PUBLIC_HTML并添加以下并重新启动PHP-FPM Docker。
root@demohost:~/public_html# vi index.php <?php echo phpinfo(); ?>
重新启动PHP-FPM容器。
root@demohost:~/public_html# docker restart lempdocker_phpfpm_1
将浏览器指向http://<docker-host-ip>/index。
PHP,将显示PHPINFO页面
安装mysql/phpmyadmin
在最后一步中,我们将在Docker主机内设置MySQL和PHPMyAdmin容器。
编辑文件Docker撰写。
yml并添加以下部分
mysql: image: mariadb environment: MYSQL_ROOT_PASSWORD: password phpmyadmin: image: corbinu/docker-phpmyadmin restart: always links: - mysql:mysql ports: - 8183:80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: password
在MySQL部分中,我们将获取MariaDB图像并将环境变量调用mysql_root_password传递给图像。
图像将在构造MySQL容器时将此值作为密码。
在PHPMyAdmin部分中,从Corbinu/Docker-PhpMyAdmin获取图像并使用MySQL Container的MySQL数据库链接此容器。
Docker主机端口NO 8183将是容器端口80的代理(nginx)。
将PHPMyAdmin的用户名的环境设置为root和密码作为"密码"。
启动背景中的容器,并使它们使用以下命令运行。
在执行以下命令之前,不要忘记停止运行容器。
root@demohost:~/LEMP-Docker# docker-compose up -d ------------------------ Pulling mysql (mariadb:latest)... latest: Pulling from library/mariadb 75a822cd7888: Already exists b8d5846e536a: Pull complete ----------------------- ----------------------- Digest: sha256:0ce9f13b5c5d235397252570acd0286a0a03472a22b7f0384fce09e65c680d13 Status: Downloaded newer image for mariadb:latest ----------------------- Pulling phpmyadmin (corbinu/docker-phpmyadmin:latest)... latest: Pulling from corbinu/docker-phpmyadmin 04c460fac791: Pull complete 0a0916b29f3e: Pull complete b25f4e7a7766: Pull complete ---------------------------- ---------------------------- 44f124587a1d: Pull complete Digest: sha256:8ba64f73a8f28f62c00c9515171361b9d5f7a0c6f6fa0aa4418839f9974d098d Status: Downloaded newer image for corbinu/docker-phpmyadmin:latest ----------------------------
现在列出带有以下Docker命令的所有运行容器。
root@demohost:~/LEMP-Docker# docker ps -a
在MySQL容器中创建隧道,然后通过传递用户名和密码获取MySQL shell
root@demohost:~/LEMP-Docker# docker exec -i -t f63eadc48545 mysql -u root -ppassword Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.20-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec)
要获取PHPMYADMIN登录页面,将浏览器指向http://<docker_host_ip>:8183 /类型用户名作为root和密码作为密码,我们将被重定向到phpmyadmin的主页。
让我们现在尝试快速了解堆栈内的流程。
nginx的IP地址设置为Docker主机,默认配置将Web Root设置为/usr/share/nginx/html。
除此之外,CONFIC还从Docker主机安装卷,该卷包括来自Sites_Available的文件和日志目录到容器文件系统的/etc/nginx /站点 - /var/log/nginx目录中的卷:docker-compose的部分。
yml。
(nginx部分)。
Docker。
撰写。
YML还设置Nginx以通过PHP-FPM模块来了解PHP,并定义PHP源文件的基本路径是Public_html目录(PHP-FPM部分)。
MySQL将使用其默认端口3306并链接到nginx服务器,以便PHP应用程序知道其中建立数据库连接。
可以通过Docker主机的端口NO 8083访问PHPMyAdmin,该端口映射到容器的端口NO 80。
MySQL和PHPMyAdmin之间的链接是在将数据库名称为MySQL(MySQL:MySQL)的链接部分中完成的。
我们将LEMP堆栈作为容器安装为容器。
该过程有点耗时。
一旦我们对现在完成的设置有信心,那么我们可以从单个图像安装Docker堆栈。
查看DockerHub以探索所有图像。
要执行此操作,请使用终端的以下命令。
root@demohost:~ docker search LEMP root@demohost:~ docker pull <IMAGE-Name>
然后使用Docker Run命令传递所需的所有参数/配置,在容器内部的LEMP堆栈将在几分钟内完成。