ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# **第一步:前期准备** **** 1.先在D盘建两个文件夹**project**和**config**.**project**放项目文件,**config**放nginx,mysql,php等配置文件 然后 在**Oracle VM VirtualBox**设置共享文件夹,如下图片所示 ![](https://img.kancloud.cn/4d/d4/4dd4ba05274847cbb33e55631f74da96_973x572.png) 记得把**自动挂载**勾选上,这样docekr启动后,会自动加载,启动后如下图所示: ![](https://img.kancloud.cn/92/5e/925ec9d271ef164afafe492c46dab5a2_638x686.png) 2.下载mysql(版本5.7),php(版本7.2),nginx(版本1.16)镜像 `docker pull mysql:5.7 ` `docker pull php:7.2-fpm` `docker pull nginx:1.16` ***** # **第二步:创建容器** ***** #### 1.创建mysql容器 创建mysql容器之前,先在`D:\config\mysql\conf`创建配置文件` my.conf`,下面是配置代码: ``` [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [mysqld] # 设置3306端口 port =3306 #存放数据的目录 datadir=/var/lib/mysql # 允许最大连接数 max_connections=20 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 collation-server = utf8mb4_unicode_ci # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB #认证方式(如果这里不修改,会新版的密码认证,会连接不了数据库的,并且要放到mysqld下) default_authentication_plugin = mysql_native_password ``` #### 创建mysql容器 `docker run -d -v /config/mysql/log:/var/log/mysql -v /config/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin123 --name mysql57 mysql:5.7 ` > 参数说明 > -d 让容器在后台运行 > -v 添加目录映射,即主机上的**D:\config\mysql\log,D:\config\mysql\conf**分别和容器中`/var/log/mysql,/etc/mysql/conf.d`目录是同步的 > -p 添加主机到容器的端口映射 > -e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置 > –name 容器的名字,随便取,但是必须唯一 > **进入mysql 终端** `docker exec -it mysql57 bash` > 参数说明 > > -t 在容器里生产一个伪终端 > -i 对容器内的标准输入 (STDIN) 进行交互 **登陆mysql** `mysql -uroot -p` 输入密码后,如出现以下的错误信息, `mysql: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored. ` 这是配置文件`my.conf`的权限太高了,需要设置为只读即可.如下图所示: ![](https://img.kancloud.cn/d8/77/d877ea8e46e3d02814532f943b631668_725x618.png) 然后重启mysql容器,这样`my.conf`的配置就会生效 `docker restart mysql57 ` **登陆mysql后,设置下权限,方便外部访问** ``` GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'admin123'; FLUSH PRIVILEGES; ``` 利用`navicat`连接测试,如下图 ![](https://img.kancloud.cn/f8/65/f865f479df5048636564289892927c02_566x668.png) ***** ### 2:创建php容器 `docker run -d -v /project/www/html:/usr/share/nginx/html/ -p 9000:9000 --link mysql57:mysql --name php72 php:7.2-fpm ` > 参数说明 > > -d 让容器在后台运行 > -p 添加主机到容器的端口映射 > -v 添加目录映射,即主机上的/project/www/html:和容器中/usr/share/nginx/html/目录是同步的 > –name 容器的名字 > –link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。 这里如果不指定–link参数其实也是可以得,因为容易本身也是有ip的且唯一,所以我们也可以直接利用ip去访问容器。 进入容器,安装 pdo 以便后边测试数据库连接,在docker容器中可以这样来安装 > docker exec -it php72 bash > docker-php-ext-install pdo_mysql ![](https://img.kancloud.cn/4e/88/4e8833ee21083c84fa4b0aee8304ceda_638x561.png) 重启php容器 `docker restart php72` ***** ### 第三步:安装nginx 1.16 在`D:\config\nginx\conf.d`目录下创建配置文件:`default.conf`,代码如下: ``` server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_pass php72:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } ``` 创建容器 映射了配置文件和文件目录 ` docker run -d -p 80:80 -v /project/www/html:/usr/share/nginx/html/ -v /config/nginx/conf.d:/etc/nginx/conf.d --link php72:phpfpm --name nginx116 nginx:1.16` ***** # **第三步:测试** **1.查看服务** ![](https://img.kancloud.cn/99/f8/99f8cf3df3590e6f5a19e7dd9d54cc8a_1643x119.png) 三个容器都在运行状态 **2.测试php解析** 在`D:\project\www\html`下创建`index.php`文件,输入下面的代码 ~~~ <?php phpinfo(); ~~~ 访问`index.php` ![](https://img.kancloud.cn/91/22/9122e88deefb5fc5ed516df4957acbe1_1118x806.png) ![](https://img.kancloud.cn/e6/c7/e6c74211e1a6420730fb50335da3e246_1007x632.png) **3.测试 mysql 链接** 修改index.php ~~~ <?php // phpinfo(); $dbms = 'mysql'; //数据库类型 $host = '192.168.99.100'; //数据库主机名,此处写mysql容器的名字会出现错误,直接用docker的ip地址即可 $dbport = '3306'; $dbName = 'mysql'; //使用的数据库 $user = 'root'; //数据库连接用户名 $pass = 'admin123'; //对应的密码 $dsn = "$dbms:host=$host;port=$dbport;dbname=$dbName"; try { $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象 echo "连接成功<br/>"; $dbh = null; } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); } ~~~ ![](https://img.kancloud.cn/af/bd/afbd340d6f581173ac9a7d420d54a63f_521x111.png) 看到这个,说明我们的配置成功了