用docker在阿里云esc上搭建Apache+PHP+MariaDB环境
久闻docker大名,一直没用过
这次在阿里云的一台centOS7上要搭一下环境
正好学习一下,记录一下此过程
首先是安装Docker
yum -y install docker
安装完成后,启动docker服务
systemctl start docker.service
测试运行hello-world
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
还可以运行docker info命令,出现相关信息说明安装成功。
使用阿里云docker镜像加速器
登录阿里云 - 开发者平台:https://dev.aliyun.com/ 进入管理中心->Docker Hub
镜像站点->您的专属加速器地址 就可以看到加速器地址当你下载安装的Docker Version不低于1.10时,建议直接通过daemon config进行配置。 使用配置文件
/etc/docker/daemon.json(没有时新建该文件){ "registry-mirrors": ["<your accelerate address>"] }
重启Docker Daemon就可以了。
sudo systemctl daemon-reload sudo systemctl restart docker
本步骤未配置成功,pull镜像时,显示还是从docker.io下载
通过Dockerfile安装Apache+PHP
到 Docker Hub 找到PHP的镜像
https://hub.docker.com/_/php/
选择需要的Dockerfile
笔者选择的是7.0-apache版的Dockerfile
内容为:
FROM php:7.0-apache
COPY src/ /var/www/html/
FROM php:7.0-apache
表示从php:7.0-apache的镜像构建,而php:7.0-apache的Dockerfile详细内容
在https://github.com/docker-library/php/blob/2630167f7e69394bdd91f240443a0a521fd7872d/7.0/apache/Dockerfile
回到自己的服务器
新建my-php-app目录作为项目根目录
进入my-php-app目录并新建src目录存放php代码
将7.0-apache版的Dockerfile
将写好的Dockerfile文件放到此apache-php文件夹内
构建
docker build -t my-php-app .
(注意最后有个点用来表示当前目录,初次构建速度会比较慢,需要多等一会。)
出现如下信息,说明构建成功
Successfully built e669e1432638
然后就可以
运行容器
docker run -p 80:80 --name my-running-app -v $PWD/my-php-app/src:/var/www/html -d my-php-app
-p 80:80 绑定宿主的80端口
--name 容器名称
-v 宿主的目录$PWD/my-php-app/src绑定到容器的/var/www/html目录
-d 后台运行容器
my-php-app镜像名称
在src目录下,新建index.php
<?php
echo "hello world";
?>
访问http://服务器IP/可以看到输出了令人激动的hello world
这样,一个基于docker的php+apache的环境,就算初步建成了
安装mariaDB
新建/home/mariadb/data目录,用来存放数据
将/home/mariadb/data挂载到容器的存放数据的路径
便于保存,否则容器重启之后,数据库数据就没了
对了,要先在宿主主机上把SElinux关闭,否则可能出问题
docker search mariadb
docker pull mariadb
docker run -v /home/mariadb/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name my-mariadb -d mariadb:latest
-e MYSQL_ROOT_PASSWORD 设置root密码
PHP连接mariadb
编辑index.php,连接数据库,报错
因为php没有装相应的mysql扩展
于是安装pdo
编辑Dockerfile
FROM php:7.0-apache
COPY src/ /var/www/html/
RUN docker-php-ext-install pdo_mysql\
&& docker-php-ext-install mysqli
停止my-running-app容器并删除该容器
docker stop my-running-app
docker rm my-running-app
然后重新build镜像,再从新的镜像运行新容器
docker build -t my-php-app .
docker run -p 80:80 --name my-running-app -v /home/php/src:/var/www/html -d my-php-app
通过phpinfo发现pdo扩展已经安装上。
编辑index.php
$dsn = 'mysql:dbname=mysql;host=宿主主机IP';
$user = 'root';
$password = 'root';
try {
$dbh = new PDO($dsn, $user, $password);
if($dbh) {
echo "success";
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
打印出success,说明连接数据库成功。