专栏首页云计算教程系列如何在Ubuntu上 dockerize和部署多个WordPress应用程序
原创

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

介绍

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

本文,我们将学习如何在Ubuntu云服务器上对WordPress应用程序进行dockerize,并在单个主机上部署多个WordPress站点。

Docker简介

Docker项目提供了更高级别的工具,可以协同工作,构建在一些Linux内核功能之上,目的是帮助开发人员和系统管理员将所有依赖项同时移植到应用程序中,并使它们跨系统和机器运行。

Docker是通过为应用程序创建基于LXC(Linux容器)的安全环境。容器可以通过像虚拟机一样在内部手动执行命令,或者通过Dockerfiles自动执行过程来构建。腾讯云社区提供基于Ubuntu下的Docker安装教程,如果使用CentOS系统,可以参考腾讯云实验室搭建 Docker 环境的相关教程。

WordPress简介

最初创建WordPress是一种易于安装和使用的自我发布平台(即Blogging引擎)。多年来它已经变得非常流行,这导致许多第三方插件的开发,将该工具变成完整的CMS(内容管理系统)。基于WordPress,可以轻松创建许多不同类型的网站和Web应用程序,并且可以轻松部署。WordPress站点依靠MySQL关系数据库来保存他们的数据。

在本教程中,我们将使用经过验证的方法来创建WordPress安装的Docker镜像,这将使您能够使用Docker通过单个命令在任何服务器上运行另一个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: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之前,可以快速浏览一下可用的命令。

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

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

运行docker守护程序:

sudo docker -d &

客户使用:

sudo docker [option] [command] [arguments]

注意: Docker需要sudo权限才能使用。

客户端命令

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

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

使用Dockerfiles

什么是Dockerfiles?

Dockerfiles是包含连续声明的命令的脚本,这些命令按照给定的顺序执行,由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 . 

Dockerfile命令概述

Dockerfiles通过接收以下说明来工作:

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

创建WordPress容器

下载镜像

教程中,我们将使用一个WordPress的tutum/wordpress镜像。为了从镜像中创建容器,我们需要下载它。

下载镜像:

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]参数,您可以使用名称标记容器,以免您处理复杂的容器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]

结论

本文介绍了如何在Ubuntu上 dockerize和部署多个WordPress应用程序,腾讯云开发者实验室提供了基于 Ubuntu 搭建 WordPress 个人博客教您一步步搭建起一个属于自己的 WordPress 博客,还有其他WordPress相关的教程,欢迎大家访问和查看。


参考文献:《How To Dockerise And Deploy Multiple WordPress Applications On Ubuntu》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在CentOS 7上安装和使用Docker Compose

    Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭...

    大瓜皮
  • 在CVM搭建你自己的网盘

    Nextcloud是ownCloud的一个分支,它是一个文件共享服务器,允许您将个人内容(如文档和图片)存储在集中位置,就像腾讯微云、百度网盘、Dropbox一...

    大瓜皮
  • 如何在Debian 9上使用Postgres,Nginx和Gunicorn设置Django

    Django是一个功能强大的Web框架,可以帮助您实现Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何与生...

    大瓜皮
  • Docker的典型应用场景

    相对于VM,docker在其轻量、配置复杂度以及资源利用率方面有着明显的优势。 随着docker技术的不断成熟,越来越多的企业开始考虑通过docker来改进自己...

    小小科
  • 001.Docker简介概述

    Docker最初是dotCloud公司的一个内部项目,诞生于 2013 年初,由google公司开源的Go语言开发。

    木二
  • 『中级篇』多容器复杂应用的部署(30)

    ![(https://upload-images.jianshu.io/upload_images/11223715-8a1876d398bd6dde.png?...

    IT故事会
  • Docker命令详解

    版权声明:欢迎交流,菲宇运维! https://blog.csdn.net/bbwangj/art...

    菲宇
  • 附002.Docker常见命令

    A self-sufficient runtime for containers.

    木二
  • docker配置redis集群和scrapyd服务

    Redis集群的配置方式我们上一篇已经介绍过了,而且使用Dockerfile配置文件我们也介绍了,不过介绍的并不详细,可能有些人看不明白,这篇我们再介绍一些Do...

    星星在线
  • Docker for Windows 使用入门

    晓晨

扫码关注云+社区

领取腾讯云代金券