一、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
- 创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 测试是否安装成功,如图,安装成功
docker-compose --version
二、Dockerfile编写
创建一个docker_Compose文件夹,然后在文件夹里创建如下各个文件
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
phpfpm
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 \
html
#index.html
Success!Congratulations!
#index.php
三、使用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 : 121212
使用docker compose来构建LNMP环境 ,在docker_compose文件夹内打开终端
sudo docker-compose up -d
构建成功如下
四、服务测试
1.访问index.html
2.访问index.php
3.采用PDO连接数据库
修改 index.php
内容为下
再次访问index.php
4.创建数据库
修改 index.php
内容为下
再次访问index.php
用终端进入mysql容器,可以看到这个数据库已经创建完成
5.创建一个名为student的表
修改 index.php
内容为下
再次访问index.php
在容器中看到已经有这个表了
6.向表中插入数据
修改 index.php
内容为下
再次访问index.php
在容器中查看插入数据是否成功
7.删除表中数据
只需要将上面的sql语句改为
再次访问index.php
在容器中查看删除数据是否成功
8.修改表中数据
只需要将上面的sql语句改为
再次访问index.php
在容器中查看修改数据是否成功
五、选做:增加phpmyadmin容器
1.在原来的yml文件后面加上这几行,就是增加一个新的容器phpmyadmin
phpmyadmin:
build: ./phpmyadmin
container_name: "phpmyadmin"
ports:
- "9090:80"
links:
- "mysql"
environment:
- PMA_ARBITRARY=1
2.在文件夹docker_compose中多创建如下文件
Dockerfile
#Dockerfile
FROM phpmyadmin/phpmyadmin:latest
3.执行 sudo docker-compose up -d
命令
4.访问http://localhost:9090/
,可以看到之前实验中的数据库、表及表中的数据
六、问题和解决方法
1.一开始docker compose下载的非常慢,都是要等七八个小时,试了好多次,也换了网络,还是一直不行,后来突然有一次变快了,五分钟下好了。。。
2.采用PDO连接数据库时会出现如下第一张图的问题,把servername改了之后又会出现如下第二张图的问题,后来把密码改成和yml文件中一样的就可以了。(前面一直改yml文件中的密码,让它和index.php文件中一致,可是改完yml文件中的密码问题还是存在,后来发现yml文件中密码改完要重新运行,所以还是改index.php中的比较方便)
3.总共耗时约10h(包括写博客)