2020系统综合实践 第3次实践作业

1.安装Docker-compose

运行以下命令以下载Docker Compose的当前稳定版本

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

将可执行权限应用于二进制文件

sudo chmod +x /usr/local/bin/docker-compose

测试安装是否成功

docker-compose --version

2.编写配置文件和测试文件

拉取一个PHP镜像

sudo docker pull php:5.6-fpm

在系统主目录下创建一个docker_compose文件夹,此文件夹用于存放实验中我们需要用到的各种配置文件,docker_compose中的具体配置文件如下所示:

sudo get-apt install tree
tree


编写index.html并测试

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>dyssl's second webpage for Nginx</title>
</head>
<body>
    <h1>dyssl's second page for Nginx</h1>
    <p>Success</p>
</body>
</html>


编写index.php

<?php phpinfo();?>

编写default.conf

server {
        listen       5416;  # 修改监听端口
        server_name  localhost;
    
        location / {
            root   /dyssl/html;
            index  index.html index.htm index.php; # 增加index.php
        }
    
        #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   /var/www/html;
        }
        location ~ .php$ {
            root           /dyssl/html; # 代码目录
            fastcgi_pass   phpfpm:9000;    # 修改为phpfpm容器
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改为$document_root
            include        fastcgi_params;
        }
    }

编写Nginx的Dockerfile

#基础镜像
FROM nginx:latest

#镜像作者
MAINTAINER dyssl

#暴露端口
EXPOSE 80

编写mysql的Dockerfile

#基础镜像
FROM mysql:5.7
#镜像作者
MAINTAINER dyssl
#设置不允许免密登录并设置root密码
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
ENV MYSQL_ROOT_PASSWORD=123456

编写php的Dockerfile

FROM  php:5.6-fpm
 RUN apt-get update && apt-get install -y 
 libfreetype6-dev 
 libjpeg62-turbo-dev 
 libpng12*-dev 
 vim 
 && docker-php-ext-install pdo_mysql 
 && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
 && docker-php-ext-install gd 

3.使用Compose实现多容器运行机制

编写docker-compose.yml

version: "3"
services:
 nginx:
   build: ./nginx
   ports:
     - "80:5416"
   links:
     - "phpfpm"
   volumes:
     - ./html/:/dyssl/html/
     - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
 phpfpm:
   build: ./phpfpm
   ports:
     - "9000:9000"
   volumes:
     - ./html/:/dyssl/html/
   links:
     - "mysql"
 mysql:
   build: ./mysql
   ports:
     - "3306:3306"
   volumes:
     - ./mysql/data/:/var/lib/mysql/
   environment:
     MYSQL_ROOT_PASSWORD : 123456

构建LNMP环境

sudo docker-compose up -d --build

访问index.html

访问index.php

4.服务测试

连接数据库
修改index.php

<?php
$servername = "compose-lnmp_mysql_1"; #填容器名
$username = "root";
$password = "123456";
 
try {
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    echo "连接成功"; 
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>= null;
?>

(这里忘记截图了)

在浏览器尝试连接数据库
(这里忘记截图了)

创建数据库
修改index.php

<?php
$servername = "compose-lnmp_mysql_1";
$username = "root";
$password = "123456";

try {
    $conn = new PDO("mysql:host=$servername", $username, $password);

    // 设置 PDO 错误模式为异常
    $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;
?>

使用浏览器尝试创建数据库

在命令行中输入以下命令,查看数据库

sudo docker ps -a
sudo docker exec -it 84a097a9f7af /bin/bash
 mysql -u root -p
show databases;


创建数据表
修改index.php

<?php
$servername = "compose-lnmp_mysql_1";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置 PDO 错误模式,用于抛出异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    // 使用 sql 创建数据表
    $sql = "CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP
    )";
 
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "数据表 MyGuests 创建成功";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;

使用浏览器尝试创建数据表

在容器中查看

use myDBPDO;
SHOW TABLES;

插入数据
修改index.php

<?php
$servername = "compose-lnmp_mysql_1";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置 PDO 错误模式,用于抛出异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "新记录插入成功";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

使用浏览器尝试插入数据

进入容器查看

select * from MyGuests;

表记录的修改
修改index.php

<?php
$servername = "compose-lnmp_mysql_1";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置 PDO 错误模式,用于抛出异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "UPDATE MyGuests SET lastname= 'Tim' 
		WHERE id= 1";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "记录修改成功";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

使用浏览器尝试修改数据

进入容器查看

select * from MyGuests;

表记录的删除
修改index.php

<?php
$servername = "compose-lnmp_mysql_1";
$username = "root";
$password = "123456";
$dbname = "myDBPDO";
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置 PDO 错误模式,用于抛出异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "DELETE FROM MyGuests;";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "成功删除表记录";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

使用浏览器尝试删除数据

进入容器看看

5.增加phpmyadmin容器

拉取镜像

sudo docker pull phpmyadmin/phpmyadmin

在docker-compose.yml中添加

phpmyadmin:
    build: ./phpmyadmin
    container_name: "phpmyadmin"
    ports: 
        - "8000:80"
    links:
        - "mysql"
    environment:
        - PMA_ABRITRARY=1     
        - PMA_HOST=mysql  

为phpmyadimin编辑Dockerfile

FROM phpmyadmin/phpmyadmin:latest
EXPOSE 8000

移除之前运行的docker-compose再建

docker-compose down
docker-compose up -d --build


在浏览器访问8080输入用户名和密码就可以登录

6.遇到的问题

构建LNMP环境的时候出现了问题

换源即可解决

7.经验和感想

每次实验都没有一帆风顺,遇到问题分析问题,找百度,请教同学,每次都会有成长
感谢在这次实验中带给我帮助的同学们

8.花费时间

8小时左右吧,卡在构建lnmp环境了很久,其他地方的小问题十几分钟就解决了,写博客也写了一个多小时

原文地址:https://www.cnblogs.com/dyssl/p/12850273.html