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


目录
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
3天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
7天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
6天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
54 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
4天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
5天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
5天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
5天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
7天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
7天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践