第3次实践作业

相关文件

一、完成Docker-compose的安装

参考资料

(1)将docker-compose文件上传到linux系统上

(2)查看环境变量

cp docker-compose /usr/bin

(3)将docker-compose放在/usr/bin目录下

cp docker-compose /usr/bin

(4)此文件用户和用户组为root,如果此处用户和用户在不为root,先应该变成root组合root用户

chown -R root:root docker-compose

(5)增加此文件可执行权限

chmod +x docker-compose

(6)测试docker-compse

二、Dockerfile编写(采用LNMP)

参考资料

(1)docker pull下载镜像

(2)新建文件夹dockerlnmp

(3)创建必要文件

(4)查看树状结构

tree
docker-compose-lnmp/
|-- docker-compose.yml
|-- html
|   |-- index.html
|   `-- index.php
|-- mysql
|   `-- Dockerfile
|-- nginx
|   |-- conf
|   |   `-- default.conf
|   `-- Dockerfile
`-- phpfpm
    `-- Dockerfile

三、使用Compose实现多容器运行机制

参考资料

(1)编写docker-compose.yml

(2)执行docker-compose文件

sudo docker-compose up -d

(3)查看镜像和容器

sudo docker ps

(4)访问localhost/index.html和/index.php

(5)查看树状结构

四、服务测试

参考资料

(1)如图所示已经安装了pdo

(2)连接mysql

<?php
$servername = "192.168.0.110";    #这里用虚拟机ip地址
$username = "root";
$password = "123456";     #密码也可以直接使用yml中的变量名

try {
    $conn = new PDO("mysql:host=$servername", $username, $password);
    echo "连接成功";
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

(3)创建数据库

<?php 
$servername = "192.168.0.110";    
$username = "root";
$password = "123456";     #密码也可以直接使用yml中的变量名
 
try {
    $conn = new PDO("mysql:host=$servername", $username, $password);

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE myDBPDO";

    // 使用 exec() ,因为没有结果返回
    $conn->exec($sql);

    echo "数据库创建成功<br>";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>

(4)进入mysql容器查看数据库是否创建成功

(5)进入数据库创建表格

<?php
$servername = "192.168.0.110";
$username = "root";
$password = "123456";
$dbname="myDBPDO";        #变量设置
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);    #选择数据库
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 使用 sql 创建数据表
    $sql = "CREATE TABLE Student (
    id INT(9) UNSIGNED PRIMARY KEY, 
    name VARCHAR(30) NOT NULL
    )";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "数据表 Student 创建成功";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

(6)进入mysql容器查看表格是否创建成功

(7)数据库中插入数据

<?php
$servername = "192.168.0.110";    
$username = "root";
$password = "123456";     #密码也可以直接使用yml中的变量名
$dbname="myDBPDO";        #变量设置

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 开始事务
    $conn->beginTransaction();
    // SQL 语句
    $conn->exec("INSERT INTO Student (id,name) 
    VALUES (031702627, 'Li Laoshi')");
    $conn->exec("INSERT INTO Student (id,name) 
    VALUES (031702666, 'wxy abc')");
    $conn->exec("INSERT INTO Student (id,name) 
    VALUES (031700000, 'TOM')");

    // 提交事务
    $conn->commit();
    echo "新记录插入成功";
}
catch(PDOException $e)
{
    // 如果执行失败回滚
    $conn->rollback();
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

(8)数据库中插入数据

<?php
$servername = "192.168.0.110";    
$username = "root";
$password = "123456";     #密码也可以直接使用yml中的变量名
$dbname="myDBPDO";        #变量设置

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 开始事务
    $conn->beginTransaction();
    // SQL UPDATE 语句
    $conn->exec("UPDATE Student SET name='Last' WHERE id=031702666");
    //SQL  DELETE语句
    $conn->exec("DELETE FROM Student where id=031700000");
    // 提交事务
    $conn->commit();
    echo "修改,删除成功";
}
catch(PDOException $e)
{
    // 如果执行失败回滚
    $conn->rollback();
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

(9)进入mysql容器查看数据

五、phpmyadmin实现web端的数据库管理

(1)pull phpmyadmin

sudo docker pull phpmyadmin/phpmyadmin

(2)编写Dockerfile和docker-compose.yml

#Dockerfile
FROM phpmyadmin/phpmyadmin:latest
MAINTAINER by y00
 #docker-compose.yml添加:
 phpmyadmin:
    build: ./phpmyadmin
    container_name: "phpmyadmin"
    ports:
     - "8080:80"
    links:
     - "mysql"
    environment:
     - PMA_ARBITRARY=1

(3)查看树状结构

(4)重新执行docker-compose

(5)web端使用phpmyadmin

  • 输入账号密码

  • 进入数据库

  • 查看表格

  • 修改表格名称

  • 原表格不存在

  • 增加属性

  • 增加一条数据

  • 进入mysql容器查看数据库变化

六、主要问题和解决方法

(1)将docker-compose放在/usr/bin目录下时没有改文件名

将文件名改成docker-compose

(2)docker-compose up出错

starting nginx失败

查了资料是因为主机里存在的文件不能映射到容器里存在的目录,进入容器删掉文件

关闭并删除之前的docker-compose

sudo docker-compose down

重新执行docker-compose up

(3)docker-compose down出错

参考资料

经查询是docker-compose.yml格式错误,有几行多打了一个空格,修改之后可以执行

(4)web端不能使用phpmyadmin(一开始分配的端口号是8088)

由于修改了docker-compose.yml,所以要先docker-compose down再执行docker-compose up,修改之后可以使用

七、花费时间

项目 时间(估算)
Docker-compose的安装 20min
Dockerfile编写 2h
Compose实现多容器运行 3h
服务测试 1.5h
phpmyadmin实现web端的数据库管理 2h
写博客 2h

一开始不熟悉docker-compose,一部分镜像还没拉取就compose-up,还有一些细节比如docker-compose.yml格式的错误也找了很久,后来感觉有点混乱就重做了一遍。一开始尽量把需要的镜像都装了,后面再增加的话需要先关闭docker-compose再启动,遇到实在无解的问题,先关机再重启试试看,如果还是不行,就换个思路做吧hhh(linux是个神奇的系统)。

posted @ 2020-05-07 20:03  雨霖铃0000  阅读(153)  评论(0编辑  收藏  举报