--- title: 3.3、Docker(3)-部署wordpress实践 date: 2018-2-10 22:38:32 tags: - linux - docker categories: - linux --- 站在 Docker 的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器......Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。 这正是微服务(microservices)的思想:软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。 ![微服务](/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信息了 #### 安装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 容器的根密码 运行之后的访问和初始化操作和前一种方式相同