zoukankan      html  css  js  c++  java
  • 第3次实践作业

    相关文件

    一、完成Docker-compose的安装

    参考资料

    (1)将docker-compose文件上传到linux系统上

    (2)查看环境变量

    cp docker-compose /usr/bin
    

    (3)将docker-compose放在/usr/bin目录下

    cp docker-compose /usr/bin
    

    (4)此文件用户和用户组为root,如果此处用户和用户在不为root,先应该变成root组合root用户

    chown -R root:root docker-compose
    

    (5)增加此文件可执行权限

    chmod +x docker-compose
    

    (6)测试docker-compse

    二、Dockerfile编写(采用LNMP)

    参考资料

    (1)docker pull下载镜像

    (2)新建文件夹dockerlnmp

    (3)创建必要文件

    (4)查看树状结构

    tree
    
    docker-compose-lnmp/
    |-- docker-compose.yml
    |-- html
    |   |-- index.html
    |   `-- index.php
    |-- mysql
    |   `-- Dockerfile
    |-- nginx
    |   |-- conf
    |   |   `-- default.conf
    |   `-- Dockerfile
    `-- phpfpm
        `-- Dockerfile
    

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

    参考资料

    (1)编写docker-compose.yml

    (2)执行docker-compose文件

    sudo docker-compose up -d
    

    (3)查看镜像和容器

    sudo docker ps
    

    (4)访问localhost/index.html和/index.php

    (5)查看树状结构

    四、服务测试

    参考资料

    (1)如图所示已经安装了pdo

    (2)连接mysql

    <?php
    $servername = "192.168.0.110";    #这里用虚拟机ip地址
    $username = "root";
    $password = "123456";     #密码也可以直接使用yml中的变量名
    
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
        echo "连接成功";
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    ?>
    

    (3)创建数据库

    <?php 
    $servername = "192.168.0.110";    
    $username = "root";
    $password = "123456";     #密码也可以直接使用yml中的变量名
     
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
    
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "CREATE DATABASE myDBPDO";
    
        // 使用 exec() ,因为没有结果返回
        $conn->exec($sql);
    
        echo "数据库创建成功<br>";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    

    (4)进入mysql容器查看数据库是否创建成功

    (5)进入数据库创建表格

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

    (6)进入mysql容器查看表格是否创建成功

    (7)数据库中插入数据

    <?php
    $servername = "192.168.0.110";    
    $username = "root";
    $password = "123456";     #密码也可以直接使用yml中的变量名
    $dbname="myDBPDO";        #变量设置
    
    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 (id,name) 
        VALUES (031702627, 'Li Laoshi')");
        $conn->exec("INSERT INTO Student (id,name) 
        VALUES (031702666, 'wxy abc')");
        $conn->exec("INSERT INTO Student (id,name) 
        VALUES (031700000, 'TOM')");
    
        // 提交事务
        $conn->commit();
        echo "新记录插入成功";
    }
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    (8)数据库中插入数据

    <?php
    $servername = "192.168.0.110";    
    $username = "root";
    $password = "123456";     #密码也可以直接使用yml中的变量名
    $dbname="myDBPDO";        #变量设置
    
    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 name='Last' WHERE id=031702666");
        //SQL  DELETE语句
        $conn->exec("DELETE FROM Student where id=031700000");
        // 提交事务
        $conn->commit();
        echo "修改,删除成功";
    }
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
     
    $conn = null;
    ?>
    

    (9)进入mysql容器查看数据

    五、phpmyadmin实现web端的数据库管理

    (1)pull phpmyadmin

    sudo docker pull phpmyadmin/phpmyadmin
    

    (2)编写Dockerfile和docker-compose.yml

    #Dockerfile
    FROM phpmyadmin/phpmyadmin:latest
    MAINTAINER by y00
    
     #docker-compose.yml添加:
     phpmyadmin:
        build: ./phpmyadmin
        container_name: "phpmyadmin"
        ports:
         - "8080:80"
        links:
         - "mysql"
        environment:
         - PMA_ARBITRARY=1
    

    (3)查看树状结构

    (4)重新执行docker-compose

    (5)web端使用phpmyadmin

    • 输入账号密码

    • 进入数据库

    • 查看表格

    • 修改表格名称

    • 原表格不存在

    • 增加属性

    • 增加一条数据

    • 进入mysql容器查看数据库变化

    六、主要问题和解决方法

    (1)将docker-compose放在/usr/bin目录下时没有改文件名

    将文件名改成docker-compose

    (2)docker-compose up出错

    starting nginx失败

    查了资料是因为主机里存在的文件不能映射到容器里存在的目录,进入容器删掉文件

    关闭并删除之前的docker-compose

    sudo docker-compose down
    

    重新执行docker-compose up

    (3)docker-compose down出错

    参考资料

    经查询是docker-compose.yml格式错误,有几行多打了一个空格,修改之后可以执行

    (4)web端不能使用phpmyadmin(一开始分配的端口号是8088)

    由于修改了docker-compose.yml,所以要先docker-compose down再执行docker-compose up,修改之后可以使用

    七、花费时间

    项目 时间(估算)
    Docker-compose的安装 20min
    Dockerfile编写 2h
    Compose实现多容器运行 3h
    服务测试 1.5h
    phpmyadmin实现web端的数据库管理 2h
    写博客 2h

    一开始不熟悉docker-compose,一部分镜像还没拉取就compose-up,还有一些细节比如docker-compose.yml格式的错误也找了很久,后来感觉有点混乱就重做了一遍。一开始尽量把需要的镜像都装了,后面再增加的话需要先关闭docker-compose再启动,遇到实在无解的问题,先关机再重启试试看,如果还是不行,就换个思路做吧hhh(linux是个神奇的系统)。

  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/YU0000/p/12845302.html
Copyright © 2011-2022 走看看