• 第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是个神奇的系统)。

  • 相关阅读:
    How to disable daily upgrade and clean on Ubuntu 16.04
    跟李沐学Ai 03 安装【动手学深度学习v2】
    When using 'npm' it requires me to login to github
    Wrong detect of Parsing error: invalid-first-character-of-tag-name in expression.
    18.04: a stop job is running for unattended upgrades shutdown
    NCSC recommend against forcing regular password expiry,
    OWASP Testing for Weak Password Policy--> When must a user change their password
    NIST Special Publication 800-63: Digital Identity Guidelines Frequently Asked Questions
    Mo Tu We Th Fr Sa Su
    工程变更-ECN,ECO,ECR,ECA
  • 原文地址:https://www.cnblogs.com/YU0000/p/12845302.html
Copyright © 2020-2023  润新知