一、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
测试是否安装成功:
docker-compose --version
二、Dockerfile编写(LNMP)
本次实验的 LNMP 为 Linux + Nginx + MySQL + PHP. 相应的dockerfile如下:
三、使用Compose实现多容器运行机制
首先是配置文件default.conf的修改
然后是yml文件的建立,详细代码如下:
version: "3"
services:
nginx:
image: mynginx_image #指定镜像名
container_name: mynginx #指定容器名
build:
context: .
dockerfile: dockerfile_nginx #指定dockerfile文件
ports:
- "80:2341" #修改端口映射
volumes:
- ./web:/web/html #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
- ./default.conf:/etc/nginx/conf.d/default.conf #挂载配置文件
php:
image: myphp_image
container_name: myphp
build:
context: .
dockerfile: dockerfile_php
environment:
MYSQL_PASSWORD: 123456 #设置好环境变量,在php代码中使用变量名直接引用
volumes:
- ./web:/web/php #挂载工作目录到本机web目录
mysql:
image: mysql_image
container_name: mysql
build:
context: .
dockerfile: dockerfile_mysql
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql #挂载容器卷,实现数据同步,防止数据丢失
phpmyadmin:
image: myphpmyadmin_image
container_name: myphpmyadmin
build:
context: .
dockerfile: dockerfile_phpmyadmin
ports:
- "8080:80" # phpmyadmin默认监听80
environment:
PMA_HOST: mysql
接着构建LNMP环境
执行代码: sudo docker-compose up -d --build
查看相应的镜像和容器
网页响应测试
四.服务测试
首先检测PHP是否能够成功连接Mysql数据库
修改宿主机~/docker_compose/web目录下的index.php文件
测试图:
然后创建数据库
在新建数据库中创建表
向表中插入数据
基本数据库操作
五.问题与总结
又一次遇到html映射的问题,在映射index文件的是出现了403错误.后来一步步排查后,发现了在更改配置文件default.conf时没有和后面执行的yml里设置index文件的位置对应起来,导致yml在执行时,没有创建在配置文件上的修改的index文件位置.导致无法映射成功.
关于容器卷的相关知识:docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷。本次实验用到的相关特点是其可在容器之间共享或重用数据,卷中的更改可以直接生效。所谓的挂载操作,相当于在本地建立一个文件夹,然后容器里面定义一个工作目录,把本地的文件夹和容器的工作目录关联起来,不管是在容器工作目录或者在本地文件夹增加修改文件,两边都会同步.
关于选做部分的phpmyadmin容器,看了同学的博客,发觉是实现web端的数据库管理,通过可视化的界面,能够更加方便快捷的对数据库进行操作.相关操作下,确实变得更加简单一些.
本次的作业还是行走在先行者闯出来的路上,但也还是花费了大约两个下午的时间.遇到的问题不同,而时间也近乎还是花费在寻找问题以及解决的这一个过程.