ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Docker学习笔记05_部署nginx+php+mysql+phpmyadmin

2019-09-17 18:04:21  阅读:299  来源: 互联网

标签:xj phpmyadmin 05 nginx conf mysql opt php


1、准备工作

docker pull 下载好需要的镜像文件:

[root@Docker-Test mysql]# docker pull nginx

[root@Docker-Test mysql]# docker pull php:7.1-fpm

[root@Docker-Test mysql]# docker pull mysql

[root@Docker-Test mysql]# docker pull phpmyadmin/phpmyadmin

2、启动Nginx

docker run -d -p 8080:80 --name xj_nginx1 nginx

  • --name  自定义容器名称。
  • -d  设置容器在在后台一直运行。
  • -p  端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。

在浏览器中打开 http://IP:8080/,效果如下:

3、启动php-fpm+Nginx容器

为了方便管理,预先创建几个相关的文件目录

mkdir -p /opt/nginx/conf/conf.d && mkdir /opt/nginx/www && mkdir /opt/nginx/logs

解释执行 php 需要 php-fpm,先启动此容器:

docker run --name xj_php-fpm -d -v /opt/nginx/www:/var/www/html:ro php:7.1-fpm

  • --name 自定义容器名字。-v 路径映射
  • /opt/nginx/www 是本地 php 文件的存储目录,/var/www/html 是xj_php-fpm容器内 php 文件的存储目录,ro 表示只读。

/opt/nginx/conf.d路径下创建default.conf文件

(亦可从已运行的nginx容器内拷贝后修改  docker cp xj_nginx1:/etc/nginx/conf.d/default.conf /opt/nginx/conf/conf.d/default.conf)

文件内容如下:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

配置文件说明:

  • php:9000: 表示 php-fpm 服务的 URL
  • /var/www/html 是 容器xj_php-fpm 中 php 文件的存储路径,映射到宿主机的 /opt/nginx/www 目录。

启动支持php的ngnix容器:

docker run --name xj_nginx2 -p 8081:80 -d -v /opt/nginx/www:/usr/share/nginx/html:ro -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d:ro --link xj_php-fpm:php nginx

 

  • -p 8081:80 用于添加端口映射,把 xj_nginx2 中的 80 端口暴露出来。
  • /opt/nginx/www 是本地 html 文件的存储目录,/usr/share/nginx/html 是xj_nginx2容器内 html 文件的存储目录。
  • /opt/nginx/conf/conf.d 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是xj_nginx2容器内 nginx 配置文件的存储目录。
  • --link xj_php-fpm:php 把容器xj_php-fpm 的网络并入xj_nginx2,并通过修改xj_nginx2的 /etc/hosts,把域名php映射成 容器xj_php-fpm使用的IP地址,让 nginx 通过 php:9000 访问 php-fpm。

 

在/opt/nginx/www路径下创建一个php测试页面 index.php:

<?php
echo phpinfo();
?>

浏览器打开 http://IP:8081/index.php,验证成功:

4、启动 mysql容器

同样,先在宿主机系统里创建几个mysql相关的文件目录

mkdir -p /opt/mysql/conf /opt/mysql/data /opt/mysql/logs

启动mysql容器,并关联到已运行的php-fpm容器:

docker run -p 3306:3306 --name xj_mysql -v /opt/mysql/conf:/etc/mysql/conf.d -v /opt/mysql/logs:/logs -v /opt/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD='123qwe' -d --link xj_php-fpm:php mysql

  • -p 3306:3306 用于添加端口映射,把 容器xj_mysql 中的 3306 端口暴露出来。
  • /opt/mysql/conf 是本地mysql配置文件的存储目录,/etc/mysql/conf.d是xj_mysql容器内配置文件的存储目录,-v参数将两者映射,同理映射对应的data和logs目录
  • -e MYSQL_ROOT_PASSWORD='123qwe' 使用-e使容器启动时执行命令,此条命令设置了容器内mysql 的root用户密码
  • --link xj_php-fpm:php 把容器xj_php-fpm 的网络并入xj_mysql,并通过修改xj_mysql的 /etc/hosts,把域名php映射成 容器xj_php-fpm使用的IP地址,让 mysql通过 php:9000 访问 php-fpm。

 5、启动 phpmyadmin容器

docker run -p 8082:80 --name xj_phpmyadmin -d --link xj_mysql:db phpmyadmin/phpmyadmin

  • -p 8082:80 用于添加端口映射,把 容器xj_phpmyadmin 中的 80 端口暴露出来。
  • --link xj_mysql:db 把容器xj_mysql 的网络并入xj_phpmyadmin,并通过修改xj_phpmyadmin的 /etc/hosts,把域名db映射成 容器xj_mysql使用的IP地址,让 phpmyadmin 通过 db 访问 mysql数据库。

浏览器打开 http://IP:8082,终于看到了phpmyadmin的登录界面。

输入root用户名密码,出现报错:

 两条错误信息,google了一下,大致是说root用户的验证方式caching_sha2_password不被phpmyadmin应用支持。

不过我修改mysql user表,把root验证方式改成mysql_native_password后又开始报错说root用户无法远程访问,我再修改mysql user表放开root用户的远程访问权限,都没有解决这个页面使用root用户登录的问题,折腾了几天实在找不到问题原因,只好新建了一个admin用户并授权才登录成功,这个问题留着慢慢找原因和想解决办法吧,哎!

 

标签:xj,phpmyadmin,05,nginx,conf,mysql,opt,php
来源: https://www.cnblogs.com/xjcn/p/11504498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有