第3次实践作业

一、安装Docker-compose

1.下载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

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

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

3.创建软链

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4.测试是否安装成功

docker-compose --version

二、Dockerfile编写(选择LNMP进行构建)

1.拉取php镜像

sudo docker pull php:7.4-fpm

2.编写default.conf文件

server {
    listen       3333;
    server_name  localhost;

    location / {
        root   /home/c/Desktop/docker_compose/web/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        root           /home/c/Desktop/docker_compose/web/php;
        fastcgi_pass   laikaphp:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

3.编写docker-compose.yml文件

version: "3"
services:
    nginx:
        image: laikanginx_image                
        container_name: laikanginx             
        build:
            context: .
            dockerfile: dockerfile_nginx     
        ports:
            - "3332:3333"                       
        volumes:
            - ./web:/home/c/Desktop/docker_compose/web/html                  
            - ./default.conf:/etc/nginx/conf.d/default.conf     #配置文件
    php:
        image: laikaphp_image 
        container_name: laikaphp 
        build:
            context: .
            dockerfile: dockerfile_php 
        environment:
            MYSQL_PASSWORD: 123
        volumes:
            - ./web:/home/c/Desktop/docker_compose/web/php                

    mysql:
        image: laikasql_image 
        container_name: laikasql
        build:
            context: .
            dockerfile: dockerfile_mysql
        ports:
            - "3306:3306"
        volumes:
            - ./mysql_data:/var/lib/mysql

4.编写php的Dockerfile文件

FROM php:7.4-fpm
MAINTAINER laika
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

5.编写nginx的Dockerfile文件

from nginx
maintainer laika
expose 3333

6..编写mysql的Dockerfile文件

FROM mysql
MAINTAINER laika
ENV MYSQL_ROOT_PASSWORD 123
ENV MYSQL_ALLOW_EMPTY_PASSWORD no

7.编写index.html文件

<!DOCTYPE html>
<html>
<head>
<title>HTML页面</title>
</head>
<body>
<p>hello!</p>
</body>
</html>

8.编写index.php文件

<?php phpinfo();?>

编写好后将文件统一放入一个目录下。

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

1.在编写好文件的目录下执行命令

sudo docker-compose up -d --build


2.查看镜像以及容器

sudo docker images
sudo docker ps

3.访问localhost/index.html

4.访问localhost/index.php查看配置信息

四、服务测试

1.修改index.php,连接mysql

<?php
$servername = "laikasql";    #要写当前自己命名的容器名
$username = "root";
$password = "123";   

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

2.修改index.php,创建数据库

<?php 
$servername = "laikasql";    
$username = "root";
$password = "123"; 
 
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;
?>

3.进入容器,查看myDBPDO数据库是否创建成功

sudo docker exec -it laikasql /bin/bash
mysql -u root -p
show databases;

4.进入数据库后,再次改index.php,创建数据表

<?php
$servername = "laikasql";
$username = "root";
$password = "123";
$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 car (
    no int(7) UNSIGNED PRIMARY KEY, 
    band varchar(35) NOT NULL
    )";
    // 使用 exec() ,没有结果返回 
    $conn->exec($sql);
    echo "数据表 car 创建成功";
}
catch(PDOException $e)
{
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

5.查看数据表car是否创建成功

use myDBPDO
show tables;

6.修改index.php,往数据库中插入数据

<?php
$servername = "laikasql";    
$username = "root";
$password = "123";   
$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 car (no,band) 
    VALUES (6789, 'Ford')");
    $conn->exec("INSERT INTO car (no,band) 
    VALUES (3267, 'toyota')");

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

7.查看数据表是否插入成功

use myDBPDO
select * from car;

8.修改index.php,修改和删除数据

<?php
$servername = "laikasql";    
$username = "root";
$password = "123";     #密码也可以直接使用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("UPDATE car SET band='Benz' WHERE no=3267");
    $conn->exec("DELETE FROM car where no=6789");
    // 提交事务
    $conn->commit();
    echo "修改,删除成功";
}
catch(PDOException $e)
{
    // 如果执行失败回滚
    $conn->rollback();
    echo $sql . "<br>" . $e->getMessage();
}
 
$conn = null;
?>

9.查看数据表是否修改和删除成功

select * from car;

五、增加一个phpmyadmin容器,实现web端的数据库管理

1.因为之前正在运行,所以在修改前先停止运行

sudo docker-compose down

2.修改docker-compose.yml文件,在底部新增

phpmyadmin:
            image: laikaphpmya_image
            container_name: laikaphpmyadmin
            build: 
                context: .
                dockerfile: dockerfile_phpmyadmin
            ports: 
                - "3334:80" # phpmyadmin默认监听80
            environment:
                PMA_HOST: mysql   #指定mysql服务所在的host

3.新建dockerfile_phpmyadmin文件并编写

FROM phpmyadmin/phpmyadmin
MAINTAINER laika
EXPOSE 3334

4.再次运行docker-compose

sudo docker-compose up -d --build

5.输入网址并输入密码登录

http://localhost:3334/index.php

6.查看数据库

7.查看表

8.插入数据

9.查找数据

10.删除数据

六、实验报告

1.遇到的问题

  • 下载Docker Compose时太慢甚至卡了,可以采用换源的方法,这时候速度就很快了
  • 在执行sudo chmod +x /usr/local/bin/docker-compose命令时出现
sudo: unable to execute /usr/local/bin/docker-compose: Text file busy

存在进程被占用的情况,把运行中的进程停止重新执行就可以了

  • 访问localhost/index.php时页面出现
file not found!

经过检查发现,将nginx的配置文件中的fastcgi_param参数进行修改后就可以了

2.完成作业所花的时间

名称 时长(分)
下载Docker compose 30
查找资料 60
编写文件 120
操作运行 150
检查错误 120
整理博客 100

3.感想

上次就因为无意把小数点漏了导致花了很长时间去修改,但是这次还是会出现多了个空格之类的情况,这提醒了我一定要认真,不然很容易出错。每当遇到困难的时候,百度百度,多尝试几种方法,会学到更多的知识。一些时候下载的速度很慢,如果一直干等着会消耗很多耐心和时间,还是要活用换源的方法较为方便快捷。端口也要注意改成新的,否则用以前用过的端口容易出错。

posted @ 2020-05-09 00:29  laika  阅读(296)  评论(0编辑  收藏  举报