一、安装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文件
HTML页面
hello!
8.编写index.php文件
编写好后将文件统一放入一个目录下。
三、使用Compose实现多容器运行机制
1.在编写好文件的目录下执行命令
sudo docker-compose up -d --build
2.查看镜像以及容器
sudo docker images
sudo docker ps
四、服务测试
1.修改index.php,连接mysql
getMessage();
}
?>
2.修改index.php,创建数据库
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
// 使用 exec() ,因为没有结果返回
$conn->exec($sql);
echo "数据库创建成功
";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>
3.进入容器,查看myDBPDO数据库是否创建成功
sudo docker exec -it laikasql /bin/bash
mysql -u root -p
show databases;
4.进入数据库后,再次改index.php,创建数据表
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 . "
" . $e->getMessage();
}
$conn = null;
?>
5.查看数据表car是否创建成功
use myDBPDO
show tables;
6.修改index.php,往数据库中插入数据
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 . "
" . $e->getMessage();
}
$conn = null;
?>
7.查看数据表是否插入成功
use myDBPDO
select * from car;
8.修改index.php,修改和删除数据
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 . "
" . $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
六、实验报告
1.遇到的问题
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.感想
上次就因为无意把小数点漏了导致花了很长时间去修改,但是这次还是会出现多了个空格之类的情况,这提醒了我一定要认真,不然很容易出错。每当遇到困难的时候,百度百度,多尝试几种方法,会学到更多的知识。一些时候下载的速度很慢,如果一直干等着会消耗很多耐心和时间,还是要活用换源的方法较为方便快捷。端口也要注意改成新的,否则用以前用过的端口容易出错。