如何在 Ubuntu 上使用 Docker 容器化和部署多个 WordPress 应用程序

简介: 如何在 Ubuntu 上使用 Docker 容器化和部署多个 WordPress 应用程序

简介


WordPress 已经成为全球部署和使用最广泛的网络应用程序之一。多年来不断的发展,现在可以基于 WordPress 及其可用的插件/扩展创建几乎无限数量的不同网站(甚至是 Web 应用程序)。

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

术语表


1. Docker 简介


2. WordPress 简介


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


4. 使用 Docker


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

5. 使用 Dockerfile


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

6. 创建 WordPress 容器


  1. 拉取镜像
  2. 创建一个公开访问的 WordPress 容器
  3. 创建一个本地访问的 WordPress 容器
  4. 限制容器的内存使用

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:设置要执行的默认命令,或传递给 ENTRYPOINT
  • ENTRYPOINT:设置容器内的默认入口应用程序
  • 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 文档。


目录
相关文章
|
12天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
142 77
|
20天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
20天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
4天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
20 3
实战~如何组织一个多容器项目docker-compose
|
14天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
55 3
|
19天前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
23 2
|
20天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
25 2
|
2月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
4871 3
|
3天前
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
38 11
|
1月前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
234 50
下一篇
DataWorks