简介
WordPress 已经成为全球部署和使用最广泛的网络应用程序之一。多年来不断的发展,现在可以基于 WordPress 及其可用的插件/扩展创建几乎无限数量的不同网站(甚至是 Web 应用程序)。
在这篇 DigitalOcean 文章中,我们将使用 Docker Linux 容器引擎,学习如何在 Ubuntu 云服务器上将 WordPress 应用程序容器化(即打包和包含),并发现在单个主机上部署多个 WordPress 站点的可能是最简单和安全的方式。
术语表
1. Docker 简介
2. WordPress 简介
3. 在 Ubuntu 上安装 Docker(最新版)
4. 使用 Docker
- 命令行界面使用和守护进程
- 客户端命令
5. 使用 Dockerfile
- 什么是 Dockerfile?
- Dockerfile 命令概述
6. 创建 WordPress 容器
- 拉取镜像
- 创建一个公开访问的 WordPress 容器
- 创建一个本地访问的 WordPress 容器
- 限制容器的内存使用
Docker 简介
Docker 项目提供了一组高级工具,这些工具共同使用一些 Linux 内核特性,旨在帮助开发人员和系统管理员将应用程序及其依赖项一起移植,并在系统和机器之间无缝运行。
Docker 通过创建基于 LXC(Linux 容器)的安全环境来实现这一目标,这些环境称为“容器”,使用镜像创建。这些容器的基础可以通过手动执行命令来构建,也可以通过 Dockerfile 自动化该过程。
注意: 要了解更多关于 Docker 及其部分(即 Docker 守护程序、CLI、镜像等)的信息,请查看我们的项目介绍文章:Docker 解释:入门指南。
WordPress 简介
WordPress 最初是作为一款易于安装和使用的自助发布平台(即博客引擎)而创建的。多年来它变得非常流行,这导致了许多第三方插件的开发,将该工具转变为完整的 CMS(内容管理系统)。基于 WordPress,可以使用简单的方式创建许多不同类型的网站和 Web 应用,并轻松部署。
WordPress 是一个使用 PHP 编程语言开发的开源平台,这无疑有助于其成功。PHP 目前是最常见的网站和 Web 应用程序创建语言之一,也是许多公司(包括 Facebook)的选择。
WordPress 站点依赖于 MySQL 关系型数据库来保存其数据,并且有多种运行 PHP 和 MySQL 的选择可用于支持 WordPress 站点。
在本文中,我们将采用一种经过验证的方法来创建安装了 WordPress 的 Docker 镜像,这将使您能够通过使用 Docker 在任何 VPS 上以单个命令运行另一个 WordPress 站点。
在 Ubuntu 上安装 Docker(最新版)
更新您的 droplet
sudo apt-get update sudo apt-get -y upgrade
确保可用 aufs 支持
sudo apt-get install linux-image-extra-`uname -r`
将 Docker 存储库密钥添加到 apt-key 以进行软件包验证
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
将 Docker 存储库添加到源
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"
更新存储库
sudo apt-get update
下载并安装 Docker
sudo apt-get install lxc-docker git
Ubuntu 的默认防火墙(UFW:简化防火墙)默认拒绝所有转发流量,这是 Docker 需要的。
启用 UFW 转发
使用 nano 文本编辑器编辑 UFW 配置。
sudo nano /etc/default/ufw
向下滚动并找到以 DEFAULT_FORWARD_POLICY 开头的行。
将:
DEFAULT_FORWARD_POLICY="DROP"
替换为:
DEFAULT_FORWARD_POLICY="ACCEPT"
按下 CTRL+X 并确认 Y 以保存并关闭。
重新加载 UFW
sudo ufw reload
允许远程连接
如果您计划远程使用 docker
守护程序,则需要允许默认的 Docker 端口 4243。
sudo ufw allow 4243/tcp
使用 Docker
在我们开始使用 Docker 之前,让我们快速回顾一下可用的命令,以便从我们的第一篇**入门指南**文章中刷新我们的记忆。
命令行界面使用和守护进程
安装完成后,Docker 守护进程应该在后台运行,准备接受由 docker
客户端发送的命令。在某些情况下,可能需要手动运行 Docker,可以使用以下命令。
运行 Docker 守护进程:
sudo docker -d &
客户端使用:
sudo docker [选项] [命令] [参数]
注意: Docker 需要 sudo 权限才能正常工作,因为它使用由 root
拥有的套接字。
客户端命令
您可以通过简单调用客户端来获取所有可用命令的完整列表:
docker
以下是截至版本 0.8.0
的所有可用命令列表:
Commands: attach 附加到正在运行的容器 build 从 Dockerfile 构建容器 commit 从容器的更改创建新镜像 cp 从容器文件系统复制文件/文件夹到主机路径 diff 检查容器文件系统的更改 events 从服务器获取实时事件 export 将容器内容作为 tar 存档流 history 显示镜像的历史记录 images 列出镜像 import 从 tar 存档的内容创建新文件系统镜像 info 显示系统范围的信息 insert 在镜像中插入文件 inspect 返回容器的低级信息 kill 终止正在运行的容器 load 从 tar 存档加载镜像 login 注册或登录到 Docker 注册服务器 logs 获取容器的日志 port 查找映射到 PRIVATE_PORT 的公共端口 ps 列出容器 pull 从 Docker 注册服务器拉取镜像或存储库 push 将镜像或存储库推送到 Docker 注册服务器 restart 重新启动正在运行的容器 rm 删除一个或多个容器 rmi 删除一个或多个镜像 run 在新容器中运行命令 save 将镜像保存为 tar 存档 search 在 Docker 索引中搜索镜像 start 启动已停止的容器 stop 停止正在运行的容器 tag 将镜像标记为存储库 top 查找容器的运行进程 version 显示 Docker 版本信息 wait 阻塞直到容器停止,然后打印其退出代码
使用 Dockerfile
什么是 Dockerfile?
Dockerfile 是包含按顺序声明的 命令 的脚本,Docker 将按照给定的顺序自动执行这些命令,以自动创建新镜像。
这些文件始终以 FROM
指令定义基础镜像开始。从那里开始,构建过程 开始,每个后续操作都会形成最终镜像,并进行提交(即保存镜像状态)。
Dockerfile 可以与 build
命令一起使用:
# 使用当前位置的 Dockerfile 构建镜像 # 使用 [name](例如 *wordpress_img*) 标记最终镜像 # 示例:sudo docker build -t [name] . sudo docker build -t wordpress_img .
注意: 要了解有关 Dockerfile 的更多信息,请查看文章:Docker Explained: Using Dockerfiles to Automate Building of Images。
Dockerfile 命令概述
Dockerfile 通过接收以下指令来工作:
ADD
:将文件从主机复制到容器CMD
:设置要执行的默认命令,或传递给 ENTRYPOINTENTRYPOINT
:设置容器内的默认入口应用程序ENV
:设置环境变量(例如 key = value)EXPOSE
:将端口暴露给外部FROM
:设置要使用的基础镜像MAINTAINER
:设置 Dockerfile 的作者/所有者数据RUN
:运行命令并提交最终结果(容器)镜像USER
:设置要从镜像运行容器的用户VOLUME
:将主机目录挂载到容器WORKDIR
:设置要执行 CMD 指令的目录
创建 WordPress 容器
拉取镜像
在我们的教程中,我们将使用一个名为 tutum/wordpress
的现成 WordPress 镜像。这个 WordPress 镜像是使用 Tutum 的 WordPress 镜像创建的:为了从该镜像创建容器,我们需要首先拉取(下载)它。
让我们拉取镜像:
docker pull tutum/wordpress
此命令将下载所有修改过的基础镜像层。
一旦镜像准备就绪,通过发出单个命令,我们就可以创建 Docker 化的 WordPress 实例。
创建可公开访问的 WordPress 容器
运行以下命令以创建一个可以从外部访问的容器,并指定一个端口(例如 80
):
# 用法:docker run -p [端口号]:80 tutum/wordpress # 示例: docker run -p 80:80 tutum/wordpress
上述命令将创建一个 WordPress 实例,该实例将在默认的 HTTP 端口 80
上接受外部连接。
创建一个本地可访问的 WordPress 容器
有时候,将容器设置为仅在本地可访问可能是最合适的。如果您决定设置负载均衡器或另一个反向代理来分发连接到多个 WordPress 实例,这将非常有用。
运行以下命令以创建一个本地可访问的容器。
# 分配一个动态端口: # 用法:docker run -p 127.0.0.1::80 tutum/wordpress # 示例: docker run -p 127.0.0.1::80 tutum/wordpress
执行上述命令后,Docker 将创建一个容器,提供其 ID,然后动态分配一个端口。您可以使用 port
命令来查找容器使用的端口。
# 用法:docker port [容器 ID] [私有端口号] # 示例: docker port 9af15d73fdf8a997 80 # 127.0.0.1:49156
在这种情况下,输出意味着容器只能在本地主机的端口 49156
上访问。您可以使用提供的完整地址来重定向从反向代理的连接。
如果您想指定一个端口,只需将它放在 IP 地址和内部 Web 服务器使用的私有端口之间(例如 80
):
# 用法:docker run -p 127.0.0.1:[本地端口]:80 tutum/wordpress # 示例: docker run -p 127.0.0.1:8081:80 tutum/wordpress
这样,您将拥有一个在本地端口 8081
可访问的 WordPress 实例。
注意: 为了在后台运行容器,您还需要在 run
命令之后添加 -d
标志:
docker run -d ..
否则,您将连接到容器,您将看到所有正在运行的应用程序的输出。
要离开容器,就像在介绍文章中所示,您需要使用转义序列 CTRL+P,然后立即按 CTRL+Q。
使用 docker ps
命令,您可以获取正在运行的容器列表,以找到您新创建的容器的 ID。
注意: 使用 -name [名称]
参数,您可以使用名称标记一个容器,这样就不需要处理复杂的容器 ID:
docker run -d -name new_container_1 ..
限制容器的内存使用
为了限制 Docker 容器进程可以使用的内存量,只需使用 -m [内存量]
标志来设置限制。
要运行一个内存限制为 256 MB 的容器:
# 示例:docker run -name [名称] -m [内存(整数)][内存单位(b、k、m 或 g)] -d(运行而不是附加)-p(设置访问和暴露端口)[镜像 ID] docker run -m 64m -d -p 8082:80 tutum/wordpress
要确认内存限制,您可以检查容器:
# 示例:docker inspect [容器 ID] | grep Memory docker inspect 9a7562a361122706 | grep Memory
注意: 上述命令将从检查输出中获取与内存相关的信息。要查看有关容器的所有相关信息,请选择 sudo docker inspect [容器 ID]
。另请注意,您的 Linux 内核必须支持交换限制功能才能实际限制工作。
要获取完整的安装和使用 Docker 的指令集,请查看 docker.io 上的 Docker 文档。