第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 |