第3次实践作业
1.完成Docker-compose的安装
- 下载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
- 将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
- 创建指向/usr/bin目录的符号链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 测试安装
docker-compose --version
2.Dockerfile编写
要求:
LNMP/LAMP选择一种;
分别构建web、php应用、数据库等镜像服务,php镜像亦有提供php:-apache的变体;
提示:php连接数据库需要安装必要的核心扩展部件(PHP Core Extensions)安装方法可参考官方镜像介绍。
-
各文件的编写
-
目录结构
dockerfile_phpmyadmin是选做的
mysql文件夹用于存放mysql所需的一些文件 -
dockerfile_nginx
#基础镜像 FROM nginx #作者信息 MAINTAINER hyh<HuangYH723@outlook.com> #声明暴露的端口 EXPOSE 2020
-
dockerfile_mysql
#基础镜像 FROM mysql #作者信息 MAINTAINER hyh<HuangYH723@outlook.com> #设置root密码 ENV MYSQL_ROOT_PASSWORD 123456 #设置不可免密登录 ENV MYSQL_ALLOW_EMPTY_PASSWORD no
-
dockerfile_php
#基础镜像 FROM php:7.4-fpm #作者信息 MAINTAINER hyh<HuangYH723@outlook.com> 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
-
index.html
it's a html
-
index.php
<?php phpinfo();?>
-
default.conf
server { listen 2020; #修改映射端口 server_name localhost; location / { root /lyh/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 /web/php; #修改工作目录 fastcgi_pass myphp: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: mynginx_image #指定镜像名 container_name: mynginx #指定容器名 build: context: . dockerfile: dockerfile_nginx #指定dockerfile文件 ports: - "80:2020" #修改端口映射 volumes: - ./web:/web/html - ./default.conf:/etc/nginx/conf.d/default.conf #配置文件 php: image: myphp_image container_name: myphp build: context: . dockerfile: dockerfile_php environment: MYSQL_PASSWORD: 123456 volumes: - ./web:/web/php mysql: image: mysql_image container_name: mysql build: context: . dockerfile: dockerfile_mysql ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql
-
3.使用Compose实现多容器运行机制
-
运行docker-compose
sudo docker-compose up -d --build
成功
-
查看容器和镜像
-访问
localhost/index.html
localhost/index.php
4.服务测试
-
参考教程PHP 连接 MySQL
-
连接测试
修改、./web/index.php<?php #需要根据自己的实际情况配置 $servername = "mysql"; $username = "root"; $password = "123456"; try { $conn = new PDO("mysql:host=$servername", $username, $password); echo "Connection Succeed!"; } catch(PDOException $e) { echo $e->getMessage(); }
-
创建数据库
下面的代码创建一个名为lyh_test的数据库<?php $servername = "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 hyh_test"; // 使用 exec() ,因为没有结果返回 $conn->exec($sql); echo "数据库创建成功<br>"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
sudo docker exec -it mysql /bin/bash
mysql -u root -p
show databases;
-
创建数据表
<?php $servername = "mysql"; $username = "root"; $password = "123456"; $dbname="hyh_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 user ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )"; // 使用 exec() ,没有结果返回 $conn->exec($sql); echo "数据表 user 创建成功"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
use hyh_test
show tables
-
向数据表插入数据
<?php $servername = "mysql"; $username = "root"; $password = "123456"; $dbname="hyh_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 user (firstname, lastname, email) VALUES ('Yuhang', 'Huang', 'HuangYH723@outlook.com')"); $conn->exec("INSERT INTO user (firstname, lastname) VALUES ('Yantao', 'luo')"); // 提交事务 $conn->commit(); echo "新记录插入成功"; } catch(PDOException $e) { // 如果执行失败回滚 $conn->rollback(); echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
select * from user
-
删除数据
只需要将上面的sql语句改为$conn->exec("UPDATE user SET lastname='lin' WHERE lastname='Lin'"); $conn->exec("DELETE FROM user where lastname='Zhao'");
5.小结
做完了发现其实真的不难,难的主要是需要自己去上网搜索一些资料进行参照的学习,很多配置需要在自己理解的基础上进行修改,而且还要比较细心。
好在网上能查到的资料不少,而且在我是赶在DDL前做完,前面大佬给我提供了很多思路,非常感谢。
每周小技巧(假
- ubuntu虚拟机不支持一次性粘贴太多从windows上复制的文本,在windows先创建文本,再拖到ubuntu中
时间统计
- 查资料2小时
- 动手2小时
- 写博客0.5小时
- 合计5小时左右