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

    (1)完成Docker-compose的安装

        1、下载Docker-compose

         2、添加执行权限和测试

    参考资料:Install Docker Compose

    (2)Dockerfile编写

    • Dockerfile-nginx  
    //Dockerfile
    FROM nginx
    LABEL author=zxl
    #由于yml文件里面有配置文件的挂载,所以这里不用过多操作。
    
    //default.conf server { listen 80; server_name localhost; location / { root /var/www/html; # nginx容器中web文件存放目录,和yml对应 index index.html index.htm index.php; } location ~ .php$ { root /var/www/html; # php容器中web文件存放目录,和yml对应 fastcgi_pass zphp:9000; # php服务器默认端口9000 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 
    • Dockerfile-php
    FROM php:7.4-fpm
    LABEL author=zxl
    RUN apt-get update && apt-get install -y 
        libfreetype6-dev 
        libjpeg62-turbo-dev 
        libpng-dev 
        && docker-php-ext-install pdo pdo_mysql 
        && docker-php-ext-configure gd --with-freetype --with-jpeg 
        && docker-php-ext-install -j$(nproc) gd 
        && rm -rf /var/cache/apt/* 
        && rm -rf /var/lib/apt/lists/*
    • Dockerfile-mysql

                   由于mysql的配置不是很复杂,所以这里就放到yml文件里面

    •  index.php
    <?php
    $host = "zdb";
    $username = "root";
    $password = "123456";
    $dsn="mysql:host=$host;";
    try {
        $db = new PDO($dsn, $username, $password,array(PDO::ATTR_PERSISTENT=>true));
        echo "连接成功"; 
    }
    catch(PDOException $e)
    {
        echo "连接失败"; 
        echo $e->getMessage();
    }
    //创建数据库和表
    $db->exec("create database if not exists leilei;");
    echo "数据库创建成功!<br>";
    $db->exec("use leilei;");
    $db->exec("create table if not exists test1(name char(20));");
       echo "表格创建成功!<br>";
    //插入数据
     $sql2 = "INSERT INTO test1 (name) VALUES ('wg');";  
        $db->exec($sql2);
        echo "记录插入成功!<br>";
    //查看数据
        echo "查看数据:<br>";
        showdata($db);
    //修改数据
    $db->exec("update test1 set name='baozi' where name='wg';");
        echo "修改后的数据:<br>";
        showdata($db);
       
    //删除数据
    $db->exec("delete from test1;");
       echo "删除后的数据:<br>";
    showdata($db);
    
    function showdata($db){
        $sql = "select * from test1";
        $result = $db->query($sql);
        if(is_object($result)){
        while ($arr = $result->fetch()) {
            print_r($arr);
            }
            echo "<br/>";
        }
        else{
            print_r($db->errorinfo());
         echo "<br/>";
        }
    }
    ?>
    • 查看文件树结构(由于mysql_data里面文件过多,所以只看了两层)

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

    • 编写compose文件
    version: '3'
    services:
        nginx:
          container_name: zngx
          build:
              context: .
              dockerfile: Dockerfile-nginx
          ports:
              - "80:80"
          volumes:
              - ./web_dir/:/var/www/html/
              - ./default.conf:/etc/nginx/conf.d/default.conf
          networks:
              - front_end
        php:
          container_name: zphp
          build:
              context: .
              dockerfile: Dockerfile-php
          environment:
              MYSQL_PASSWORD: 123456
          volumes:
              - ./web_dir/:/var/www/html/
          networks:
              - front_end
              - back_end
          depends_on:
              - mysql
        mysql:
          image: mysql:5.7
          container_name: zdb
          restart: always
          volumes:
              - ./mysql_data:/var/lib/mysql
          ports:
              - "3306:3306"
          environment:
              TZ: 'Asia/Shanghai'
              MYSQL_ROOT_PASSWORD: 123456
          command: ['mysqld', '--character-set-server=utf8']
          networks:
              - back_end
        phpmyadmin:
          build:
              context: .
              dockerfile: Dockerfile-phpmyadmin
          container_name: phpmyadmin
          ports:
              - "8080:80"
          environment:
              PMA_HOST: zdb
          networks:
              - back_end
    networks:
       front_end:
       back_end:
    • 运行docker-compose.yml文件

     

    (4)服务测试

    • 验证index.html

    • 验证index.php

    (5)Phpmyadmin

    • 在yml文件里面添加phpmyadmin

    • 写一个Dockerfile-phpmyadmin

    • 浏览器输入8080端口进入首页登录

    •  登录进入并查看表信息(由于index.php最后执行delete操作,所以没有数据)

     

    •  修改index.php,向里面插入数据并验证

     六、小结

      1、由于在写yml文件时无意间加入了table,导致运行时报错。

      key:一行一行的去用backspace检验table的存在。唉,自己种下的恶果自己要尝。

       2、在build phpmyadmin时由于要访问mysql_data里面的文件,但恰恰里面的文件却都加锁了。

           key:一个个把需要用到的文件赋予读写权限

      3、在调用index.php时,报出空对象异常

       key:原因是我在index.php连接数据库时用的host时localhost,而实际上运行的容器zdb拥有自己独立的IP,这里将host改为zdb或容器IP。并且后面加上长连接!

  • 相关阅读:
    从Oracle提供两种cube产品说开
    Sql Server DWBI的几个学习资料
    Unload Oracle data into text file
    初学Java的几个tips
    我常用的Oracle知识点汇总
    benefits by using svn
    如何在windows上使用putty来显示远端linux的桌面
    building commercial website using Microsoft tech stack
    Understand Thread and Lock
    Update google calendar by sunbird
  • 原文地址:https://www.cnblogs.com/huckleberry/p/12771736.html
Copyright © 2011-2022 走看看