第三次系统综合实践

docker-compose的安装



若安装好了可以输入docker-compose --version若可以看到docker-compose的版本则安装成功

编写html与php


编写Dockerfile编写

dockerfile_nginx

default.conf

dockerfile_php

dockerfile_mysql

docker-compose.yml

存放以上文件

将这些文件用一个docker_compose文件夹保存起来(其中的source.list后面会讲到,mysql_data只需要建一个空文件夹就好)

使用Compose实现多容器运行机制

验证是否成功

通过访问localhost/index.htmllocalhost/index.php验证是否成功

查看html,这里因为中文会乱码,因此html中出现了奇怪的符号,原因目前还不清楚

查看php

服务测试

利用php对数据库进行连接

在index.php文件中写下一下代码,并通过浏览器查看php文件

$servername = "mysql";    #注意这里要用自己自定义的Mysql的容器名
$username = "root";
$password = "tuffy1216";     #密码也可以直接使用yml中的变量名
 
try {
    $conn = new PDO("mysql:host=$servername", $username, $password);
    echo "连接成功"; 
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

利用php对数据库进行建立数据库

在index.php文件中写下一下代码,并通过浏览器查看php文件

$servername = "mysql";
$username = "root";
$password = "tuffy1216";
 
try {
    $conn = new PDO("mysql:host=$servername", $username, $password);
    echo "连接成功"; 

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE wjjDB";

    // 使用 exec() ,因为没有结果返回
    $conn->exec($sql);

    echo "数据库创建成功<br>";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>


可以输入一下代码,查看数据库

利用php对数据库进行增加表格

在index.php文件中写下一下代码,并通过浏览器查看php文件

$servername = "mysql";
$username = "root";
$password = "tuffy1216";
$dbname="wjjDB";        #变量设置
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);    #选择数据库
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 使用 sql 创建数据表
    $sql = "CREATE TABLE student(
    s_id INT(8) UNSIGNED PRIMARY KEY, 
    s_name VARCHAR(30) NOT NULL,
    s_age INT DEFAULT NULL
)";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "数据表 student 创建成功";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>


利用php对数据库进行增加记录

在index.php文件中写下一下代码,并通过浏览器查看php文件

<?php
$servername = "mysql";
$username = "root";
$password = "tuffy1216";
$dbname="wjjDB";        #变量设置
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 开始事务
    $conn->beginTransaction();
    // SQL 语句
    $conn->exec("INSERT INTO student (s_id,s_name,s_age) 
    VALUES (031702537, 'wjj',22)");
    $conn->exec("INSERT INTO student (s_id,s_name,s_age) 
    VALUES (031702538, 'cgh',22)");
    $conn->exec("INSERT INTO student (s_id,s_name,s_age) 
    VALUES (031702539, 'lqy',22)");
 
    // 提交事务
    $conn->commit();
    echo "新学生信息导入成功!";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>


利用php对数据库进行修改记录

在index.php文件中写下一下代码,并通过浏览器查看php文件

<?php
$servername = "mysql";
$username = "root";
$password = "tuffy1216";
$dbname="wjjDB";        #变量设置
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 开始事务
    $conn->beginTransaction();
    // SQL UPDATE语句
   $conn->exec("UPDATE student SET s_age='21' WHERE s_name='lqy'");
 
    // 提交事务
    $conn->commit();
    echo "记录修改成功!";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>


通过前后对比可以看到,lqy的年龄变为了21

利用php对数据库进行删除记录

在index.php文件中写下一下代码,并通过浏览器查看php文件

<?php
$servername = "mysql";
$username = "root";
$password = "tuffy1216";
$dbname="wjjDB";        #变量设置
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 开始事务
    $conn->beginTransaction();
    // SQL DELETE语句
   $conn->exec("DELETE FROM student where s_id=031702538");
 
    // 提交事务
    $conn->commit();
    echo "031702538学生信息删除成功!";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>


可以看到学号为031702538的学生记录被删除了

选做

对docker-compose.yml文件进行修改

增加一段创建pymyadmin的代码

创建一个dockerfile_pymyadmin文件

其内容为

#基础镜像
FROM phpmyadmin/phpmyadmin            
#作者信息
MAINTAINER wjj
#声明暴露的端口
EXPOSE 8080

打开用浏览器打开php可以看到



过程中发现的问题

(1)php无法下载经常出现超时情况

多亏了群里的大佬,利用还原的办法,使得php下载速度变快,并且不会超时,具体方法就是创建一个source.list文件,其内容为

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

并在dockerfile_php的run之前加一段COPY sources.list /etc/apt

(2)访问index.html的时候显示连接被重置

一开始在这里卡了非常久的时间,总是不停重做,后来问了同学,才发现原来是我nginx的端口设置成1008,一般只要设置成80就可以

(3)增加pymyadmin的时候报错


原因是我在增加pymyadmin文件内容时把,这段代码加在了文件末尾

phpmyadmin:
            image: wjjphpmyadmin_image
            container_name: wjjphpmyadmin
            build: 
                context: .
                dockerfile: dockerfile_phpmyadmin
            ports: 
                - "8080:80" # phpmyadmin默认监听80
            environment:
                PMA_HOST: mysql                     #指定mysql服务所在的host

应该如前文所示加在nginx的前面

感想

这次的作业我还是用了特别久的时间从下午2点做到晚上12点,我也是佩服我自己,主要时间都浪费在了index.html上,如果不是后来有同学帮助,我可能都很难完成这次作业,感谢大佬的帮助。

原文地址:https://www.cnblogs.com/J-J-1008/p/12836528.html