如何在 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 文档。


目录
相关文章
|
4天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
29 5
|
6天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
5天前
|
运维 Docker 微服务
掌握 Docker Compose:简化你的多容器应用部署
在微服务架构和容器化技术普及的今天,管理多容器部署变得颇具挑战。Docker Compose 通过一个 YAML 文件定义和运行多容器应用,简化了部署和运维。本文介绍其基本概念、使用方法及优势,包括服务、项目、卷和网络等核心概念,并提供从安装到管理服务的详细步骤,助你轻松掌握 Docker Compose,提高开发效率和应用运维质量。
|
4天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
3天前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
|
4天前
|
Cloud Native 持续交付 Docker
探索容器化技术Docker的奥秘
探索容器化技术Docker的奥秘
23 3
|
6天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
16 3
|
13天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
27天前
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
80 6
|
16天前
|
Ubuntu Linux Docker
Ubuntu 18.04 安装Docker实战案例
关于如何在Ubuntu 18.04系统上安装Docker的实战案例,包括安装步骤、配置镜像加速以及下载和运行Docker镜像的过程。
99 3
Ubuntu 18.04 安装Docker实战案例