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

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

实践内容

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

posted @ 2020-05-07 12:35  奶昔不加冰  阅读(191)  评论(0)    收藏  举报