利用Docker快速部署wordpress站点

在学习Docker的时候,看到关于通过Docker容器的方式快速搭建WordPress站点,这里加以记录,便于日后的查看。

在单一容器中使用Supervisor运行WordPress

问题

你希望在一个容器中运 行应用程序所需的所有服务。以运行 WordPress 为例,你想在一个容器中同时运行 MySQL 和 HTTPD 服务。由于 Docker 运行的是前台进程,所以你需要找到一种同时运行多个“前 台”进程的方式。

解决方案

使 用 Supervisor(http://supervisord.org/index.html) 来 监 控 并 运 行 MySQL 和 HTTPD。
Supervisor 不是一个 init 系统,而是一个用来控制多个进程的普通程序。

本范例是一个在容器中使用 Supervisor 同时运行多个进程的例子。你可以以 此为基础在一个 Docker 镜像中运行多个服务(比如 SSH、Nginx)。本范例 中,WordPress 的配置是一个最精简的可行配置,并不适用于生产环境。

示例中的文件可以在 GitHub(https://github.com/how2dock/docbook/tree/master/ch01/supervisor) 下载。这些文件中包括一个用于启动虚拟机的 Vagrantfile,Docker 运行在该虚拟机 中,还包含一个 Dockerfile 来定义要创建的镜像,此外还有一个 Supervisor 的配置文件(supervisord.conf)和一个 WordPress 的配置文件(wp-config.php)。

为了运行 WordPress,你需要安装 MySQL、Apache 2(即 httpd)、PHP 以及最新版本 的 WordPress。你将需要创建一个用于 WordPress 的数据库。在该范例的配置文件中, WordPress 数据库用户名为 root,密码也是 root,数据库名为 wordpress。如果你想对数据 库的配置进行修改,需要同时修改 wp-config.php 和 Dockerfile 这两个文件,并让它们的设 置保持一致。

这里定义了两个被监控和运行的服务:mysqld 和 httpd。每个程序都可以使用诸如 autorestart 和 autostart 等选项。最重要的指令是 command,其定义了如何运行每个程序。 在这个例子中,Docker 容器只需要运行一个前台进程:supervisord。从 Dockerfile 中的 CMD [“/usr/bin/supervisord”] 这一行也能看出来。

在你的 Docker 主机上,构建该镜像并启动一个后台容器。如果按照例子中的配置文件使 用了基于 Vagrant 的虚拟机,可以执行如下命令。

 $ cd /vagrant
 $ docker build -t wordpress .
 $ docker run -d -p 80:80 wordpress

容器启动后还会在宿主机和 Docker 容器之间为 80 端口进行端口映射。现在只需要在浏览 器中打开 http://<ip_of_docker_host>,就可以进入到 WordPress 的配置页面了。

讨论

尽管通过 Supervisor 在一个容器内同时运行多个应用服务工作起来非常完美,但是你最好 还是使用多个容器来运行不同的服务。这能充分利用容器的隔离优势,也能帮助你创建基 于微服务设计思想的应用(参见《微服务设计》1)。最终这也将会使你的应用更具弹性和可 扩展性。

参考

• Supervisor 文档(http://supervisord.org/index.html)
• Docker Supervisor 文档(https://docs.docker.com/articles/using_supervisord/)

使用两个链接在一起的容器运行WordPress博客程序

问题

你希望通过容器来运行一个 WordPress 网站(http://wordpress.com/),但是你不想让 MySQL 和 WordPress 在同一个容器中运行。你时刻谨记对关注点进行分离的原则,并尽 可能地对应用程序的不同组件进行解耦。

解决方案

启动两个容器:一个运行来自 Docker Hub(http://hub.docker.com/)的官方 WordPress, 另一个运行 MySQL 数据库。这两个容器通过 Docker 命令行工具的 --link 选项链接在 一起。
开始下载最新的 WordPress(https://hub.docker.com//wordpress/)和 MySQL(https://.hub. docker.com//mysql/)镜像,如下所示。 $ docker pull wordpress:latest
$ docker pull mysql:latest

启动一个 MySQL 容器,并通过命令行工具的 --name 选项为这个容器设置一个名称,通过 MYSQL_ROOT_PASSWORD 环境变量来设置 MySQL 的密码,如下所示。

 $ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker -d mysql

如果在使用 mysql 镜像时没有指定标签,Docker 会自动使用 latest 标签, 这也是前面刚刚下载的镜像。容器通过 -d 选项以守护式的方式开始运行。

现在就可以基于 wordpress:latest 镜像启动 WordPress 容器了。这个容器将会通过 --link 选 项链接到 MySQL 容器,这样 Docker 会自动进行网络配置,让 WordPress 容器能访问到 MySQL 容器中暴露出来的端口,如下所示。

 $ docker run --name wordpress --link mysqlwp:mysql -p 80:80 -d wordpress

两个容器都会以后台方式运行,WordPress 容器的 80 端口会被映射到宿主机的 80 端口上, 如下所示。

[root@ip-172-31-1-1 supervisor]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
48b9c0cabe31        wordpress           "/usr/bin/supervisord"   5 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp    wordpress
3756d0e220bf        mysql               "docker-entrypoint..."   44 seconds ago      Up 43 seconds       3306/tcp, 33060/tcp   mysqlwp

在浏览器中打开 http://<ip_of_host> 就会看到 WordPress 的安装界面,里面有选择语言的窗 口,如图 1-10 所示。完成了 WordPress 的安装过程,你将会得到一个在两个链接到一起的 容器之上运行的 WordPress 网站。

讨论

这两个 WordPress 和 MySQL 镜像都是官方镜像,分别由 WordPress 和 MySQL 的社区来维护。Docker Hub 这些镜像的页面都有关于如何进行配置以从这些镜像创建容器的详细文档。

令人感兴趣的是,你可以通过设置几个环境变量来创建一个数据库,并且只有具有相应权 限的用户才能操作数据库:MYSQL_DATABASE、MYSQL_USER 和 MYSQL_PASSWORD。在前面的例子中,WordPress 使用了 MySQL 的 root 用户,这并不是一个好实践。最好是创建一个名 为 wordpress 的数据库,并为其创建一个用户,像下面这样。

$ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker \
                                 -e MYSQL_DATABASE=wordpress \
                                 -e MYSQL_USER=wordpress \
                                 -e MYSQL_PASSWORD=wordpresspwd \
                                 -d mysql

数据库容器启动之后,可以启动 WordPress 容器并指定你设置好的数据库表,如下所示。

$ docker run --name wordpress --link mysqlwp:mysql -p 80:80 \
                                   -e WORDPRESS_DB_NAME=wordpress \
                                   -e WORDPRESS_DB_USER=wordpress \
                                   -e WORDPRESS_DB_PASSWORD=wordpresspwd \
                                   -d wordpress

如果你需要删除所有容器,可以使用下面这种嵌套 shell 的快捷方式。

$ docker stop $(docker ps -q)
$ docker rm -v $(docker ps -aq)

docker rm 命令的 -v 选项用来删除 MySQL 镜像中定义的数据卷。

docker搭建WordPress的最佳实践

上面两个模块的内容是出自于《docker实战》这本书中,下面我结合自己的实际操作,总结出搭建的实际步骤。

1.docker mysql

实战模块还待完善…敬请期待

Linux搭建Wordpress环境

最后附上不是通过docker方式搭建博客的教程实例Linux搭建Wordpress环境 pdf下载