2020系统综合实践 第3次实践作业
1.完成Docker-compose的安装
下载Docker Compose的当前稳定版本
在windows端访问github,将docker-compose下载到共享文件夹,复制到指定目录下。
sudo cp 'docker-compose' '/usr/local/bin'
给文件添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
创建软连接至一个目录下
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试安装
docker-compose --version
2.Dockerfile编写
采用LNMP(Linux+Nginx+Mysql+PHP)来分别构建web、php应用、数据库等镜像服务。
拉取镜像
sudo docker pull php:7.4-fpm
目录结构
dockerfile_nginx
#基础镜像
FROM nginx
#作者信息
MAINTAINER lzs<https://www.cnblogs.com/tinygod/>
#声明暴露的端口
EXPOSE 2000
dockerfile_mysql
#基础镜像
FROM mysql
#作者信息
MAINTAINER lzs<https://www.cnblogs.com/tinygod/>
#设置root密码
ENV MYSQL_ROOT_PASSWORD 123456
#设置不可免密登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
dockerfile_php
#基础镜像
FROM php:7.4-fpm
#作者信息
MAINTAINER lzs<https://www.cnblogs.com/tinygod/>
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
index.html
<!DOCTYPE html>
<html>
<head>
<title>Webtest</title>
</head>
<body>
<h1>My test</h1>
</body>
</html>
index.php
<?php phpinfo();?>
default.conf
server {
listen 2000; #修改映射端口
server_name localhost;
location / {
root /home/docker_compose/html; #修改工作目录
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /home/docker_compose/php; #修改工作目录
fastcgi_pass lzsphp:9000; #修改为容器名
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
docker-compose.yml
version: "3"
services:
nginx:
image: lzsnginx_image #指定镜像名
container_name: lzsnginx #指定容器名
build:
context: .
dockerfile: ./nginx/dockerfile #指定dockerfile文件
ports:
- "80:2000" #修改端口映射,要注意与之前声明的端口匹配
volumes:
- ./web:/home/docker_compose/html
- ./default.conf:/home/docker_compose/nginx/default.conf #配置文件
php:
image: lzsphp_image
container_name: lzsphp
build:
context: .
dockerfile: ./php/dockerfile
environment:
MYSQL_PASSWORD: 123456
volumes:
- ./web:/home/docker_compose/php
mysql:
image: lzssql_image
container_name: lzssql
build:
context: .
dockerfile: ./mysql/dockerfile
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql
3.使用Compose实现多容器运行机制
运行docker-compose
sudo docker-compose up -d --build
查看容器和镜像
访问
4.服务测试
连接测试
修改index.php
<?php
$servername = "lzssql";
$username = "root";
$password = "123456";
try {
$conn = new PDO("mysql:host=$servername;", $username, $password);
echo "连接成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
创建数据库
修改index.php
<?php
$servername = "lzssql";
$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 test";
// 使用 exec() ,因为没有结果返回
$conn->exec($sql);
echo "数据库创建成功<br>";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
查看数据库信息
docker exec -it lzssql /bin/bash
mysql -u root -p
show databases;
创建数据表
修改index.php
<?php
$servername = "lzssql";
$username = "root";
$password = "123456";
$dbname="test";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置 PDO 错误模式,用于抛出异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 使用 sql 创建数据表
$sql = "CREATE TABLE test (
id bigint(20) NOT NULL,
name varchar(255) NOT NULL,
email varchar(255) NOT NULL
)";
// 使用 exec() ,没有结果返回
$conn->exec($sql);
echo "数据表创建成功";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
查看数据表
use test
show tables;
插入数据
修改index.php
<?php
$servername = "lzssql";
$username = "root";
$password = "123456";
$dbname="test";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 开始事务
$conn->beginTransaction();
// SQL 语句
$conn->exec("INSERT INTO test (`id`, `name`,`email`)
VALUES(100,'john','1345311153@qq.com');");
$conn->exec("INSERT INTO test (`id`, `name`,`email`)
VALUES(31702115,'lzs','1345311153@qq.com');");
// 提交事务
$conn->commit();
echo "新记录插入成功";
}
catch(PDOException $e)
{
// 如果执行失败回滚
$conn->rollback();
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
删除数据
修改index.php
<?php
$servername = "lzssql";
$username = "root";
$password = "123456";
$dbname="test";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 开始事务
$conn->beginTransaction();
// SQL 语句
$conn->exec("delete from test where id=100");
// 提交事务
$conn->commit();
echo "记录删除成功";
}
catch(PDOException $e)
{
// 如果执行失败回滚
$conn->rollback();
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
修改数据
修改index.php
<?php
$servername = "lzssql";
$username = "root";
$password = "123456";
$dbname="test";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 开始事务
$conn->beginTransaction();
// SQL 语句
$conn->exec("update test set id=666 where name='jack'");
// 提交事务
$conn->commit();
echo "记录修改成功";
}
catch(PDOException $e)
{
// 如果执行失败回滚
$conn->rollback();
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
5.小结
-
遇到的问题
虚拟机网络正常,但不能访问github网站
-
解决方法
在windows端访问github,下载docker-compose到共享文件夹,在虚拟机上将文件复制到目录/usr/local/bin/docker-compose下
总用时:6小时