WSL2通过docker部署PHP环境

安装WSL2

安装WSL2及docker参照:http://www.884358.com/windows11-wsl2/

通过docker compose部署

目录结构

  1. ├── Dockerfile
  2. ├── conf
  3.    └── timezone.cnf
  4.    └── buffer.cnf
  5. ├── docker-compose.yml
  6. ├── dump
  7.    └── mydb.sql
  8. └── www
  9. └── index.php

说明:conf、dump、www为文件夹。其中conf文件夹用于映射到/etc/mysql/conf.d/目录,该目录是是MySQL中用于存放额外配置文件的目录。它的主要作用是允许用户或管理员在不修改主配置文件(/etc/my.cnf)的情况下,添加自定义配置或覆盖默认配置。dump文件夹将映射到/docker-entrypoint-initdb.d目录,该目录是Docker官方MySQL镜像中用于初始化数据库的特殊目录。它的主要作用是在容器首次启动时,自动执行目录中的 SQL 脚本或 Shell 脚本,以完成数据库的初始化工作。www目录为网站根目录。

docker-compose.yml

  1. version: "3.1"
  2. services:
  3. www:
  4. build: .
  5. ports:
  6. - "80:80"
  7. volumes:
  8. - ./www:/var/www/html/
  9. links:
  10. - db
  11. networks:
  12. - default
  13. db:
  14. image: dockerpull.cn/mysql:8.0
  15. ports:
  16. - "3306:3306"
  17. command: --default-authentication-plugin=mysql_native_password
  18. environment:
  19. MYSQL_DATABASE: myDb
  20. MYSQL_USER: user
  21. MYSQL_PASSWORD: test
  22. MYSQL_ROOT_PASSWORD: root
  23. volumes:
  24. - ./dump:/docker-entrypoint-initdb.d
  25. - ./conf:/etc/mysql/conf.d
  26. - persistent:/var/lib/mysql
  27. networks:
  28. - default
  29. # phpmyadmin:
  30. # image: phpmyadmin/phpmyadmin
  31. # links:
  32. # - db
  33. # ports:
  34. # - 8000:80
  35. # environment:
  36. # MYSQL_USER: user
  37. # MYSQL_PASSWORD: test
  38. # MYSQL_ROOT_PASSWORD: test
  39. volumes:
  40. persistent:

Dockerfile

  1. FROM dockerpull.cn/php:7.4-apache
  2. # 修改源
  3. RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  4. RUN sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  5. # 打开rewrite
  6. RUN a2enmod rewrite
  7. # 安装扩展
  8. RUN docker-php-ext-install pdo pdo_mysql
  9. RUN apt-get update \
  10. && apt-get install -y libzip-dev \
  11. && apt-get install -y zlib1g-dev \
  12. && rm -rf /var/lib/apt/lists/* \
  13. && docker-php-ext-install zip \
  14. && docker-php-ext-install mysqli

dump/mydb.sql

  1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  2. SET time_zone = "+00:00";
  3. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  4. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  5. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  6. /*!40101 SET NAMES utf8mb4 */;
  7. CREATE TABLE `person` (
  8. `id` int(11) NOT NULL,
  9. `name` varchar(20) NOT NULL
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  11. INSERT INTO `person` (`id`, `name`) VALUES
  12. (1, 'William'),
  13. (2, 'Marc'),
  14. (3, 'John');
  15. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  16. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  17. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

www/index.php

  1. <html>
  2. <head>
  3. <title>Hello...</title>
  4. <meta charset="utf-8">
  5. <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  6. </head>
  7. <body>
  8. <div class="container">
  9. <?php echo "<h1>Hello,docker!</h1>"; ?>
  10. <?php
  11. $conn = mysqli_connect('db', 'user', 'test', "mydb");
  12. $query = 'SELECT * From person';
  13. $result = mysqli_query($conn, $query);
  14. echo '<table class="table table-striped">';
  15. echo '<thead><tr><th></th><th>id</th><th>name</th></tr></thead>';
  16. while($value = $result->fetch_array(MYSQLI_ASSOC)){
  17. echo '<tr>';
  18. echo '<td><a href="#"><span class="glyphicon glyphicon-search"></span></a></td>';
  19. foreach($value as $element){
  20. echo '<td>' . $element . '</td>';
  21. }
  22. echo '</tr>';
  23. }
  24. echo '</table>';
  25. $result->close();
  26. mysqli_close($conn);
  27. ?>
  28. </div>
  29. </body>
  30. </html>

conf/timezone.cnf

调整时区

  1. [mysqld]
  2. default-time-zone = '+08:00'

conf/buffer.cnf

调整缓冲区大小

  1. [mysqld]
  2. innodb_buffer_pool_size = 1G

conf/charset.cnf

自定义字符集

  1. [mysqld]
  2. character-set-server = utf8mb4
  3. collation-server = utf8mb4_unicode_ci

开始构建

  1. docker-compose up -d

访问

通过WSL的IP即可访问:

参考第三方开源库

https://github.com/jcavat/docker-lamp

发表评论

邮箱地址不会被公开。 必填项已用*标注

发表评论前,请滑动滚动条解锁
三十岁