Docker Php + mysql + nginx

 1 # 一、数据库搭建(MySQL)
 2 #    1.拉取mysql镜像
 3         docker pull mysql:5.6.50
 4 #    2.启动镜像:--name(容器名), MYSQL_ROOT_PASSWORD指定root用户的密码,MYSQL_DATABASE指定创建镜像的时候自动创建的数据库名,-d后台运行
 5         docker run --name mysql -e MYSQL_ROOT_PASSWORD=123123 -e MYSQL_DATABASE=DBname -d mysql:5.6.50
 6 #    3.从镜像容器里备份数据库,你也可以通过-U指定备份哪个数据库
 7         docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"123123"' > ~/all-databases.sql
 8 #    4.恢复数据库到容器:-u指定mysql用户,-p指定密码,-D指定需要恢复的数据库名
 9         docker exec -i some-mysql sh -c 'exec mysql -uroot -p"123123" -DDBname' < ~/b2b_20220501_hbh_20220620_160337.sql
10 #    5.其他操作:
11 #        进入容器:docker exec -it --user root mysql(容器名) /bin/sh
12 #        连接数据库:mysql -u root -p
13 #        查询所有数据库名:show DATABASES;
14 #        选择数据库:use DBname;
15 #        查询数据库中所有表:SELECT TABLE_NAME 表名,TABLE_COMMENT 表注释,TABLE_ROWS 数据量 FROM information_schema.tables ORDER BY TABLE_NAME;
16 #        查询容器IP地址:docker inspect 容器ID或容器名 |grep '"IPAddress"'
17 # 二、php环境搭建
18 #    1.编写dockerfile
19 #        php:5.6-fpm镜像并不包含gd、mysqli拓展内容,所以可以自己制作镜像把依赖提前写进去,这样就不用到容器了去手动安装了
20             FROM php:5.6-fpm
21             RUN apt-get update && apt-get install -y \
22                     libfreetype6-dev \
23                     libjpeg62-turbo-dev \
24                     libpng-dev \
25                 && docker-php-ext-configure gd --with-freetype --with-jpeg \
26                 && docker-php-ext-install -j$(nproc) gd \
27                 && docker-php-ext-install mysql \
28                 && docker-php-ext-install mysqli
29             RUN docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include \
30                 && docker-php-ext-install gd
31             RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \
32                 && pecl install memcached-2.2.0 \
33                 && docker-php-ext-enable memcached
34 #    2.制作镜像:
35         docker image build -t myphp:v1 -f php.Dockerfile(这个文件内容就是上面的) .
36 #    3.启动镜像
37 #        你的php项目目录:我这里是/home/pc1/docker/home目录下的home目录(你们项目没有特殊要求大可不必加),这个目录需要在容器运行的时候配置映射,在nginx配置fastcgi解释代理器(也就是当前容器)的时候需要配置
38 #        项目文件夹权限:chmod -R 766 home/runtime
39 #        -v(目录映射) -p端口映射  --name(指定容器名) -d(后台运行)  --privileged(设置为true开启更多权限)
40         docker run -d -v /home/pc1/docker/home:/var/www/html -p 9000:9000 --privileged=true --name xqw_php myphp:v1
41         
42 # 三、nginx环境搭建
43 #    如果你要自己搭建的话也简单:https://www.cnblogs.com/watermeloncode/p/15476317.html
44 #    你也可以通过docker去做:/home/pc1/docker/home是我们的php项目路径、~/nginx.conf是我们nginx配置代理文件,-p端口映射
45         docker run --name some-nginx -v /home/pc1/docker/home:/usr/share/nginx/html:ro -v ~/nginx.conf:/etc/nginx/nginx.conf:ro -d -p 8080:80 nginx
46 #    最重要的nginx.conf配置
47         location / {
48           if (!-e $request_filename){  
49               # 这里的/home就是我多加一层目录的原因
50                 rewrite ^/home/index.php(.*)$ /home/index.php?p=$1 last; # 重定向到index.php((.*)$的值可能是目录或者其他任何东西,都交给index.php去处理)
51                 rewrite ^/home/(.*)$ /home/index.php?p=$1 last; # 这里重定向是为了,你访问/home/的时候也默认让index.php去处理
52           }
53         }
54 
55         location ~ \.php$ { # 配置php代理解释器
56             fastcgi_pass   localhost:9000; # 指定代理解释器。也就是我们开启的php容器,映射的9000端口
57             fastcgi_index  index.php;        # 默认php文件
58             fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name; # 这里的/var/www/html是php容器启动是映射的值
59             include        fastcgi_params;
60         }

 

1 # 伪静态配置
2 #    在php项目文件夹根目录下新增文件:.htaccess
3 <IfModule mod_rewrite.c>
4     Options +FollowSymlinks
5     RewriteEngine on
6     RewriteCond %{REQUEST_FILENAME} !-d
7     RewriteCond %{REQUEST_FILENAME} !-f
8     RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
9 </IfModule>

 有空再来整理成yml

posted @ 2022-06-23 14:28  看一百次夜空里的深蓝  阅读(476)  评论(0编辑  收藏  举报