docker搭建nginx+php+mysql
官方:Docker、PHP、Laravel
环境:mac、nginx-1.14、php-7.2(多版本)、mysql-5.7
目标:实现本地服务docker化,nginx、php、mysql容器互联、docker容器对外开放
1、获取镜像(官方地址:https://hub.docker.com/)
获取nginx
docker pull nginx:1.14
获取php
docker pull php:5.6-fpm
docker pull php:7.2-fpm
获取mysql
docker pull mysql:5.7
2、先启动MySQL(映射本地MySQL数据目录和配置目录)
docker run --name mysql \
-p 33060:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /local/docker/mysql/mysql5.7/data:/var/lib/mysql \
-v /local/docker/mysql/mysql5.7/conf:/etc/mysql \
-d mysql:5.7
配置MySQL
cd /local/docker/mysql/mysql5.7/conf
创建my.cnf 并配置参数并保存
vi my.cnf
重启MySQL
docker restart mysql
3、启动PHP7.2(映射本地的项目目录、php配置、php日志目录)
--link mysql:mysql 表示docker用来链接2个容器 (php7.2访问mysql)
docker run \
--name php7.2 \
--link mysql:mysql \
-v /local/www:/data/www \
-v /local/docker/php/php7.2/conf:/usr/local/etc/php \
-v /local/docker/php/php7.2/logs:/phplogs \
-d php:7.2-fpm
# 配置php.ini
/local/docker/php/php7.2/conf
vi php.ini
重启php7.2
docker restart php7.2
4、启动nginx(映射配置文件目录为本地、本地的配置文件需要手动拷贝一份不然启动不了、映射/data/www为本地的项目目录这个配置的时候需要注意)
docker run -p 80:80 \
--name nginx \
--link php7.2:php7.2 \
-v /local/docker/nginx/nginx1.14/logs:/var/log/nginx \
-v /local/docker/nginx/nginx1.14/etc:/etc/nginx:ro \
-v /local/www:/data/www \
-d nginx:1.14
5、配置nginx配置文件(注意事项:root中/data/www为容器内目录对应本机目录为docker启动时候指定的映射目录、fastcgi_param中需要配置的是php容器中的/data/www目录也是对应本机中的目录、fastcgi_pass中配置的是容器的name) 这里使用的是配置一个简单的laravel项目
fastcgi_pass php7.2:9000; // php7.2为启动时候的link名称
cd /local/docker/nginx/nginx1.14/etc
vi conf.d/default.conf
配置default文件
server
{
listen 80;
server_name laravel.tyl.com;
index index.html index.htm index.php;
root /data/www/laravel/public;
#支持PHP的Fast-CGI 模式
location ~ .*\.(php|php5)?$
{
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /data/www/laravel/public/$fastcgi_script_name;
fastcgi_pass php7.2:9000;
fastcgi_index index.php;
}
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$
{
access_log off;
}
}
重启nginx
docker restart nginx
6、本地配置项目env文件
cd /local/www/laravel
vi .env
laravel中env文件配置DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=mysql
DB_USERNAME=root
DB_PASSWORD=root
7、本地访问
nginx:http://localhost
mysql:127.0.0.1:33060
项目地址:laravel.tyl.com
8、php增加扩展(官方文档:https://hub.docker.com/_/php/)
进人容器php7.2
docker exec -it php7.2 /bin/bash
查看扩展
php -m
官方扩展
docker-php-ext-install php_mysql
退出容器后重启php7.2
9、保存镜像(需要在镜像官方网站申请账号)
# 保存为自己的扩展镜像
docker commit --author "taoyl " --message "增加扩展" php7.2 php:7.2-new
# 提交镜像到官方
docker push php:7.2-new
# 停止和删除当前镜像
docker stop php7.2
docker rm php7.2
# 重新启用新的php镜像 此镜像即为包含扩展的镜像
docker run \
--name php7.2 \
--link mysql:mysql \
-v /local/www:/data/www \
-v /local/docker/php/php7.2/conf:/usr/local/etc/php \
-v /local/docker/php/php7.2/logs:/phplogs \
-d php:7.2-new