Docker-compose实战之搭建LAMP环境
目录
Docker-compose的安装
- 一开始利用命令
pip install docker-compose
安装docker-compose会发现在之后的build中一直出错 - 只能先从github上下载完后移到虚拟机中
/usr/local/bin
的位置,然后利用docker-compose --version
查询当前版本号,返回版本号说明安装成功
Dockerfile编写搭建LAMP(Linux+Apache+MySQL+PHP)环境
- 以下所有文件放置于
/home/ubuntu/docker-compose-lamp
目录下
MySql_dockerfile
FROM mysql:5.7 #作者信息 MAINTAINER by Ra9zer #设置不允许免密登录 ENV MYSQL_ALLOW_EMPTY_PASSWORD no
Apach_dockerfile
FROM httpd # 作者信息 MAINTAINER Ra9zer # 最后暴露2422端口 EXPOSE 2422 # Dockerfile中开头为#号的为注释,至此Dockerfile编写完成
php_dockerfile
FROM php:7.4-fpm # 作者信息 MAINTAINER Ra9zer 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
phpmyadmin_dockerfile
FROM phpmyadmin/phpmyadmin # 作者信息 MAINTAINER Ra9zer EXPOSE 8080
使用Compose实现多容器运行机制
Docker-compose配置文件docker-compose.yml编写
version: ‘3.7‘ services: #构建mysql服务 mysql: image: mysql #镜像名 container_name: LAMP_mysql #容器名 build: context: . dockerfile: MySql_dockerfile ports: - "3306:3306" #构建php服务 web: image: php container_name: LAMP_php build: context: . dockerfile: php_dockerfile depends_on: #设置依赖的服务 - mysql volumes: - ./web/:/home/ubuntu/docker-compose-lamp/web/ #将主机中的目录挂载到容器中的工作目录 ports: - "8080:80" #映射端口,格式为 "主机端口:容器端口" #构建phpmyadmin服务 phpmyadmin: image: phpmyadmin container_name: LAMP_phpmyadmin build: context: . dockerfile: phpmyadmin_dockerfile environment: PMA_HOST: LAMP_mysql #设置所连接的MySQL服务器名称 depends_on: - mysql - web ports: - "8081:80"
Index.php文件
- 该文件放置于
/home/ubuntu/docker-compose-lamp/web/
目录下
<html> <head> <title>phpinfo</title> </head> <body> <?php echo phpinfo(); #显示php信息 ?> </body> </html>
通过Compose运行多容器
所有配置文件编写完后因在同一目录中
在文件目录
/home/ubuntu/docker-compose-lamp/
下使用命令sudo docker-compose up --build
运行多容器成功sudo docker ps
查看当前运行中容器,可以看到多容器都已同时上线访问
http://0.0.0.0:8080/
可以查看PHP信息来验证容器是否正确运行达到目标效果
在这里有个坑:就是一开始我的docker-compose.yml里的web的文件目录配置错误./web/:/home/ubuntu/docker-compose-lamp/web/
导致访问8080端口的时候会出现404的情况,后面百度查询了一下正确的挂载目录应该是./www/:/var/www/html/
通过PHP访问MySql
- 修改
index.php
文件内容
<html> <head> <title>phpinfo</title> </head> <body> <?php $servername = "LAMP_mysql"; #数据库服务器名称为MySQL容器的名称 $username = "root"; $password = "123456"; try { $conn = new PDO("mysql:host=$servername", $username, $password); echo "数据库连接成功"; } catch(PDOException $e) { echo $e->getMessage(); } ?> </body> </html>
- 又一个坑:一定要在
MySql_dockerfile
或者docker-compose.yml
中声明ENV MYSQL_ROOT_PASSWORD 123456 #设置root下mysql登录密码
不然修改PHP文件也一辈子连不上数据库 (太难了。。。
通过PHP新建数据库
- 修改
index.php
文件内容
<html> <head> <title>phpinfo</title> </head> <body> <?php $servername = "LAMP_mysql"; #数据库服务器名称为MySQL容器的名称 $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 myDBPDO"; // 使用 exec() ,因为没有结果返回 $conn->exec($sql); echo "数据库创建成功<br>"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?> </body> </html>
通过PHP新建数据表
- 修改
index.php
文件内容
<html> <head> <title>phpinfo</title> </head> <body> <?php $servername = "LAMP_mysql"; #数据库服务器名称为MySQL容器的名称 $username = "root"; $password = "123456"; $dbname = "myDBPDO"; 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), `score` int )"; // 使用 exec() ,没有结果返回 $conn->exec($sql); echo "数据表 test 创建成功"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?> </body> </html>
通过PHP对表记录的插入修改和删除
- 修改
index.php
文件内容
<html> <head> <title>phpinfo</title> </head> <body> <?php $servername = "LAMP_mysql"; #数据库服务器名称为MySQL容器的名称 $username = "root"; $password = "123456"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置 PDO 错误模式,用于抛出异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO test (`id`, `name`, `score`) VALUES (2422,‘Ra9zer‘,‘100‘);"; // 使用 exec() ,没有结果返回 $conn->exec($sql); echo "新记录插入成功"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?> </body> </html>
选做
增加一个phpmyadmin容器,实现web端的数据库管理
phpmyadmin
容器配置文件在前文已经给出,同时在docker-compose.yml
中已完整配置服务。- 直接访问
0.0.0.0:8081
就可以登入
小结
- 实验3花费的时间大概在20个小时左右吧,相对前两个实验的皮毛操作。感觉实验3才算的上真正的入门。一开始看感觉还是挺懵的,不敢下手,到处百度百度的。感觉要编写的文件一大堆,然后
compose.yml
配置文件内容又很多的样子。到后面摸索摸索着渐渐就感觉其实也并不难,到最后也能都理解清楚。但是这应该才是锻炼(折磨)的开始趴
相关推荐
白开水 2020-07-19
无风的雨 2020-06-12
链块学院 2020-11-06
afanti 2020-09-14
liyansring 2020-07-18
shenzhenzsw 2020-07-18
啦啦啦啦啦 2020-06-28
yangliuhbhd 2020-06-12
小爷有点狂 2020-06-12
changecan 2020-06-11
蒜蓉粉丝蒸扇贝 2020-06-10
lihongtai 2020-06-08
liaochaowu 2020-06-06
zwt00 2020-06-05
scmrpu 2020-06-02
kuzilala 2020-05-14
小信 2020-05-14