一、Docker Compose的安装
-
因为直接用curl命令下载太慢了,所以我换了其他的下载方法,解决github release下载过慢的方法我会在文章后面的问题及解决方法中说明。
我们把docker compose下载过后,放到指定的文件夹中。因为我是在主机中下载的,然后直接放在共享文件夹中,在虚拟机中,从共享文件夹复制到指定的文件夹。
-
将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
- 创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 测试是否安装成功,如图,如果显示出版本号即代表安装成功
docker-compose --version
二、Dockerfile编写(LNMP)
- 参考博客---Docker Compose 配置lnmp开发环境
Nginx
#Dockerfile
FROM nginx:latest
#default.conf
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm index.php; # 增加index.php
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
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;
}
}
mysql
#Dockerfile
FROM mysql:5.7
php
FROM php:5.6-fpm
RUN 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-dir=/usr/include/ --with-jpeg-dir=/usr/include/
&& docker-php-ext-install gd
web
#index.html
NGINX SUCCESS
#index.php
<?php phpinfo();?>
- 最后文件结构如图。
三、使用Compose实现多容器运行机制
yml文件
#docker-compose.yml
version: "3"
services:
nginx:
build: ./nginx
ports:
- "80:80"
links:
- "phpfpm"
volumes:
- ./html/:/var/www/html/
- ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
phpfpm:
build: ./phpfpm
ports:
- "9000:9000"
volumes:
- ./html/:/var/www/html/
links:
- "mysql"
mysql:
build: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/data/:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD : 123456
- 接下来我们使用docker compose来构建LNMP环境,进入存放构建环境的文件的文件夹内打开终端。
sudo docker-compose up -d
四、服务测试
-
参考菜鸟教程---PHP PDO
-
首先测试去访问index.html和index.php,如图。
-
因为我装的PHP只有PDO,其他的模块好像没有,所以本次就用PDO去连接数据库并进行操作,可在php配置信息的页面中找到,就是我的index.php里的内容。
-
首先我们尝试去连接mysql,如图,连接成功,我在这里修改了一些内容,把servername改成自己的ip地址,可能是因为我在大数据实验中改了一些本机的地址配置,所以才需要这样做,正常情况下应该使用localhost就可以。建议在安装php的时候装一个vim编辑器,直接在PHP容器里修改index.php,然后主机通过浏览器访问index.php就可以,也可以在挂载的目录里修改index.php。vim还可以修改php容器中其他配置文件,比较方便。
-
我们线尝试用PHP去创建一个数据库,如图创建成功,在PHP容器中编辑index.php,创建一个名为mytest的数据库。
-
在mysql容器中可以看到这个数据库已经创建完成。
-
接下来创建一个名为Students的表
-
显示创建成功,然后到mysql容器中查看是否有这个表,可以看到已经有这个表了。
-
下一步尝试去插入一些数据到这个表中。
-
我们到mysql容器中去查看是否插入成功,如图,插入成功,并且数据和我们输入的一样。这里用到了事务和回滚很好,因为是插入多条数据,如果插入数据失败不会造成数据库内的数据混乱。
-
接下来去修改学号为111111111同学的专业,也就是修改表内数据。
-
可以看到,该同学的专业已经被修改为electronic engineering。
-
最后我们进行删除测试,删除学号为222222222的同学这条数据。
-
如图,表内已经没有该同学的数据,测试完毕,基本的数据库操作都可以使用。
五、phpmyadmin的增加
- 参考博客---docker-compose搭建phpmyadmin
- 在原来的yml文件后面加上这几行,就是增加一个新的容器phpmyadmin
- 新的文件结构,就是多增加一个文件夹,里面放一个phpmyadmin的Dockerfile
#Dockerfile
FROM phpmyadmin/phpmyadmin:latest
-
之后访问9090端口即可进入,输入服务器,用户和密码即可进入,这里的服务器我输的是自己的静态ip地址。
-
这是进入之后的界面
-
这就是我之前实验中的数据库、表及表中的数据。
-
接下来进行一个简单的插入数据测试,如图,插入了学号为123456789的学生的一条数据。我们可以在图形化的界面进行各种数据库的操作,很方便,其余操作这里就不一一测试了。
问题&解决方法
-
github中下载docker compose过慢怎么办?
- 当时下载的时候显示剩余时间三十多个小时,我就直接放弃了官方文档给出的方法,而且这个好像也没有办法换下载源,后来在网上查到一种解决方法,速度不算很快,但是下载一个小文件还是够用了,几分钟就可以搞定。我这里已经操作过一次,如果和我版本相同的可以直接点击下载---docker-compose-Linux-x86_64百度网盘下载,提取码6jz8。下载好之后为了按照教程中的流程走,注意改一下名称,并且把它移到指定的位置。下面是下载的操作流程。
点击这个网站注册一个账号,只需要一个邮箱即可offcloud,注册登录之后,可以见到左侧有instant选项,点击进入。
之后再把需要下载的文件地址输入中间的框中,再点击download即可。
- 当时下载的时候显示剩余时间三十多个小时,我就直接放弃了官方文档给出的方法,而且这个好像也没有办法换下载源,后来在网上查到一种解决方法,速度不算很快,但是下载一个小文件还是够用了,几分钟就可以搞定。我这里已经操作过一次,如果和我版本相同的可以直接点击下载---docker-compose-Linux-x86_64百度网盘下载,提取码6jz8。下载好之后为了按照教程中的流程走,注意改一下名称,并且把它移到指定的位置。下面是下载的操作流程。
-
PHP无法连接到mysql,显示没有该文件或目录。
- 因为我的大数据实验课也是用这台虚拟机做的实验,我配置了静态ip地址,并且把localhost修改了,可能是因为这个原因,servername换成我的静态ip地址就可以正常运行。
-
创建LNMP环境时nginx会报错。
- 注意参考博客中的目录和我们自己的目录一般是不一样的,需要修改yml文件里的目录。
-
Tips:
- 在PHP容器要安装PDO等和数据库连接的model,还有建议在PHP容器内安装一个vim,到时候修改文件比较方便,或者直接在你挂载的目录里修改都可以。
- 有一些小小的错误可能就卡我了一个小时,另外还需要注意的是index.php中的语句语法一定要仔细检测,有时候连接出错可能就是语句有问题,比如说单词拼错,少写一个分号等等,很不容易检查出来,所以一定要细心细心细心。
- 需要查询PHP文件配置时可在PHP配置显示的网页查看,就是我最初的index.php中。
小结
docker compose其实并不难使用,难的地方是容器的配置,我对这些容器的配置基本上不了解,只能上网一篇一篇翻博客去查找,在查找资料的过程也是一种学习,从最初的想着完成难度太大,到最后一步一步做完,完成测试后才有种恍然大悟的感觉。整个过程比较难,一些简单的错误可能卡我数十分钟,而且还不能完全按照博客的去做,有些地方比如说路径,每个人都是不同的,这个时候就需要去理解这一步为什么这样做,我的该改成什么样,而不是简单的直接搬过来。没有能直接搬过来的博客,都需要自己理解和加工修改。同一个错误也可能有不同的原因,每个人不都是相同的,这个时候也需要自己一个一个去排查。
时间花费
基本任务+博客9小时。附加的选做1小时。