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 <snail_tyl@sina.com>" --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