2020系统综合实验 第3次实践作业

(1)完成Docker-compose的安装

1、下载Docker-compose

 2、添加执行权限和测试

参考资料:Install Docker Compose

(2)Dockerfile编写

  • Dockerfile-nginx

 

  • Dockerfile-php

  • 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里面文件过多,所以只看了两层)

扫描二维码关注公众号,回复: 11163391 查看本文章

(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时,报出空对象异常

猜你喜欢

转载自www.cnblogs.com/huckleberry/p/12771736.html