blog-web/source/_posts/linux/3.3、Docker(3)-WordPress部署实践.md
结发受长生 10e4564c71 时间调整
2018-05-20 19:39:08 +08:00

127 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 3.3、Docker(3)-部署wordpress实践
date: 2018-2-10 22:38:32
tags:
- linux
- docker
categories:
- linux
---
站在 Docker 的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器......Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。
这正是微服务microservices的思想软件把任务外包出去让各种外部服务完成这些任务软件本身只是底层服务的调度中心和组装层。
<!-- more -->
![微服务](/images/linux/20180505231057.png)
微服务很适合用 Docker 容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。
![应用解耦](/images/linux/20180505231120.png)
现在尝试实践搭建一个wordpress的服务
这是一个php编写的博客系统
运行需要依赖的环境有 : mysql php apache
当然也包括php的扩展包mysqli , 用于实现mysql数据库的连接
### 自建wordpress容器
#### 尝试启动一个php-apache容器
创建应用目录 php-demo , 然后进入该目录执行
```bash
docker container run \
-d \
--rm \
--name wordpress \
--volume "$PWD/":/var/www/html \
php:7.2-apache
```
> linux当中 , 命令末尾的`\`代表换行继续输入命令 , 而不立即执行
+ `-d` : 容器在后台运行 , 输出内容不会打印到终端(可以用docker logs [ContainerId]查看)
+ `--rm` : 容器运行停止后 , 自动删除容器文件
+ `--name` : 指定容器的名字
+ `--volume` : 指定目录映射 , 这里表示把当前目录映射到容器内的/var/www/html目录
这个目录是apache服务器对外访问的默认目录
这样我们就可以直接在当前目录中添加php页面文件进行访问
成功从远程仓库下载**php:7.2-apache**镜像并启动容器之后
会提示容器对外访问的IP地址 , 比如**172.17.0.2** , 可以直接访问这个地址
但是此时还没有在访问目录中添加php页面
可以写个测试页面index.php
```php
<?php
phpinfo();
?>
```
此时再访问就可以看到php信息了
#### 安装wordpress
删掉index.php
官网下载wordpress安装包 , 直接解压到该目录下
然后访问就可以看到wordpress的初始化页面了
![wordpress_init](/images/linux/wordpress_init.png)
但是目前还没有mysql的容器
#### 运行mysql容器
```bash
docker container run \
-d \
--rm \
--name wordpressdb \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7
```
`env`代表向容器中传入的环境变量 , 容器中的mysql会根据环境变量创建数据库以及设置root用户的密码
#### 添加mysqli扩展
PHP 的官方 image 不带有 mysqli 扩展必须自己新建一个image
新建`Dockerfile`文件
```
FROM php:7.2-apache
RUN docker-php-ext-install mysqli
CMD apache2-foreground
```
打包镜像时安装mysqli的扩展 , 运行容器时启动apache
之后构建image
```bash
docker build -t php-with-mysql .
```
#### 运行php-with-mysql
```bash
docker container run \
-d \
--rm \
--volume "$PWD/":/var/www/html \
--link wordpressdb:mysqlhost \
php-with-mysql
```
link是实现容器之间通信的一种机制 , 表示该容器要链接到**wordpressdb**容器 , 冒号表示该容器主机的名称是**mysqlhost**
(之后配置数据库连接时 , 主机名称不是localhost , 而是**mysqlhost**)
由于wordpress在运行时需要写入配置文件( 也包括自身版本的更新 )
我们可以给当前目录添加写权限
```bash
chmod -R 777 ./
```
之后再访问172.17.0.2 , 填写数据库配置信息即可完成
### 使用wordpress官方镜像
首先仍然是要启动mysql的容器 , 参考上面的**运行mysql容器**
然后使用wordpress的官方镜像构建容器
```bash
docker container run \
-d \
--rm \
--name wordpress \
--env WORDPRESS_DB_PASSWORD=123456 \
--link wordpressdb:mysqlhost \
wordpress
```
环境变量`WORDPRESS_DB_PASSWORD`是 MySQL 容器的根密码
运行之后的访问和初始化操作和前一种方式相同