zoukankan      html  css  js  c++  java
  • 系统综合实践第三次作业博客

    系统综合实践第三次作业博客

    实践内容

    (1)安装Dockercompose

    $ curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /home/yqy/docker-compose

    安装docker-compose.png

    安装docker-compose(已换源)

    为docker-compose添加权限:$ sudo chmod +x /home/yqy/docker-compose

    这里如果先前没有FROM所需的镜像,直接build镜像也能自动下载

    (2)准备Dockerfile

    ---------------------------------------------------------Dockerfile_php---------------------------------------------------------
    
    FROM php:7.4-fpm
    
    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
    
    ---------------------------------------------------------Dockerfile_mysql---------------------------------------------------------
    
    FROM mysql:5.7
    
    ENV MYSQL_ROOT_PASSWORD 777777
    
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no
    
    ---------------------------------------------------------Dockerfile_nginx---------------------------------------------------------
    
    FROM nginx:latest
    
    EXPOSE 8010
    
    ---------------------------------------------------------Dockefile_phpmyadmin---------------------------------------------------------
    
    FROM phpmyadmin/phpmyadmin      
    EXPOSE 8020
    
    Dockerfiles

    (2)其他配置文件

    ---------------------------------------------------------Docker-compose.yml---------------------------------------------------------
    version: "3"
    services:
    
     nginx:
    
     image: snginximage         #指定镜像名
     container_name: snginx       #指定容器名
     build:
      context: .
      dockerfile: Dockerfile_nginx    #指定dockerfile文件
    
     ports:
      - "80:8010"            #修改端口映射
    
     volumes:
      - ./web:/home/docker-web/html                     #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
      - ./default.conf:/etc/nginx/conf.d/default.conf   #挂载配置文件
    
     php:
     image: sphpimage 
     container_name: myphp 
    
     build:
      context: .
      dockerfile: Dockerfile_php 
      
     environment:
      MYSQL_PASSWORD: 777777     
    
     volumes:
      - ./web:/home/docker-web/php          #挂载工作目录到本机web目录
    
     mysql:
     image: mysqlimage 
     container_name: mysql
     build:
      context: .
      dockerfile: Dockerfile_mysql
     ports:
      - "3306:3306"
    
     volumes:
      - ./mysql:/var/lib/mysql    #挂载容器卷
    
     phpmyadmin:
     image: myphpmyadminimage
    
     container_name: myphpmyadmin
    
     build: 
      context: .
      dockerfile: Dockerfile_phpmyadmin
    
     ports: 
      - "8020:80" # phpmyadmin默认监听80
    
     environment:
    
     PMA_HOST: mysql           #指定mysql服务所在的host
    ---------------------------------------------------------default.conf---------------------------------------------------------
     
     server {
    
      listen    8010;            #监听8010端口
    
      server_name  localhost;        #定义使用www.xx.com访问
    
      location / {              #默认请求
    
    ​    root  /home/docker-web/html;   #定义服务器的默认网站根目录位置
    
    ​    index  index.html index.htm;    #定义首页索引文件名称
    
      }
    
    #error_page  404        /404.html;       #定义错误提示页面
    
    # redirect server error pages to the static page /50x.html  #重定向服务器错误页面
    
     
    
      error_page  500 502 503 504  /50x.html; #定义错误提示页面
    
      location = /50x.html {
    
    ​    root  /usr/share/nginx/html;
    
      }
      location ~ .php$ {      #通过PHP脚本sphp:9000的FastCGI服务器监听
    
    ​    root     /home/docker-web/php;      #修改工作目录
    
    ​    fastcgi_pass  myphp:9000;     #修改为容器名
    
    ​    fastcgi_index  index.php;
    
    ​    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
    
    ​    include     fastcgi_params;
    
      }
    
    }
    
    配置文件

    (3)实现多容器运行

    运行多容器 $ sudo docker-compose up -d --build
    dockercompose.png

    成功启动compose.png

    运行多容器

    接下来等了很久很久……终于好了,但是mynginx却没有正常启动
    mynginx启动失败.png

    mynginx启动失败

    查看mynginx启动日志:$ sudo docker logs mynginx

    查看mynginx启动日志.png

    查看日志

    原来是default.conf文件出了问题,在进去看了一遍发现漏打了一个符号,修改完以后再次启动一下就启动成功了

    mynginx成功启动.png

    启动成功

    (4)测试

    基础测试

    ---------------------------------------------------------index.html---------------------------------------------------------
    hello LNMP
    ---------------------------------------------------------index.php---------------------------------------------------------
    <?php phpinfo();?> #显示php信息
    

    hello LNMP.png

    index.html

    查看php版本信息.png

    index.php

    显示PHPmyadmin.png

    phpMyAdmin
    <?php
    $servername = "mysql";    #注意这里要用自己自定义的Mysql的容器名
    $username = "root";
    $password = "777777";     #密码也可以直接使用yml中的变量名
     
    try {
        $conn = new PDO("mysql:host=$servername", $username, $password);
        echo "连接成功"; 
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    
    连接mysql

    mysql连接成功.png

    连接成功

    建立数据库

    修改index.php文件新建一个数据库

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

    db创建成功.png

    创建成功

    进入mysql查看新建的数据库

    查看新建的数据库.png

    Databases

    建立表

    新建数据表per

    <?php
    
    $servername = "mysql";
    $username = "root";
    $password = "777777";
    $dbname = "mynewsql";
    try {
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
      // 设置 PDO 错误模式,用于抛出异常
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      // 使用 sql 创建数据表
      $sql = "CREATE TABLE per ( 
      NAME VARCHAR(30) NOT NULL,
      age int NOT NULL
      )";
      // 使用 exec() ,没有结果返回 
      $conn->exec($sql);
      echo "数据表 per 创建成功";
    }
    catch(PDOException $e)
    {
      echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    
    index.php

    建表成功.png

    建表成功

    查看建立的表.png

    查看创建的表

    往表中插入数据

    往表中插入数据

    <?php
    $servername = "mysql";
    $username = "root";
    $password = "777777";
    $dbname="mynewsql";   
    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 per (NAME, age) 
      VALUES ('yeqiyi',22)");
      $conn->exec("INSERT INTO per (NAME, age) 
      VALUES ('yuki',22)");
      // 提交事务
      $conn->commit();
      echo "插入成功";
    }   
    catch(PDOException $e)
    {
     // 如果执行失败回滚
      $conn->rollback();
      echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    
    index.php

    数据插入成功.png

    数据插入成功

    per表.png

    per表

    修改表中数据

    修改表中数据

    <?php
    $servername = "mysql";
    $username = "root";
    $password = "777777";
    $dbname="mynewsql";   
    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);
      // SQL 语句
      $conn->exec("UPDATE per SET age='20' WHERE NAME='yeqiyi' OR NAME='yuki'");
      echo "记录修改成功";
    }   
    catch(PDOException $e)
    {
      // 如果执行失败回滚
      $conn->rollback();
      echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    
    index.php

    修改记录.png

    修改成功

    表中数据.png

    修改后的数据

    删除表中数据

    删除表中数据

    <?php
    $servername = "mysql";
    $username = "root";
    $password = "777777";
    $dbname="mynewsql";   
    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);
      // SQL 语句
    $conn->exec("DELETE FROM per where NAME='yuki'");
      echo "记录删除成功";
    }   
    catch(PDOException $e)
    {
      // 如果执行失败回滚
      $conn->rollback();
      echo $sql . "<br>" . $e->getMessage();
    }
    $conn = null;
    ?>
    
    index.php

    删除成功.png

    删除成功

    删除后.png

    删除后表中的数据

    使用phpMyAdmin进行web端数据管理

    通过phpMyAdmin登录mysql

    phpMyAdmin登录.png

    登录界面

    主页.png

    主页

    插入数据

    插入数据.png

    插入数据

    点击go以后,回到表中可以看到数据已经成功插入

    数据插入成功web.png

    插入成功

    接下来的操作都基本相同了

    最后

    所花时长:6小时左右
    总结:这次实验学习了多容器之间的运行交互,通过挂载本地目录,在本地操作文件同时也能将操作同步到容器虚拟机中,方便且效率高,在实践的开始还是会不知所措无从下手,这时候就要善于利用网络资源,遇到问题学会分析报错信息来解决问题。

  • 相关阅读:
    最新Xcode7.x环境下上架iOS App到AppStore 完整流程
    rails提供的validators
    Ruby 符号【转】
    xaml学习笔记
    fedora安装rails缺少js runtime和cannot load such file -- sqlite3/sqlite3_native解决办法
    学习笔记——敏捷开发
    结队编程(电梯调度问题)
    【转】javascript操作Select标记中options集合
    【软件工程】Word frequency program
    【转】诗社之死
  • 原文地址:https://www.cnblogs.com/yeqiyi/p/12842259.html
Copyright © 2011-2022 走看看