1. 文章
  2. 文章详情

使用docker部署MySQL+PHP-FPM+Nginx服务

准备

docker pull mysql
docker pull nginx
docker pull bitnami/php-fpm

关键命令

docker ps -a # 查看宿主机部署的所有容器
docker exec -it containerid /bin/bash # 进入正在运行的容器的内部
docker inspect container  # 查看容器的详细信息,比如查找IPAddress等

关键参数:

-v 宿主机目录:虚拟机目录
-p 宿主机端口:虚拟机端口
--name my-name 指定下容器的别名
-d 以deamon守护进程的形式运行
--restart: always(挂掉就重启), on-failure:Number(失败就重启,到达Number次数上限后不再重启),   no(永不重启)  需要注意的是--restart是由docker的守护进程完成的,一般都会和-d参数共同出现

--expose port 暴露虚拟机内部的某个端口

MYSQL

启动mysql服务

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

查找出mysql服务的本地IP地址

docker ps -a # 找出mysql容器的id
docker inspect mysql-container-id # 找到里面的IPAddress即可

修改root用户权限以用于访问。

mysql -uroot -p123456
use mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
alter  user 'root'@'%' identified by '123456';
FLUSH PRIVILEGES;

NGINX

启动NGINX服务

➜  nginx ls
conf.d www
➜  nginx docker run -d -p 80:80 -v $PWD/www:/usr/share/nginx/html -v $PWD/conf.d/:/etc/nginx/conf.d --name local-nginx nginx

需要注意的是宿主机的路径映射到虚拟机的对应目录下之前,记得本地先mkdir

PHP-FPM

启动php-fpm服务

➜  nginx docker run -d -p 9000:9000 --name local-phpfpm -v /Users/biao/Docker/nginx/www:/var/www/html bitnami/php-fpm
affcf36a04fe38fe92f2d1535a816d4993076e0fbcba9fc6adcfb1911e62b19b
➜  nginx docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
affcf36a04fe        bitnami/php-fpm     "php-fpm -F --pid /o…"   3 seconds ago       Up 2 seconds        0.0.0.0:9000->9000/tcp              local-phpfpm
def7c36da7bb        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->80/tcp                local-nginx
fcc02b919109        mysql:latest        "docker-entrypoint.s…"   19 minutes ago      Up 19 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   local-mysql

需要注意的是这里的宿主机www目录被映射到了php-fpm的html目录下,和上一步的NGINX其实共享了宿主机的同一个目录。

连接php-fpm和NGINX的配置,核心在于fastcgi_pass参数,利用IP+端口的形式,让NGINX请求php-fpm的处理,而不能使用unix-socket这种形式,因为后者只能在同一台机器上处理。容器化后肯定就不能用这种形式了。

修改conf.d目录下的default.conf为如下内容:

server {

  listen  80 default_server;
  server_name _;
  root   /usr/share/nginx/html;
  location / {
   index index.html index.htm index.php;
   autoindex off;
  }
  location ~ .php(.*)$ {
   root   /var/www/html/;
   fastcgi_pass 172.17.0.4:9000;   #php容器的IP地址
   fastcgi_index index.php;
   fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param PATH_INFO $fastcgi_path_info;
   fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
   include  fastcgi_params;
  }
}

测试

测试NGINX访问PHP-fpm,在www目录下创建phpinfo.php文件

phpinfo();

然后访问链接:http://localhost/phpinfo.php

docker部署MySQL+PHP-FPM+Nginx服务


测试NGINX访问数据库以及php, 在www目录下创建testdb.php

";
    //你还可以进行一次搜索操作
     foreach ($dbh->query('SELECT * from user') as $row) {
         print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
     }
    $dbh = null;
 } catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "
"); }

docker部署MySQL+PHP-FPM+Nginx服务

参考自: - [docker 安装nginx+mysql+php] https://blog.51cto.com/12123659/2301479

发表评论

登录后才能评论

评论列表(0条)