zoukankan      html  css  js  c++  java
  • 第三次系统综合实践

    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上,如果不是后来有同学帮助,我可能都很难完成这次作业,感谢大佬的帮助。

  • 相关阅读:
    [LUOGU] 1364 医院设置
    [POJ] 3278 Catch That Cow
    [OpenJudge] 2727 仙岛寻药
    [POJ] 2386 Lake Counting
    [POJ]1118 Lining up
    [LUOGU]1141 01迷宫
    [POJ]1111 Image Perimeters
    python之路——初识函数
    python----------文件操作
    Python中的split()函数的用法
  • 原文地址:https://www.cnblogs.com/J-J-1008/p/12836528.html
Copyright © 2011-2022 走看看