docker 实现 mysql+nginx+php

首先创建一个新的 Docker 网络 这里是用来测试   使用名称test

docker network create -d bridge test

docker network ls 可查看  docker网络

拉取mysql镜像  这里 用mysql5.7  :5.7标签 也是指 版本号

docker pull mysql:5.7

  开始之前 把主机目录的 文件夹先建立好 加好相应权限

mysql 需要挂载的目录

/var/lib/mysql
/etc/mysql/conf.d

挂载详情

# 主机目录:容器目录
/etc/docker/mysql/data:/var/lib/mysql 
/etc/docker/mysql/conf:/etc/mysql/conf.d 

复制容器相应文件 到本机  事先先创建一个测试容器 进行文件复制

# docker cp container_ID/容器名称:容器目录 主机目录
docker cp mysql:
/var/lib/mysql /etc/docker/mysql/data

docker cp mysql:/etc/mysql/conf.d /etc/docker/web/mysql/conf

命令实现

docker run --name --network test mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 --privileged=true -v /etc/docker/mysql/data:/var/lib/mysql -v /etc/docker/mysql/conf:/etc/mysql/conf.d --restart=always -d mysql:5.7

命令详情

docker run 
--name mysql # 指定容器名称
--network test #添加到test网络
-e MYSQL_ROOT_PASSWORD=root  # 初始化root用户的密码为root
-p 3307:3306 # 将容器的3306端口映射到主机的3307端口
--privileged=true # 给容器加上特定的权限,否则可能会出现常见容器失败的情况
-v /etc/docker/mysql/data:/var/lib/mysql # 挂载目录 mysql数据文件
-v /etc/docker/mysql/conf:/etc/mysql/conf.d # 挂载目录 mysql配置文件
--restart=always # 设置失败自动重启   可写为 --restart=on-failure:5  最多重启五次
-d mysql:5.7

拉取php 镜像 默认最新版本

docker pull php

需要挂载的目录

/var/www/html 

与mysql类似  在本地创建相应容器挂载目录 进行权限修改 文件复制等等

 

命令实现:

docker run --name --network test php -p 9000:9000 --privileged=true -v /etc/docker/php/web/www/:/wwwroot  --restart=always -id php

命令详情 与 mysql 一样

 

扩展安装 

docker exec -it [container id]/container name bash #进入容器

# 进入容器执行命令安装扩展 docker
-php-ext-install [扩展名称]
# 我放置了tplay框架 安装 pdo_mysql 未安装之前报错 could not find driver # 安装GD库 apt update #更新软件源 apt install
-y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库 docker-php-source extract #解压源码 cd /usr/src/php/ext/gd #gd源码文件夹 docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译 docker-php-ext-install gd #编译安装 php -m | grep gd docker restart [container ID]/容器name #重启容器


上述gd扩展如出现 MySQL安装不上pdo_mysql 用如下命令
docker-php-ext-install -j$(nproc) bcmath calendar exif gettext \
sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm
 

安装nginx

 

需要挂载的容器目录

/usr/share/nginx/html 
/etc/nginx/conf.d 

同上  复制   容器文件 到本机

docker run --name nginx --network test -p 8080:80  --privileged=true -v /etc/docker/nginx/web/www:/wwwroot -v /etc/docker/nginx/conf.d:/etc/nginx/conf.d  --restart=always -id nginx

 

Nginx配置文件参考

server {
        listen       80;
        server_name  www.buxin.com;
 
        root   /wwwroot/docker/public; # 项目在容器里的目录
        index index.php index.html index.htm;
 
        location / {
            if (!-e $request_filename){
                   rewrite  ^(.*)$  /index.php?s=$1  last;   break;
            }
        }
 
        error_page   500 502 503 504  /50x.html;
     
        location ~ \.php$ {
            fastcgi_pass   PHP容器IP:PHP端口;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            include        fastcgi_params;
       }
}

本机hosts 文件添加 127.0.0.1 www.buxin.com

 docker查看镜像元信息  可以查到php容器 ip

docker inspect [container id]/[container name] 

example     : "IPAddress": "172.18.0.4",

 

选自:     https://www.cnblogs.com/yulongcode/p/12719548.html

posted @ 2020-06-05 10:28  卜鑫  阅读(431)  评论(0编辑  收藏  举报