加载中...

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。并且后面加上长连接!

 

posted @ 2020-05-01 17:40  NinjaMaster  阅读(328)  评论(0编辑  收藏  举报