2020系统综合实验 第3次实践作业
完成Docker-compose的安装
- github的release下载在国内被墙的原因,导致按照官方文档方式下载无数次都失败。最后折腾了半天在ubuntu里配置了qv2ray,还折腾了一下路由的规则判断(github的流量会自动不走代理),结果还是不行。
- 猜测可能是因为终端使用crul下载的原因导致无法走代理。于是跑到github官网上把文件下下来
- 将下载的文件复制到目标文件夹中,并将可执行权限应用于二进制文件
- 安装完后发现失败了,查了一下发现自己下载的两个文件中docker-compose-Linux-x86_64.sha256好像是没有用的,每次cp操作的时候都前面的二进制文件内容都被后面的docker-compose-Linux-x86_64.sha256覆盖,最终是用了后缀sha256的文件(不知道是干嘛的),改成只用docker-compose-Linux-x86_64。至此,docker-compose安装完成。
Dockerfile编写
- dockerfile-nginx
FROM nginx
MAINTAINER by jamwong
EXPOSE 2525
- dockerfile-php
FROM php:7.4-fpm
MAINTAINER by jamwong
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
- default.conf
server {
listen 2525; #修改映射端口
server_name localhost;
location / {
root /home/docker-compose/web; #修改工作目录
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /home/docker-compose/php;
fastcgi_pass zxhphp_container:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- docker-compose.yml
# docker-compose.yml
version: "3"
services:
php:
image: zxhphp_image
container_name: zxhphp_container
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:2525" #修改端口映射
volumes:
- ./web:/home/docker-compose/web #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
- ./default.conf:/etc/nginx/conf.d/default.conf #挂载配置文件
mysql:
image: zxhmysql_image
container_name: zxhmysql_container
build:
context: .
dockerfile: dockerfile-mysql
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql #挂载容器卷,实现数据同步,防止数据丢失
使用Compose实现多容器运行机制
- 执行docker-compose文件
sudo docker-compose up -d --build
- 但是这个时候,build php的时候发生的错误,判断是镜像源的问题
- 为了解决debian源无法下载的问题,进行了多次尝试。最后选择修改php镜像中的原来的sources.list。
- 但是!还是没有效果…… 开始怀疑是我网络的问题,我又修改了虚拟机当中的dns
- 结果!还是没有解决…… 最后在经历了一下午的崩溃之后,我发现在vmware当中虚拟机似乎没有与主机共享网络,可能有些潜在的问题。我又到vmware当中调整了网络适配器,设置为internet共享,使得虚拟机与主机共享流量,然后挂上了VPN,并接上了手 机 热 点 😈
- 最后! 是的,就像上图一样,我终于成功了😭 走到这一步真的是心力交瘁,因为莫名其妙的网络问题耗掉了将近8个小时的时间。
服务测试
-
修改index.php 连接数据库并查看结果
-
修改index.php 创建数据库并查看结果
-
修改index.php 创建数据表并查看结果
-
修改index.php 表记录的插入并查看结果
-
修改index.php 表记录的修改并查看结果
-
修改index.php 表记录的删除并查看结果
选做
-
增加一个phpmyadmin容器,实现web端的数据库管理。
-
添加文件 dockerfile-phpadmin
FROM phpmyadmin/phpmyadmin
MAINTAINER jamwong
EXPOSE 8080
- 在yml中添加
phpmyadmin:
image: zxh_phpmyadmin
container_name: zxh_phpmyadmin_container
build:
context: .
dockerfile: dockerfile-phpadmin
ports:
- "8080:80" # phpmyadmin默认监听80
environment:
PMA_HOST: zxhmysql_container # 第一次忘了写环境变量 导致无法登陆 将对应的mysql容器写上就可以了
- 第一次出现无法连接到mysql的情形,原因和解决方法已经补充在注释当中
- 成功登陆phpMyAdmin
总结
写到这里属实是有些心力交瘁了。利用五一假期期间换上了ubuntu 20.04(LTS),花了不少时间重新配环境重新采坑,但是这一次对ubuntu的源有了更深的理解。因为网络的问题,这次采坑花费的时间保守估计超过了24小时……不过幸好一直有大佬传授经验一起踩坑,除了网络玄学其他都还算顺利。
一些问题和解决方法都写在上文的博客中了,总结下来其实只有一句话 z a q n y 永 远 滴 神