一 完成Docker-compose的安装
-
下载Docker Compose的当前稳定版本
sudo curl -L --fail https://github.com/docker/compose/releases/download/1.25.5/run.sh -o /usr/local/bin/docker-compose
-
将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
-
创建指向/usr/bin目录的符号链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
二 Dockerfile编写
#基础镜像
FROM mysql:5.7
#镜像作者
MAINTAINER t
#设置不允许免密登录并设置root密码
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
ENV MYSQL_ROOT_PASSWORD=123456
- default.conf
server {
listen 2223; #修改映射端口
server_name localhost;
location / {
root /www/html; # 定义服务器的默认网站根目录位置,自动生成,注意这是容器的目录,不是主机的目录
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html; # 定义错误提示页面
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ { # 通过PHP脚本到127.0.0.1:9000的FastCGI服务器监听
root /www/html; # 定义服务器的默认网站根目录位置,自动生成
fastcgi_pass php:9000; # 修改php服务器端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;# 修改为$document_root
include fastcgi_params;
}
}
- nginx的dockerfile
#基础镜像
FROM nginx:latest
#镜像作者
MAINTAINER t
#暴露端口
EXPOSE 2223
- php文件夹的dockerfile
# 基础镜像
FROM php:7.4-fpm
# 镜像作者
MAINTAINER t
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
三 使用Compose实现多容器运行机制
- docker-compose.yml的编写
version: "3"
services:
# nginx服务
nginx:
image: nginx_image # 镜像名
container_name: nginx_container # 容器名
build: ./nginx
ports:
- "80:2223" # 暴露端口
volumes:
- ./html:/www/html # 将主机当前目录的上级html目录,挂载到容器的/zzq/html目录
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf # 同上
# php服务
php:
image: php_image
container_name: php_container
build: ./php
environment:
MYSQL_PASSWORD: 123456
volumes:
- ./html:/www/html
# mysql服务
mysql:
image: mysql_image
container_name: mysql_container
build: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
四 服务测试
4.1 测试连接
- 修改index.php
getMessage();
}
?>
4.2 创建数据库
- 修改index.php
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE dockerComposeDB"; //修改数据库名
// 使用 exec() ,因为没有结果返回
$conn->exec($sql);
echo "数据库创建成功
";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>
4.3 创建表
- 修改index.php
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 使用 sql 创建数据表
$sql = "CREATE TABLE student_list(
id int(4) not null primary key,
name varchar(16) not null
)";
// 使用 exec() ,没有结果返回
$conn->exec($sql);
echo "数据表 student_list 创建成功";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>
4.4 插入数据
- 修改index.php
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//开始事务
$conn->beginTransaction();
$conn->exec("INSERT INTO student_list (id,name)
VALUES ('1','ruanruan')");
$conn->exec("INSERT INTO student_list (id,name)
VALUES ('2','alian')");
$conn->exec("INSERT INTO student_list (id,name)
VALUES ('3','xiaomian')");
$conn->exec("INSERT INTO student_list (id,name)
VALUES ('4','taotao')");
// 提交事务
$conn->commit();
echo "插入学生数据成功";
}
catch(PDOException $e)
{
$conn->rollback();
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>
4.5 修改数据
- 修改index.php
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//开始事务
$conn->beginTransaction();
$conn->exec("UPDATE student_list SET name='xiaolei' WHERE id='1'");
// 提交事务
$conn->commit();
echo "修改数据成功";
}
catch(PDOException $e)
{
$conn->rollback();
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>
4.6 删除数据
- index.php的修改
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//开始事务
$conn->beginTransaction();
$conn->exec("DELETE FROM student_list WHERE id <3");
// 提交事务
$conn->commit();
echo "删除数据成功";
}
catch(PDOException $e)
{
$conn->rollback();
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>
五 增加一个phpmyadmin容器,实现web端的数据库管理
- 修改phpmyadmin中的dockerfile
#基础镜像
FROM phpmyadmin/phpmyadmin
#维护者信息
MAINTAINER t
#暴露端口
EXPOSE 8080
- 在docker-compose.yml的末尾添加如下语句
phpmyadmin:
image: phpmyadmin_image
container_name: myphpmyadmin_container
build: ./phpmyadmin
ports:
- "8080:80"
environment:
PMA_HOST: mysql
六 总结
- 遇到的困难
1,dockerfile的编写步骤中要处理的文件很多,大概卡了两个小时运行docker-compose时一直error,后来翻到河马同学的博客,决定修改文件的结构让它更清晰,一番折腾终于看见了三个done。还好有快照,省了很多时间。
2,每次安装东西总会出现锁,解决方法:用收藏夹中的四五个方法轮番试验,杀死占用资源的进程。 - 花费的时间
四个半小时。