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

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

实践内容

(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信息
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文件新建一个数据库

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE DATABASE mynewsql"; // 使用 exec() ,因为没有结果返回 $conn->exec($sql); echo "数据库创建成功
"; } catch(PDOException $e) { echo $sql . "
" . $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 . "
" . $e->getMessage();
}
$conn = null;
?>

index.php

建表成功.png

建表成功

查看建立的表.png

查看创建的表

往表中插入数据

往表中插入数据

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 . "
" . $e->getMessage(); } $conn = null; ?>

index.php

数据插入成功.png

数据插入成功

per表.png

per表

修改表中数据

修改表中数据

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 . "
" . $e->getMessage(); } $conn = null; ?>

index.php

修改记录.png

修改成功

表中数据.png

修改后的数据

删除表中数据

删除表中数据

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // SQL 语句 $conn->exec("DELETE FROM per where NAME='yuki'"); echo "记录删除成功"; } catch(PDOException $e) { // 如果执行失败回滚 $conn->rollback(); echo $sql . "
" . $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  奶昔不加冰  阅读(202)  评论(0)    收藏  举报