docker-compose从零部署php-apache和连接mysql(超详细)

2,181 阅读4分钟

准备工作

1.安装操作系统以及创建虚拟机

推荐使用centos7,镜像的下载网址:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com),下载第二个,即CentOS-7-x86_64-DVD-2009.iso

2.关闭防火墙、SElinux


# 停止防火墙服务
systemctl stop firewalld.service
# 关闭开机自启服务
systemctl disable firewalld.service
# 查看防火墙状态
systemctl status firewalld.service

# 临时关闭SElinux
setenforce 0
# 永久关闭SElinux,修改配置文件,将SELINUX=enforcing改为SELINUX=permissive
vim /etc/selinux/config
# 查看配置文件
cat /etc/selinux/config

1.png

3.使用xshell连接虚拟机

如果像我一样使用xshell远程操作虚拟机,需要设置固定的ip地址,因为vm会有时会更换虚拟机的ip地址,使得xshell突然连接不上虚拟机。(嫌麻烦的可以跳过这一步,可以使用虚拟机提供的终端,不影响结果)

# 打开文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改IP地址,子网掩码,网关,没有则手动添加;修改BOOTPROTO为static。查看配置
cat /etc/sysconfig/network-scripts/ifcfg-ens33

3.png

4. 配置yum以及安装docker软件

# 更新yum包
yum -y update
# 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置国内的yum源,加快下载速度
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker
yum install -y docker-ce
# 查看docker版本,验证是否安装成功。结果如下图
docker -v
2.png

自定义MySQL镜像

1.拉取和创建容器

# 先启动docker服务
systemctl start docker
# 设置开机自启
systemctl enable docker

# 拉取mysql镜像
docker pull mysql:5.6

# 创建并在后台启动容器
docker run -id -p 3306:3306 --name=c_mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

# 参数说明:
# docker run -id:创建名字为c_mysql的容器,并在后台启动。
# -p 3306:3306:由于外部不能直接访问容器,而宿主机可以访问容器,且外部可以访问宿主机,所以我们可以通过宿主机对容器进行端口映射,实现外部间接访问容器。3306为宿主机端口号,3306为容器端口号。
# -v … :用于配置数据卷,实现宿主机和容器之间的数据同步。
# -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码,必须写。

6.png

2.往数据库中添加数据

# 进入c_mysql容器中
docker exec -it c_mysql /bin/bash
# 登录mysql,输入账号和密码
mysql -uroot -p123456

# 创建book数据库
create database book;
# 进入book数据库
use book;

# 创建student表,定义学号(no)、姓名(name)、成绩(scroe)三个字段
create table student(no INT PRIMARY KEY,name VARCHAR(32),score VARCHAR(32));
# 向表中插入文档
insert into student (no,name,score)values (123,"suhang",98);
insert into student (no,name,score)values (478,"jenny",86);
insert into student (no,name,score)values (258,"tonny",100);

# 查看student表
select * from student;
7.png

3.将容器转化为镜像

# docker commit 容器id 镜像名称:版本号
docker commit c_mysql zhangshan-db:1.0
# 查看所有镜像
docker images -a

8.png

构建自定义的Apache镜像

1.创建项目目录以及index.php文件

# 创建一个项目的目录my-project,然后进入
mkdir /root/my-project && cd /root/my-project

# 创建并编辑index.php文件(用于显示建立的数据表student中的数据)
vim index.php
# 然后复制下面的代码(注意要写自己的主机号)
<?php
$conn = new mysqli('192.168.100.140', 'root','123456','book');
$sql="select * from student";
$result=mysqli_query($conn,$sql);
Echo "<h1>PHP是世界上最好的编程语言!!!</h1>";
While($row=mysqli_fetch_array($result))
{
Echo "<h2>";
Echo $row['no'],$row['name'],$row['score'];
Echo "<p>";
Echo "</h2>";
}
?>

# 保存后,退出查看
cat /root/my-project/index.php

99.png

2.创建dockerfile,并构建新的Apache镜像

# 创建和编辑dockerfile文件
vim dockerfile

# 复制下面的代码
FROM php:5.6-apache
RUN docker-php-ext-install mysqli
COPY index.php /var/www/html
# 参数说明:
# php:5.6-apache是基础镜像
# mysqli是用于连接数据库的类
# COPY是将当前的index.php文件复制到apache的首页中,用于页面展示

# 根据dockerfile构建新的apache镜像(注意后面有个小点)
docker build -f dockerfile -t zhangshan-web:1.0 .

# 查看所有镜像文件
docker images -a

10.png

应用Docker-Compose同时启动Apache和MySQL容器

1.下载docker-compose

# 下载docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 设置文件为可执行
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version

11.png

2.启动容器

# 停止所有容器的运行
docker stop `docker ps -aq`
# 删除所有容器 
docker rm `docker ps -aq`

# 创建一个docker-compose.yml文件
vim docker-compose.yml
# 内容如下
database:
	image: zhangshan-db:1.0
	ports:
		- "3306:3306"
	volumes:
		- /root/mysql/data:/var/lib/mysql
		- /root/mysql/conf:/etc/mysql/conf.d
web:
	image: zhangshan-web:1.0
	ports:
		- "80:80"
		- "443:443"
# volumes是将原来我们写入数据库的数据挂载到对应的文件中,启动mysql容器后,它就会有这些数据

# 利用docker-compose同时创建并运行apache和MySQL容器
docker-compose up -d

101.png

打开页面查看效果,大功告成!如图:

100.png

如果对你有用,请点赞支持一下吧。