docker搭建nginx+php+mysql

  • 官方:DockerPHPLaravel
  • 环境: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 <[email protected]>" --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
登录后进行讨论

sweida

sweida 发表于 2019-05-04 11:19:15

刚想叫博主大佬出个docker搭建laravel的教程,没想到你出了,感谢

点赞 0

juoiy

juoiy 回复 sweida 发表于 2019-05-15 07:00:32

搭建 laravel 环境的话还有一个比较简单的--laradock 可以去了解一下 https://github.com/laradock/laradock

点赞 1

Nick

Nick 发表于 2019-06-15 12:59:39

用 docker-compose 管理好一点

点赞 2