准备
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

测试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 安装nginx+mysql+php] https://blog.51cto.com/12123659/2301479
评论列表(0条)