//搜索公有库的nginx
docker search nginx
//找到合适的下载
docker pull nginx
//安装mysql:5.6
docker pull mysql:5.6
//安装redis:3.2
docker pull redis:3.2
安装php-fpm
docker pull php:7.1.7-fpm-alpine
nginx -t //查看配置文件路径
/etc/nginx/nginx.conf //nginx配置文件路径
netstat -tanlp//查看端口
kill pid//杀死进程 pid进程id
//注意运行顺序 因为服务是隔离开的单独的镜像,要使用–link关联下
//link是通过在容器启动时修改/etc/hosts文件来实现的
//运行mysql
docker run -p 3306:3306 --name mymysql -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6
//运行 redis 容器
docker run --name redis -p 6379:6379 -v /data/redis/conf/:/etc/redis/redis.conf -d redis:3.2
//运行php
docker run -p 9000:9000 --name php7.17-fpm -v /var/www:/var/www/html -v /var/php7.1:/usr/local/etc/php --link mymysql:mymysql --link redis:redis --privileged=true -d php:7.1.7-fpm-alpine
//运行nginx容器 -v 前面是宿主主机的目录 : 容器的目录
docker run -p 80:80 --name nginx --privileged=true -v /var/nginx:/usr/share/nginx/html -v /var/nginx/log:/var/log/nginx -d nginx:latest
//进入php容器安装扩展
docker exec -ti php7.17-fpm /bin/sh
或者
docker exec -ti php7.17-fpm /bin/bash
//安装
docker-php-ext-install pdo pdo_mysql
docker-php-ext-install redis
配置下主机的 nginx.conf
server {
listen 80;
server_name localhost;
root "~/var/www";
location / {
index index.html index.htm index.php l.php;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
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;
}
}
总结:
1、对于php-fpm容器来说,php-fpm的www.conf配置文件里,监听的IP导致不能是127.0.0.1,必须是0.0.0.0;否则会导致后续nginx这边出现404(查看问题)。
Copy
;listen = 127.0.0.1:9000
listen = 0.0.0.0:9000
2、nginx容器必须使用–link连接到php-fpm容器。
3、nginx容器和php-fpm容器的www目录必须是一致的。
4、nginx容器配置fastcgi_pass的时候需要修改为–link里的名称(实际为主机名称,会在nginx容器的/etc/hosts新增一条主机记录)。
5、如果nginx容器需要支持更多端口访问,那么使用-p范围表示,示例:-p 80-90:80-90。或者多个-p参数。
6、-v参数指定的本地挂载目录(示例里的/work)子目录(例如/www)在宿主机不能是软链接,否则会导致nginx 404,因为软链接在容器里是无效的。但是/work本身可以是软链接。