一、完成Docker-compose的安装
- 用官方的方法会比较慢,因此选用daocloud安装会快很多。
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
代码中间的1.25.5代表的是版本号,可以选择你想要的对应版本号。
- 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
- 测试是否安装成功
docker-compose --version
二、Dockerfile编写-LNMP
- 文件目录组织
- MQL-Dockerfile
FROM mysql:latest
#作者信息
MAINTAINER ISLAND
#环境变量配置
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
ENV MYSQL_ROOT_PASSWORD 123456
#基础镜像
FROM nginx:latest
#作者信息
MAINTAINER ISLAND
server {
listen 80;
server_name localhost;
location / {
root /var/www/html; #这个文件目录需要记住,在yml文件中端口映射需要用到。
index index.html index.htm index.php; # 增加index.php
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
root /var/www/html; # 代码目录
fastcgi_pass phpfpm:9000; # 修改为phpfpm容器
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修改为$document_root
include fastcgi_params;
}
}
#基础镜像
FROM php:7.4-fpm
#作者信息
MAINTAINER ISLAND
#更换镜像源
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
#安装扩展pdo
RUN apt-get clean && apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng12*-dev \
vim \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
三、使用Compose实现多容器运行机制
version: "3"
services:
nginx:
build: ./nginx
ports:
- "80:80"
links:
- "phpfpm"
volumes:
- ./web/:/var/www/html/
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
phpfpm:
build: ./php
ports:
- "9000:9000"
volumes:
- ./web/:/var/www/html/
links:
- "mysql"
mysql:
build: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/mysql_data/:/var/lib/mysql/
- 运行docker-compose
docker-compose up -d
四、服务测试
- 数据库连接
- 创建school数据库
- 创建student表
- 向student表中插入数据
- 删除student表中数据
五、选做
#基础镜像
FROM phpmyadmin/phpmyadmin:latest
#作者信息
MAINTAINER ISALND
#暴露端口
EXPOSE 8080
version: "3"
services:
nginx:
build: ./nginx
ports:
- "80:80"
links:
- "phpfpm"
volumes:
- ./web/:/var/www/html/
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
phpfpm:
build: ./php
ports:
- "9000:9000"
volumes:
- ./web/:/var/www/html/
links:
- "mysql"
mysql:
build: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/mysql_data/:/var/lib/mysql/
phpmyadmin:
build: ./phpmyadmin
ports:
- "8080:80"
links:
- "mysql"
environment:
- PMA_ABRITRARY=1
- PMA_HOST=mysql
- 运行docker-compose
- web端实现对数据库管理
登入数据库
其他对数据库的操作均是图形化界面。
六、实验中遇到的问题以及解决方案
- docker-compose使用官方方法安装过慢。
使用daocloud的安装会快非常的多。
- php容器中需要安装mysql插件的时候,用官方的源速度非常慢
将镜像中的source.list换成国内源(例如网易源、阿里源)。
- YML文件中web文件的存放路径
在YML中要注意自己本机的路径要和容器中放web文件的路径相匹配。
七、小结
- 本次实验是让我们体验如何用docker-compose将多个容器配合起来使用,刚才是看到实验要求的时候感觉一点思路都没有,因为之前没有接触过PHP。后面在查阅多许多资料以后,然后自己在动手一步一步做下来,其实就不会感觉那么难。
- 时间花费:
了解PHP: 1小时
了解PHP+Nginx:1小时
dockerfile+yml编写:2小时
解决运行时发生的问题:2小时
测试:1小时
博客编写:1.5小时
合计:8.5小时