介绍
对于大多数 Web 应用程序来说,很少会发现 CPU 是导致 HTTP 请求丢失或使托管它们的 Web 服务器窒息的罪魁祸首。通常情况下,是由于没有缓存层的低效设置,耗尽了后端数据存储(即您选择的数据库)的所有资源。
Memcached - 现在应该不需要介绍了 - 可以大大提高应用部署堆栈的性能,而不需要对可用资源进行任何修改(使您能够充分利用其全部性能)。
在这篇 DigitalOcean 文章中,特别是考虑到那些托管多个 Web 应用程序的人(例如多个 WordPress 实例、Python 应用程序等),我们将创建 Docker 镜像,以便快速启动(按需)Memcached 容器,这些容器可以单独运行。这些容器将在其自己的环境中保持并保护,并与托管的应用程序一起工作,帮助它们变得更好、更快。
术语表
1. Docker 简介
2. Memcached 简介
3. 在 Ubuntu 上安装 Docker
4. 基本 Docker 命令
- 运行 Docker 守护程序和 CLI 用法
- Docker 命令
5. 开始创建 Memcached 镜像
- 快速回顾:什么是 Dockerfile?
- Dockerfile 命令概述
- 创建 Dockerfile
- 最终的 Dockerfile
- 为 Memcached 容器创建 Docker 镜像
6. 运行 Docker 化的 Memcached 容器
- 创建已安装 Memcached 的容器
- 限制 Memcached 容器的内存
- 测试 Memcached 容器
Docker 简介
Docker 项目提供了一些高级工具,这些工具共同使用,构建在一些 Linux 内核特性之上。其目标是帮助开发人员和系统管理员将应用程序及其所有依赖项一起移植,并在系统和机器上运行 - 无烦恼。
Docker 通过创建安全的、基于 LXC(即 Linux 容器)的应用程序环境,称为 Docker 容器,来实现这一目标。这些容器是使用 Docker 镜像创建的,可以通过手动执行命令或通过 Dockerfile 自动构建。
注意: 要了解更多关于 Docker 及其部分(例如 Docker 守护程序、CLI、镜像等)的信息,请查看我们的项目介绍文章:Docker 解释:入门指南。
Memcached 简介
Memcached 是一个分布式的开源数据存储引擎。它旨在将某些类型的数据存储在 RAM 中(而不是传统磁盘的较慢速率),以便应用程序可以非常快速地检索,从而通过减少针对更重的数据集或传统数据库(例如 MySQL)执行的查询数量来减少处理请求所需的时间。
通过引入智能、精心规划和优化的缓存机制,可以处理看似更多的请求并执行更多的应用程序过程。这是 Memcached 的最重要用例,就像任何其他缓存应用程序或组件一样。
Memcached 在生产环境中被广泛依赖和用于网站和各种其他应用程序,已成为提高性能的首选工具之一,而不一定需要使用更多硬件(例如更多服务器或服务器资源)。
它通过将键及其匹配的值(最多 1 MB 大小)存储到一个关联数组(即哈希表)中来工作,该数组可以扩展并分布到大量虚拟服务器上。
在 Ubuntu 上安装 Docker(最新版)
要在您的 VPS 上开始使用 Docker 项目,您可以使用 DigitalOcean 提供的 Ubuntu 13.04 的 Docker 镜像,或者自行安装。在本节中,我们将快速介绍 Docker 0.7.1 的基本安装说明。
Ubuntu 的安装说明
更新您的 droplet:
sudo aptitude update
sudo aptitude -y upgrade
确保可用 aufs 支持:
sudo aptitude install linux-image-extra-`uname -r`
将 Docker 存储库密钥添加到 apt-key 以进行软件包验证:
sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
将 Docker 存储库添加到 aptitude 源:
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
使用新添加的内容更新存储库:
sudo aptitude update
最后,下载并安装 Docker:
sudo aptitude install lxc-docker
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 之前,让我们快速回顾一下可用的命令,以便从我们的第一篇入门文章中刷新我们的记忆。
运行 Docker 守护进程和 CLI 使用
安装完成后,Docker 守护进程应该在后台运行,准备接受 Docker CLI 发送的命令。对于某些情况下可能需要手动运行 Docker 的情况,可以使用以下命令。
运行 Docker 守护进程:
sudo docker -d &
Docker CLI 使用:
sudo docker [option] [command] [arguments]
注意: Docker 需要 sudo 权限才能运行。
命令列表
以下是当前可用命令(版本 0.7.1)的摘要:
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 版本信息
开始创建 Memcached 镜像
在我们从之前的 Docker 系列文章中获得的知识基础上,让我们直接开始创建一个 Dockerfile,以便 Docker 自动构建安装了 Memcached 的镜像(用于运行沙盒化的 Memcached 实例)。
快速回顾:什么是 Dockerfile?
Dockerfile 是包含按顺序声明的命令的脚本,Docker 将按照给定的顺序自动执行这些命令以创建新的 Docker 镜像。它们在部署中非常有帮助。
这些文件始终以使用 FROM 命令定义基础镜像开始。从那里开始,构建过程开始,每个后续的操作都形成了最终的提交(保存镜像状态)在主机上。
用法:
# 使用当前位置的 Dockerfile 构建镜像
# 使用 [name] 标记最终镜像(例如 *nginx*)
# 示例:sudo docker build -t [name] .
sudo docker build -t memcached_img .
注意: 要了解有关 Dockerfile 的更多信息,请查看我们的文章:Docker 解释:使用 Dockerfile 自动构建镜像。
Dockerfile 命令概述
Add
将文件从主机复制到容器
CMD
设置要执行的默认命令,或传递给 ENTRYPOINT
ENTRYPOINT
设置容器内的默认入口应用程序
ENV
设置环境变量(例如 “key = value”)
EXPOSE
将端口暴露给外部
FROM
设置要使用的基础镜像
MAINTAINER
设置 Dockerfile 的作者/所有者数据
RUN
运行命令并提交最终结果(容器)镜像
USER
设置从镜像运行容器的用户
VOLUME
将主机上的目录挂载到容器
WORKDIR
设置要执行 CMD 指令的目录
创建 Dockerfile
由于 Dockerfile 由纯文本文档组成,创建一个意味着启动您喜欢的文本编辑器,并编写您希望 Docker 执行以构建镜像的命令。在开始工作文件后,继续在保存最终结果之前添加以下所有内容。
注意: 您可以在本节末尾找到最终 Dockerfile 的外观。
让我们使用 nano 文本编辑器创建一个空的 Dockerfile:
nano Dockerfile
我们需要按顺序列出所有指令(命令)和指令。但是,一切都始于构建基础镜像(使用 FROM 命令设置)。
让我们定义我们的 Dockerfile 的目的,并声明要使用的基础镜像:
############################################################
# 用于运行 Memcached 容器的 Dockerfile
# 基于 Ubuntu 镜像
############################################################
# 设置要使用的基础镜像为 Ubuntu
FROM ubuntu
# 设置文件维护者(您的姓名 - 文件的作者)
MAINTAINER Maintaner Name
在这些初始命令和声明之后,我们可以开始列出 Memcached 安装的指令。
# 更新默认应用程序仓库源列表
RUN apt-get update
# 安装 Memcached
RUN apt-get install -y memcached
设置要暴露到容器外部的默认端口:
# 要暴露的端口(默认:11211)
EXPOSE 11211
设置默认执行命令和入口点(即 Memcached 守护进程):
# 默认的 Memcached 运行命令参数
CMD ["-u", "root", "-m", "128"]
# 设置要运行 Memcached 守护进程的用户
USER daemon
# 设置入口点为 memcached 二进制文件
ENTRYPOINT memcached
最终的 Dockerfile
############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################
# Set the base image to use to Ubuntu
FROM ubuntu
# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name
# Update the default application repository sources list
RUN apt-get update
# Install Memcached
RUN apt-get install -y memcached
# Port to expose (default: 11211)
EXPOSE 11211
# Default Memcached run command arguments
CMD ["-m", "128"]
# Set the user to run Memcached daemon
USER daemon
# Set the entrypoint to memcached binary
ENTRYPOINT memcached
在 Dockerfile 中编写好所有内容后,保存并按下 CTRL+X 然后按 Y 退出。
使用这个 Dockerfile,我们已经准备好开始使用 docker 化的 Memcached 容器了!
为 Memcached 容器创建 Docker 镜像
我们现在可以按照 Dockerfile 基础部分中解释的使用说明来创建我们的第一个 Memcached 镜像。
运行以下命令来创建一个标记为 “memcached_img” 的镜像:
sudo docker build -t memcached_img .
注意: 不要忘记末尾的
.
,以便 docker 找到
Dockerfile
。
运行 docker 化的 Memcached 容器
现在,由于我们在上一节中获得的镜像,创建任意数量的完全隔离和自包含的 memcached 实例变得非常简单。我们只需使用
docker run
来创建一个新的容器。
创建一个已安装 Memcached 的容器
要创建一个新的容器,使用以下命令,并根据以下示例修改以适应您的需求:
# 示例:sudo docker run -name [容器名称] -p [访问端口:暴露端口] -i -t [memcached 镜像名称]
sudo docker run -name memcached_ins -d -p 45001:11211 memcached_img
现在我们将会有一个名为 “memcached_ins” 的 docker 容器,从端口 45001 可访问,使用我们之前构建的标记为 “memcached_img” 的镜像运行。
限制 Memcached 容器的内存
为了限制 docker 容器进程可以使用的内存量,只需使用
-m [内存量]
标志来设置限制。
要运行一个内存限制为 256 MB 的容器:
# 示例:sudo docker run -name [名称] -m [内存(整数)][内存单位(b、k、m 或 g)] -d(运行而不附加) -p(设置访问和暴露端口)[镜像 ID]
sudo docker run -name memcached_ins -m 256m -d -p 45001:11211 memcached_img
要确认内存限制,您可以检查容器:
# 示例:docker inspect [容器 ID] | grep Memory
sudo docker inspect memcached_ins | grep Memory
注意: 上面的命令将从检查输出中获取与内存相关的信息。要查看有关您的容器的所有相关信息,请选择
sudo docker inspect [容器 ID]
。
测试 Memcached 容器
有多种方法可以尝试您新创建的 Memcached 运行容器。我们将使用一个简单的 Python 命令行应用程序来进行测试。但是,您也可以直接使用缓存附加组件、框架或库将应用程序投入生产。
确保您的主机具有 Python / Memcached 所需的库:
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install -y python-pip
pip install python-memcached
让我们使用 nano 创建一个名为 “mc.py” 的简单 Python 脚本:
nano cache.py
将下面(不言自明)的内容复制并粘贴到内部:
# 导入 python-memcache 和 sys 用于参数
import memcache
import sys
# 设置访问 Memcached 实例的地址
addr = 'localhost'
# 获取参数数量
# 期望格式:python cache.py [memcached 端口] [键] [值]
len_argv = len(sys.argv)
# 至少必须提供端口号和一个键
if len_argv < 3:
sys.exit("参数不足。")
# 提供了端口和键 - 让我们连接!
port = sys.argv[1]
cache = memcache.Client(["{0}:{1}".format(addr, port)])
# 获取键
key = str(sys.argv[2])
# 如果还提供了值,则设置键值对
if len_argv == 4:
value = str(sys.argv[3])
cache.set(key, value)
print "已设置 {0} 的值!".format(key)
# 如果没有提供值,则返回键的值
else:
value = cache.get(key)
print "{0} 的值为 {1}。".format(key, value)
按下 CTRL+X 并确认 Y 以保存并关闭。
使用上述脚本从主机测试一个 docker memcached 实例:
# 示例:python cache.py [端口] [键] [值]
python cache.py 45001 my_test_key test_value
# 返回:已设置 my_test_key 的值
# 查看键是否已设置:
python cache.py 45001 my_test_key
# 返回:my_test_key 的值为 test_value。
要获取有关安装和使用 docker 的完整说明,请查看 docker.io 上的 docker 文档。
版权归原作者 白如意i 所有, 如有侵权,请联系我们删除。