1)完成Docker-compose的安装
- 刚开始的时候直接通过老师给的参考手册来安装doDocker-compose发现实践会特别长
- 接着通过curl命令下的链接可以知道只需要把这个包下载下来应该就可以提速了,后面看到有大佬发了链接,就直接在windows端下载下来然后复制到linux相应的文件目录下,这个过程会发现直接复制到文件夹下会出现权限不够的问题,所以使用如下语句复制到相应文件夹
sudo cp '/home/y/桌面/docker-compose' '/usr/local/bin'
- 将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
- 查看版本号
docker-compose --version
安装成功
2)Dockerfile编写
创建docker-compose文件夹,并创建相应的dockerfile文件
docker-nginx
FROM nginx
MAINTAINER by Yaobink
EXPOSE 2419
docker-php
FROM php:7.4-fpm
MAINTAINER by Yaobink
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
docker-mysql
FROM mysql:5.7
MAINTAINER by Yaobink
docker-myadmin
FROM phpmyadmin/phpmyadmin
MAINTAINER by Yaobink
EXPOSE 8080
配置nginx的配置文件
server {
listen 2419;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/myweb;
index index.html index.htm;
}
#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 /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root /usr/myweb;
fastcgi_pass c_php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
}
编写docker-compose.yml
version: "3"
services:
php:
image: my_php
container_name: c_php
build:
context: .
dockerfile: dockerfile_php
environment:
MYSQL_PASSWORD: 123456 #设置好环境变量,在php代码中使用变量名直接引用
volumes:
- ./web:/usr/myweb #挂载工作目录到本机web目录
nginx:
image: my_nginx #指定镜像名
container_name: c_nginx #指定容器名
build:
context: .
dockerfile: dockerfile_nginx #指定dockerfile文件
ports:
- "80:2419" #修改端口映射
volumes:
- ./web:/usr/myweb #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
- ./default.conf:/etc/nginx/conf.d/default.conf #挂载配置文件
mysql:
image: my_mysql
container_name: c_mysql
build:
context: .
dockerfile: dockerfile_mysql
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql #挂载容器卷,实现数据同步,防止数据丢失
phpmyadmin:
image: my_myphpmyadmin
container_name: c_myphpmyadmin
build:
context: .
dockerfile: dockerfile_phpmyadmin
ports:
- "8080:80" # phpmyadmin默认监听80
environment:
PMA_HOST: mysql #指定mysql服务所在的host
3)使用Compose实现多容器运行机制
执行docker-compose文件
sudo docker-compose up -d --build
查看镜像创建和容器创建的结果
4)服务测试
测试访问index.html和index.php
修改index.php内容
访问index.php
发现成功实现php文件下的内容,成功连接数据库并创建表格
- 进入容器查看数据库
sudo docker exec -it c_mysql /bin/bash
mysql -u root -p
show databases;
创建数据表
- 编辑index.php文档
- 查看结果
插入并查询数据
-
编辑index.php文档
-
查看结果
修改数据
删除数据
5)选做
增加一个phpmyadmin容器,实现web端的数据库管理。
docker-compose.yml和docker_phpmyadmin文件在前面已经给出
访问localhost:8080,并登陆
8080端口是在docker文件声明的暴露端口
可以直接实现插入删除修改等操作
6)问题
(1)在服务测试访问index.html和index.php出现无法连接的情况,后面找了半天defaul.conf里面的设置端口写的不对,接着还是不行,仍然连接失败
通过查看日志文件,发现是配置文件中的容器名没有对应上,于是做了修改,就正常连接了
sudo docker-compose up
(2)同样的解决方法,也是通过查询日志发现的,在查看容器的运行状态的时候发现mysql的容器的运行状态是Exited (1)的状态,查看后发现是没有设置初始的密码的缘故,因此更改了yml文件,从而得到结果
(3)在一些文件的编写上可能刚开始理解的不够,有些直接复制过来的地方有个别细节没有修改到,比如一些名称的问题,导致中途出现了较多的错误。因此对复制过来的地方应该花时间理解含义,我是由于设置的容器名称没有修改导致一些地方连接不上还有后面index.php文件的servername刚开始也忘记修改,这些细节应该注意。
7)花费时间
这次作业大概花了10个小时,主要花费的时间是在开始作业前的一些查阅、还有前面的dockerfile文件和yml文件的编写上,以及在nginx的配置问题上,虽然挂载文件没有出错,但是端口号和有个地方理解不够写错了容器名称停留了太多时间。
8)小结
开始作业前感觉这个作业好像特别难的样子,特别是刚开始看到那些文件感觉好多,有点无从下手,不过看了看别人的作业,在着手开始去做,做完了觉得其实并不难,有些地方通过查阅资料都是可以慢慢解决的,主要的问题还是应该马上动手去做,只有动手了才会遇到问题并解决问题,还有就是最重要的细节问题了,特别是在那些配置文件上,要是这些问题在刚开始就解决感觉可以节省很多时间。还有这次作业我是刚开始写了前面的配置文件,写完没有测试,后面过了好几天再来做,感觉很多之前写的东西都忘了,也是后面导致出现较多小错误的原因,所以感觉还是应该拿出比较充裕的时间把作业直接完成会更有效果也更有效率。