第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_testshow 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小时左右

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号