zoukankan      html  css  js  c++  java
  • 2020系统综合实践 第3次实践作业

    1.完成Docker-compose的安装

    下载Docker Compose的当前稳定版本

    在windows端访问github,将docker-compose下载到共享文件夹,复制到指定目录下。

    sudo cp 'docker-compose' '/usr/local/bin'
    

    给文件添加可执行权限

    sudo chmod +x /usr/local/bin/docker-compose
    

    创建软连接至一个目录下

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    

    测试安装

    docker-compose --version
    

    2.Dockerfile编写

    采用LNMP(Linux+Nginx+Mysql+PHP)来分别构建web、php应用、数据库等镜像服务。

    拉取镜像

    sudo docker pull php:7.4-fpm
    

    目录结构

    dockerfile_nginx

    #基础镜像
    FROM nginx
    #作者信息
    MAINTAINER lzs<https://www.cnblogs.com/tinygod/>
    #声明暴露的端口
    EXPOSE 2000
    

    dockerfile_mysql

    #基础镜像
    FROM mysql
    #作者信息
    MAINTAINER lzs<https://www.cnblogs.com/tinygod/>
    #设置root密码
    ENV MYSQL_ROOT_PASSWORD 123456
    #设置不可免密登录
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    

    dockerfile_php

    #基础镜像
    FROM php:7.4-fpm
    #作者信息
    MAINTAINER lzs<https://www.cnblogs.com/tinygod/>
    RUN apt-get update && apt-get install -y 
    libfreetype6-dev 
    libjpeg62-turbo-dev 
    libpng-dev 
    && docker-php-ext-install pdo_mysql 
    && docker-php-ext-configure gd --with-freetype --with-jpeg 
    && docker-php-ext-install -j$(nproc) gd
    

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <title>Webtest</title>
    </head>
    <body>
    <h1>My test</h1>
    </body>
    </html>
    

    index.php

    <?php phpinfo();?>
    

    default.conf

    server {
        listen       2000;        #修改映射端口
        server_name  localhost;
    
        location / {
            root   /home/docker_compose/html;     #修改工作目录
            index  index.html index.htm index.php;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location ~ .php$ {
            root           /home/docker_compose/php;          #修改工作目录
            fastcgi_pass   lzsphp:9000;        #修改为容器名
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
            include        fastcgi_params;
        }
    }
    

    docker-compose.yml

    version: "3"
    services:
        nginx:
            image: lzsnginx_image                #指定镜像名
            container_name: lzsnginx             #指定容器名
            build:
                context: .
                dockerfile: ./nginx/dockerfile      #指定dockerfile文件
            ports:
                - "80:2000"                       #修改端口映射,要注意与之前声明的端口匹配
            volumes:
                - ./web:/home/docker_compose/html                  
                - ./default.conf:/home/docker_compose/nginx/default.conf     #配置文件
        php:
            image: lzsphp_image 
            container_name: lzsphp 
            build:
                context: .
                dockerfile: ./php/dockerfile 
            environment:
                MYSQL_PASSWORD: 123456           
            volumes:
                - ./web:/home/docker_compose/php                
    
        mysql:
            image: lzssql_image 
            container_name: lzssql
            build:
                context: .
                dockerfile: ./mysql/dockerfile
            ports:
                - "3306:3306"
            volumes:
                - ./mysql_data:/var/lib/mysql
    

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

    运行docker-compose

    sudo docker-compose up -d --build
    

    查看容器和镜像


    访问

    4.服务测试

    连接测试

    修改index.php

        <?php
        $servername = "lzssql";
        $username = "root";
        $password = "123456";
    
        try {
            $conn = new PDO("mysql:host=$servername;", $username, $password);
            echo "连接成功"; 
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
        ?>
    

    创建数据库

    修改index.php

    <?php
    $servername = "lzssql";
    $username = "root";
    $password = "123456";
    
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
    
        // 设置 PDO 错误模式为异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "CREATE DATABASE test";
    
        // 使用 exec() ,因为没有结果返回
        $conn->exec($sql);
    
        echo "数据库创建成功<br>";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    

    查看数据库信息

      docker exec -it lzssql /bin/bash
      mysql -u root -p
      show databases;
    

    创建数据表

    修改index.php

            <?php
    $servername = "lzssql";
    $username = "root";
    $password = "123456";
    $dbname="test";    
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // 设置 PDO 错误模式,用于抛出异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // 使用 sql 创建数据表
        $sql = "CREATE TABLE test (
     	id bigint(20) NOT NULL,
     	name varchar(255) NOT NULL,
     	email varchar(255) NOT NULL
    	)";
        // 使用 exec() ,没有结果返回 
        $conn->exec($sql);
        echo "数据表创建成功";
    }
    catch(PDOException $e)
    {
        echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    

    查看数据表

        use test
        show tables;
    

    插入数据

    修改index.php

    <?php
    $servername = "lzssql";
    $username = "root";
    $password = "123456";
    $dbname="test";    
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        // 开始事务
        $conn->beginTransaction();
        // SQL 语句
        $conn->exec("INSERT INTO test (`id`, `name`,`email`)
    	VALUES(100,'john','1345311153@qq.com');");
        $conn->exec("INSERT INTO test (`id`, `name`,`email`)
    	VALUES(31702115,'lzs','1345311153@qq.com');");
    
        // 提交事务
        $conn->commit();
        echo "新记录插入成功";
    }    
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
    
    $conn = null;
    ?>
    


    删除数据

    修改index.php

    <?php
    $servername = "lzssql";
    $username = "root";
    $password = "123456";
    $dbname="test";    
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        // 开始事务
        $conn->beginTransaction();
        // SQL 语句
        $conn->exec("delete from test where id=100");
    
        // 提交事务
        $conn->commit();
        echo "记录删除成功";
    }    
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
    
    $conn = null;
    ?>
    

    修改数据

    修改index.php

    <?php
    $servername = "lzssql";
    $username = "root";
    $password = "123456";
    $dbname="test";    
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        // 开始事务
        $conn->beginTransaction();
        // SQL 语句
        $conn->exec("update test set id=666 where name='jack'");
    
        // 提交事务
        $conn->commit();
        echo "记录修改成功";
    }    
    catch(PDOException $e)
    {
        // 如果执行失败回滚
        $conn->rollback();
        echo $sql . "<br>" . $e->getMessage();
    }
    
    $conn = null;
    ?>
    

    5.小结

    • 遇到的问题

    虚拟机网络正常,但不能访问github网站

    • 解决方法

    在windows端访问github,下载docker-compose到共享文件夹,在虚拟机上将文件复制到目录/usr/local/bin/docker-compose下
    总用时:6小时

  • 相关阅读:
    洛谷 P1850 换教室(期望dp)
    简单异或 && 洛谷 P1469 找筷子 && 洛谷 P3908 数列之异或
    2020 CSP-J复赛题解
    2018 ICPC 南京 D Country Meow(模拟退火|三分)
    佩尔方程
    块速幂/光速幂
    1436F
    反Nim游戏
    P1447 [NOI2010]能量采集(莫比乌斯反演)
    P3768 简单的数学题 (莫比乌斯反演+杜教筛)
  • 原文地址:https://www.cnblogs.com/tinygod/p/12845741.html
Copyright © 2011-2022 走看看