如何在Ubuntu上Dockerise和部署多个WordPress应用程序

来自菜鸟教程
跳转至:导航、​搜索

介绍


WordPress 已成为世界上部署和使用最广泛的 Web 应用程序之一。 由于多年的不断发展,现在可以基于 WordPress 及其可用的插件/扩展创建几乎无穷无尽的不同网站(甚至网络应用程序)。

在这篇 DigitalOcean 文章中,使用 Docker Linux 容器引擎,我们将学习如何 dockerise(即 打包并包含)Ubuntu 云服务器上的 WordPress 应用程序,并发现在单个主机上部署多个 WordPress 站点可能是最简单、最安全的方法。

词汇表


1. 码头工人简介


2. WordPress 简介


3. 在 Ubuntu 上安装 Docker(最新)


4. 使用 Docker


  1. 命令行界面使用和守护进程
  2. 客户端命令

5. 使用 Dockerfile


  1. 什么是 Dockerfile?
  2. Dockerfile 命令概述

6. 创建 WordPress 容器


  1. 拉动图像
  2. 创建可公开访问的 WordPress 容器
  3. 创建本地可访问的 WordPress 容器
  4. 限制容器的内存使用

码头工人简介


Docker 项目提供了更高级别的工具,可以协同工作,这些工具建立在一些 Linux 内核特性之上,旨在帮助开发人员和系统管理员移植应用程序——连同它们的所有依赖项——并让它们跨系统和机器运行 [ X292X]无头痛。

Docker 通过为使用映像创建的称为“容器”的应用程序创建安全的、基于 LXC(Linux 容器)的环境来实现这一点。 这些容器基础可以通过像虚拟机一样登录手动执行命令来构建,也可以通过 Dockerfiles 自动化流程来构建。

注: 了解更多关于 Docker 及其部件(即 docker 守护进程、CLI、图像等),请查看我们对项目的介绍性文章:Docker Explained: Getting Started

WordPress 简介


WordPress 最初是作为一个易于安装和使用的自我发布平台(即 博客引擎)。 多年来,它变得非常流行,这导致了许多 3rd 方插件的开发,将该工具变成了完整的 CMS(内容管理系统)。 基于 WordPress,可以轻松创建和部署许多不同类型的网站和 Web 应用程序。

WordPress 是一个使用 PHP 编程语言开发的开源平台,这无疑帮助它走向成功。 PHP 目前是最常见的网站和 Web 应用程序创建语言之一,也是许多公司(包括 Facebook)的选择。

WordPress 网站依靠 MySQL 关系数据库来保存他们的数据,并且有多种方法可以为 WordPress 网站提供动力,因为有多种选择可以同时运行 PHP 和 MySQL。

在本文中,我们将使用一种久经考验的方法来创建 WordPress 安装的 Docker 映像,这将使您能够在任何 VPS 上运行另一个 WordPress 站点,只需使用 Docker 的单个命令。

在 Ubuntu 上安装 Docker(最新)


更新你的液滴


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:Uncomplicated Firewall)默认拒绝所有转发流量,这是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 之前,让我们快速回顾一下它的可用命令,以刷新我们的第一篇 Getting Started 文章中的记忆。

命令行界面使用和守护进程


安装后,docker daemon 应该在后台运行,准备好接受 docker 客户端发送的命令。 对于可能需要手动运行 Docker 的某些情况,请使用以下命令。

运行 docker 守护进程:

sudo docker -d &

客户端使用:

sudo docker [option] [command] [arguments]

注意: Docker 需要 sudo 权限才能工作,因为它使用 root 拥有的套接字。

客户端命令


您只需调用客户端即可获得所有可用命令的完整列表:

docker

以下是从版本 0.8.0 开始的所有可用命令的列表:

Commands:
    attach    Attach to a running container
    build     Build a container from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders from the containers filesystem to the host path
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    export    Stream the contents of a container as a tar archive
    history   Show the history of an image
    images    List images
    import    Create a new filesystem image from the contents of a tarball
    info      Display system-wide information
    insert    Insert a file in an image
    inspect   Return low-level information on a container
    kill      Kill a running container
    load      Load an image from a tar archive
    login     Register or Login to the docker registry server
    logs      Fetch the logs of a container
    port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
    ps        List containers
    pull      Pull an image or a repository from the docker registry server
    push      Push an image or a repository to the docker registry server
    restart   Restart a running container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save an image to a tar archive
    search    Search for an image in the docker index
    start     Start a stopped container
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Lookup the running processes of a container
    version   Show the docker version information
    wait      Block until a container stops, then print its exit code

