安装WSL2
安装WSL2及docker参照:http://www.884358.com/windows11-wsl2/
通过docker compose部署
目录结构
├── Dockerfile
├── conf
│ └── timezone.cnf
│ └── buffer.cnf
├── docker-compose.yml
├── dump
│ └── mydb.sql
└── www
└── 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
version: "3.1"
services:
www:
build: .
ports:
- "80:80"
volumes:
- ./www:/var/www/html/
links:
- db
networks:
- default
db:
image: dockerpull.cn/mysql:8.0
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: root
volumes:
- ./dump:/docker-entrypoint-initdb.d
- ./conf:/etc/mysql/conf.d
- persistent:/var/lib/mysql
networks:
- default
# phpmyadmin:
# image: phpmyadmin/phpmyadmin
# links:
# - db
# ports:
# - 8000:80
# environment:
# MYSQL_USER: user
# MYSQL_PASSWORD: test
# MYSQL_ROOT_PASSWORD: test
volumes:
persistent:
Dockerfile
FROM dockerpull.cn/php:7.4-apache
# 修改源
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# 打开rewrite
RUN a2enmod rewrite
# 安装扩展
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get update \
&& apt-get install -y libzip-dev \
&& apt-get install -y zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install zip \
&& docker-php-ext-install mysqli
dump/mydb.sql
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
CREATE TABLE `person` (
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `person` (`id`, `name`) VALUES
(1, 'William'),
(2, 'Marc'),
(3, 'John');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
www/index.php
<html>
<head>
<title>Hello...</title>
<meta charset="utf-8">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<?php echo "<h1>Hello,docker!</h1>"; ?>
<?php
$conn = mysqli_connect('db', 'user', 'test', "mydb");
$query = 'SELECT * From person';
$result = mysqli_query($conn, $query);
echo '<table class="table table-striped">';
echo '<thead><tr><th></th><th>id</th><th>name</th></tr></thead>';
while($value = $result->fetch_array(MYSQLI_ASSOC)){
echo '<tr>';
echo '<td><a href="#"><span class="glyphicon glyphicon-search"></span></a></td>';
foreach($value as $element){
echo '<td>' . $element . '</td>';
}
echo '</tr>';
}
echo '</table>';
$result->close();
mysqli_close($conn);
?>
</div>
</body>
</html>
conf/timezone.cnf
调整时区
[mysqld]
default-time-zone = '+08:00'
conf/buffer.cnf
调整缓冲区大小
[mysqld]
innodb_buffer_pool_size = 1G
conf/charset.cnf
自定义字符集
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
开始构建
docker-compose up -d
访问
通过WSL的IP即可访问:
参考第三方开源库
https://github.com/jcavat/docker-lamp