docker安装nginx+redis+php+mysql
首先操作系统win10 并且安装了docker
php
php安装
docker pull php:5.6-fpm
#docker pull php 获取最新的php
redis
redis安装
docker pull redis
docker run -d --name my-redis -p 6379:6379 -v /d/docker/redis/data:/data redis --appendonly yes
参数说明:
-d ------ 后台运行
--name ------ 实例运行后的名字 my-redis
-p6379:6379 ------ 端口映射,冒号前面是windows下的端口,后面是虚拟机的端口
-v /d/docker/redis/data:/data ------ 保存数据的位置。
d:\docker\redis\data 前面是windows下的实际保存数据目录
/data 虚拟机内的目录
redis --appendonly yes ------ 在容器执行redis启动命令,并打开redis持久化配置。
docker exec -it my-redis redis-cli
info
php安装redis扩展
docker exec -it my-php5.6 /bin/bash
#先建个目录:
mkdir -p /usr/src/php/ext
#执行下面的扩展:
curl -L -o /tmp/redis.tar.gz http://pecl.php.net/get/redis-2.2.7.tgz && tar -zxvf /tmp/redis.tar.gz && rm -r /tmp/redis.tar.gz && mv redis-2.2.7 /usr/src/php/ext/redis && docker-php-ext-install redis
重启php
docker restart my-php5.6
phpinfo()
php连接redis
docker network ls
# 查看bridge networkId
docker network inspect 3e2dd6a4e463
nginx
nginx安装
docker pull nginx
nginx配置
创建配置文件(路径D:\docker\nginx\conf) 特别关注一下 之后挂载会用到
D:\docker\nginx\conf\runoob-test-php.conf
runoob-test-php.conf
server {
listen 80;#监听端口号
server_name localhost;
location / {
root /usr/share/nginx/www; #路径
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
location ~ \.php$ {
fastcgi_pass php:9000; [^1]
: 注脚的解释
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www/$fastcgi_script_name;
include fastcgi_params;
}
}
php运行
docker run --name my-php5.6 -v D:/docker/nginx/www:/usr/share/nginx/www php:5.6-fpm
//注意你的文件路径
--name my-php5.6 : (--name)将容器命名为 my-php5.6。
-v ~/nginx/www:/www : 将本地项目的目录 www 挂载到容器的 www
nginx运行并挂载
docker run --name my-nginx -p 8080:80 -d -v D:/docker/nginx/www:/usr/share/nginx/www -v D:/docker/nginx/conf:/etc/nginx/conf.d --link my-php5.6:php nginx
nginx重启
docker restart my-nginx
fastcgi_pass 1
mysql
mysql安装
docker pull mysql:5.7.31
mysql运行
docker run --name my-mysql -p 3306:3306 -d -v D:/docker/mysql/data:/mysql_data -v D:/docker/mysql/logs:/logs -v D:/docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --link my-php5.6 mysql:5.7.31
phpinfo 没有pdo
添加扩展 首先进入php
docker exec -it my-php5.6 /bin/bash
#pdo
docker-php-ext-install pdo
#pdo_mysql
docker-php-ext-install pdo_mysql
连接数据库 localhost连不上
查看容器的地址
docker network ls
#bridge network id
docker network inspect bfada1238aaf6
经常会问到nginx和php-fpm的进程的进程的通信方式,这里用到是TCP
Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket.
TCP是IP加端口,可以跨服务器.
UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一个文件,由php-fpm生成 ↩︎