使用 Dockerfile


什么是 Dockerfile?


Dockerfiles 是包含 commands 的连续声明的脚本,将按照给定的顺序由 Docker 执行以自动创建新图像。

这些文件总是以使用 FROM 指令定义基本映像开始。 从那里开始, 构建过程 开始,每个后续动作形成带有提交的最终图像(即 保存图像状态)。

Dockerfiles 可以与 build 命令一起使用:

# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *wordpress_img*)
# Example: sudo docker build -t [name] .
sudo docker build -t wordpress_img . 

注意: 要了解有关 Dockerfiles 的更多信息,请查看文章:Docker 解释:使用 Dockerfiles 自动构建映像

Dockerfile 命令概述


Dockerfiles 通过接收以下指令来工作:

  • ADD:将文件从主机复制到容器中
  • CMD:设置要执行的默认命令,或传递给 ENTRYPOINT
  • ENTRYPOINT:设置容器内的默认入口点应用程序
  • ENV:设置环境变量(例如 键=值)
  • EXPOSE:将端口暴露给外部
  • FROM:设置要使用的基础镜像
  • MAINTAINER:设置Dockerfile的作者/所有者数据
  • RUN:运行命令并提交结束结果(容器)图像
  • USER:设置用户从镜像运行容器
  • VOLUME:从宿主机挂载目录到容器
  • WORKDIR:设置CMD指令执行的目录

创建 WordPress 容器


拉动图像


在我们的教程中,我们将使用一个开箱即用的 WordPress 图像,称为 tutum/wordpress。 这个 wordpress 镜像是使用 Tutum 的 Wordpress Image 创建的:为了从这个镜像创建容器,我们需要先拉取(下载)它。

让我们拉出图像:

docker pull tutum/wordpress

此命令将下载具有所有修改层的基础基础映像。

图像准备好后,通过发出一个命令,我们可以创建 dockerised WordPress 实例。

创建可公开访问的 WordPress 容器


运行以下命令以在您指定的端口上创建一个可从外部访问的容器(例如 80):

# Usage: docker run -p [Port Number]:80 tutum/wordpress
# Example:
docker run -p 80:80 tutum/wordpress

上述命令将创建一个 WordPress 实例,该实例将在默认 HTTP 端口 80 上接受来自外部的连接。

创建本地可访问的 WordPress 容器


有时,让容器只能在本地访问可能最适合您。 如果您决定设置负载均衡器或另一个反向代理以在多个 WordPress 实例之间分配连接,这可能会很有用。

运行以下命令以创建本地可访问的容器。

# Allocate a port dynamically:
# Usage: docker run -p 127.0.0.1::80 tutum/wordpress
# Example:
docker run -p 127.0.0.1::80 tutum/wordpress

执行上述命令后,Docker 将创建一个容器,为您提供其 ID,然后动态分配一个端口。 您可以使用 port 命令确定容器正在使用哪个端口。

# Usage: docker port [container ID] [private port number]
# Example:
docker port 9af15d73fdf8a997 80

# 127.0.0.1:49156

在这种情况下,输出意味着容器只能在端口 49156 上的 localhost 上访问。 您可以使用完整提供的地址来重定向来自反向代理的连接。

如果您想指定一个端口,只需将它放在 IP 地址和内部 Web 服务器使用的私有端口之间(例如 80):

# Usage: docker run -p 127.0.0.1:[local port]:80 tutum/wordpress
# Example:
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 [name] 参数,您可以 tag 一个容器,其名称可以让您免于处理复杂的容器 ID:

docker run -d -name new_container_1 ..

限制容器的内存使用


为了限制 docker 容器进程可以使用的内存量,只需将 -m [memory amount] 标志设置为限制。

要运行内存限制为 256 MB 的容器:

# Example: docker run -name [name] -m [Memory (int)][memory unit (b, k, m or g)] -d (to run not to attach) -p (to set access and expose ports) [image ID]
docker run -m 64m -d -p 8082:80 tutum/wordpress

要确认内存限制,您可以检查容器:

# Example: docker inspect [container ID] | grep Memory
docker inspect 9a7562a361122706 | grep Memory

注意: 上面的命令将从检查输出中获取内存相关信息。 要查看有关您的容器的所有相关信息,请选择 sudo docker inspect [container ID]。 另外,请注意,您的 Linux 内核必须支持交换限制功能才能使实际限制起作用。

有关安装和使用 docker 的完整说明,请查看 docker.io 上的 docker 文档。

提交人: [[“%3Ca|https]] ://twitter.com/ostezer [[“%3C/a|”>操作系统]] 泰泽