介绍
对于大多数Web应用程序,很少发现CPU是丢弃的HTTP请求的罪魁祸首,或者窒息托管它们的Web服务器。 它通常是一个工程不足的设置,不涉及缓存层,吃掉后端数据存储(即您的选择的数据库)的所有资源。
Memcached的 -它现在应该不需要介绍-可以增加你的应用程序部署栈的性能大大未做任何修改您的可用资源(让您的挤果汁每一点)。
在这种DigitalOcean文章,考虑到特别是保持那些谁托管多个Web应用程序(例如多WordPress的情况下,Python应用程序等),我们将创建Docker图像可以快速启动运行(按需),它可以运行Memcached的容器单独。 这些容器,保持和保护在自己的环境中,将与托管的应用程序,以帮助他们得到更好,更快的工作。
词汇表
Docker简介
Memcached简介
3.在Ubuntu上安装Docker
4.基本Docker命令
- 运行docker守护程序和CLI用法
- docker命令
5.创建Memcached镜像的入门
- 快速回顾:什么是Docker文件?
- Dockerfile命令概述
- 创建Dockerfile
- 最终Dockerfile
- 为Memcached容器创建Docker镜像
6.运行dockerised Memcached Containers
- 创建Memcached安装的容器
- 限制Memcached容器的内存
- 测试Memcached容器
Docker简介
该项目Docker提供了更高级别的工具,一起工作,这是建立在某些Linux内核特性之上。 我们的目标是帮助开发人员和系统管理员移植应用-与它们的依赖关系的共同地-并让他们在系统和机器上运行- 免费头疼 。
Docker通过为称为docker容器的应用程序创建安全的基于LXC(即Linux容器)的环境来实现这一点。 这些容器是使用docker映像创建的,可以通过手动或通过Dockerfiles自动执行命令来构建这些容器。
注意:要了解更多关于Docker及零部件(如Docker守护进程,CLI,图像等),看看我们的介绍性文章,以项目: Docker解释 :入门 。
Memcached简介
Memcached是一个分布式,开源的数据存储引擎。 它被设计为在RAM中存储某些类型的数据(而不是较慢速率的传统磁盘),以便由应用程序进行非常快速的检索,通过减少对较重数据集或API执行的查询数量来缩短处理请求所需的时间,例如传统数据库(如MySQL)。
通过引入智能,精心规划和优化的缓存机制,变得可以处理看起来更大量的请求并且由应用执行更多的过程。 这是Memcached的最重要的用例,因为它与任何其他缓存应用程序或组件。
Memcached非常依赖并在生产中用于网站和各种其他应用程序,已成为提高性能的最佳工具之一,而不必 - 需要使用更多的硬件(例如更多的服务器或服务器资源)。
它通过存储密钥和他们的匹配值 (大小高达1 MB)在其上可以缩放和跨大量虚拟服务器的分布式关联数组(即哈希表)。
在Ubuntu上安装Docker(最新)
要开始在您的VPS上使用Docker项目,您可以使用DigitalOcean的docker镜像为Ubuntu 13.04或自己安装。 在本节中,我们将快速浏览Docker 0.7.1的基本安装说明。
Ubuntu的安装说明
更新您的Droplet:
sudo aptitude update
sudo aptitude -y upgrade
确保aufs支持可用:
sudo aptitude install linux-image-extra-`uname -r`
将docker repository key添加到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 提出政策开头的行。
更换:
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)docker命令的摘要:
连接
附加到正在运行的容器
建立
从Dockerfile构建容器
承诺
从容器的更改创建新图像
cp
将文件/文件夹从容器文件系统复制到主机路径
差异
检查容器文件系统上的更改
事件
从服务器获取实时事件
出口
将容器的内容作为tar存档进行流式传输
历史
显示图像的历史记录
图片
列出图像
进口
从tarball的内容创建新的文件系统映像
信息
显示系统范围的信息
插
在图像中插入文件
检查
返回容器上的低级信息
杀
杀死一个正在运行的容器
加载
从tar存档加载映像
登录
注册或登录到docker注册表服务器
日志
获取容器的日志
港口
查找NAT-ed到PRIVATE_PORT的面向公众的端口
ps
列出容器
拉
从docker注册表服务器中拉取图像或存储库
推
将图像或存储库推送到docker注册表服务器
重新开始
重新启动正在运行的容器
rm
删除一个或多个容器
rmi
删除一个或多个图像
跑
在新容器中运行命令
保存
将图像保存到tar存档
搜索
在docker索引中搜索图像
开始
启动已停止的容器
停止
停止正在运行的容器
标签
将图像标记到存储库中
最佳
查找容器的运行进程
版
显示docker版本信息
创建Memcached图像入门
基于我们从docker系列中的以前的文章中获得的知识,让我们直接建立一个Dockerfile,使docker自动构建Memcached安装的映像(将用于运行沙箱Memcached实例)。
快速回顾:什么是Docker文件?
Dockerfiles是包含依次声明的命令的脚本,这些命令按照给定的顺序由docker执行以自动创建一个新的docker镜像。 他们非常有助于部署。
这些文件始终以使用FROM命令定义基本映像开头。 从那里, 生成过程开始,采取的形式最终与主机上提交(保存图像状态)以下的各动作。
用法:
# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *nginx*)
# Example: sudo docker build -t [name] .
sudo docker build -t memcached_img .
注意:要了解更多有关Dockerfiles,看看我们的文章: Docker解释:使用Dockerfiles到自动图像大厦 。
Dockerfile命令概述
加
将文件从主机复制到容器中
CMD
设置要执行的默认命令,或传递到ENTRYPOINT
入口点
在容器中设置默认的入口点应用程序
ENV
设置环境变量(例如“key = value”)
暴露
将端口暴露给外部
从
设置要使用的基本映像
MAINTAINER
设置Dockerfile的作者/所有者数据
跑
运行命令并提交结果结果(容器)图像
用户
设置用户从映像运行容器
卷
将目录从主机挂载到容器
WORKDIR
设置要执行CMD指令的目录
创建Dockerfile
因为Dockerfiles构成纯文本文档,创建一个翻译是启动你最喜欢的文本编辑器,并编写你想要docker执行的命令,以建立一个图像。 开始处理文件后,在保存最终结果之前,继续添加以下所有内容(一个接一个)。
注意:您可以找到最终Dockerfile会是什么样在本节结束。
让我们使用nano文本编辑器创建一个空的Dockerfile:
nano Dockerfile
我们需要连续列出所有的指令(命令)和指令。 但是,一切都从基础镜像(使用FROM命令设置)开始。
让我们定义我们的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
在这个命令和声明的初始块之后,我们可以开始列出Memcached安装的指令。
# 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
设置默认执行命令和entrpoint(即Memcached守护程序):
# Default Memcached run command arguments
CMD ["-u", "root", "-m", "128"]
# Set the user to run Memcached daemon
USER daemon
# Set the entrypoint to memcached binary
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,我们准备开始使用dockerised Memcached容器!
为Memcached容器创建Docker镜像
我们现在可以按照Dockerfile基础部分中解释的使用说明创建我们的第一个Memcached镜像。
运行以下命令以创建标记为“memcached_img”的映像:
sudo docker build -t memcached_img .
注意:不要忘了结尾.
对Docker找到Dockerfile
。
运行dockerised Memcached Containers
它是制造任何数量的完美分离的和自足的memcached实例非常简单- 现在 -由于我们已经在上一节中所得到的图像。 所有我们要做的是创建一个新的容器docker run
。
创建Memcached安装的容器
要创建新容器,请使用以下命令,根据以下示例修改它以满足您的要求:
# Example: sudo docker run -name [container name] -p [port to access:port exposed] -i -t [memcached image name]
sudo docker run -name memcached_ins -d -p 45001:11211 memcached_img
现在,我们将有一个名为“memcached的插件”Docker的容器中,从45001端口访问, run
使用我们的形象标签“的memcached IMG”,这是我们以前建造的。
限制Memcached容器的内存
为了限制内存的Docker容器进程可以使用的金额,只需将-m [memory amount]
标志和限制。
要运行内存限制为256 MB的容器:
# Example: sudo 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]
sudo docker run -name memcached_ins -m 256m -d -p 45001:11211 memcached_img
要确认内存限制,可以检查容器:
# Example: docker inspect [container ID] | grep Memory
sudo docker inspect memcached_ins | grep Memory
注:上述命令将抓住从检查输出内存的相关信息。 要查看所有关于你的容器的相关信息,选择sudo docker inspect [container ID]
测试Memcached容器
有多种方法来尝试新创建的Memcached正在运行的容器。 我们将使用一个简单的Python CLI应用程序。 但是,您可以使用缓存附件,框架或库来使用您的应用程序进行生产。
确保您的主机具有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
在内部复制并粘贴以下(不言自明)内容:
# Import python-memcache and sys for arguments
import memcache
import sys
# Set address to access the Memcached instance
addr = 'localhost'
# Get number of arguments
# Expected format: python cache.py [memcached port] [key] [value]
len_argv = len(sys.argv)
# At least the port number and a key must be supplied
if len_argv < 3:
sys.exit("Not enough arguments.")
# Port is supplied and a key is supplied - let's connect!
port = sys.argv[1]
cache = memcache.Client(["{0}:{1}".format(addr, port)])
# Get the key
key = str(sys.argv[2])
# If a value is also supplied, set the key-value pair
if len_argv == 4:
value = str(sys.argv[3])
cache.set(key, value)
print "Value for {0} set!".format(key)
# If a value is not supplied, return the value for the key
else:
value = cache.get(key)
print "Value for {0} is {1}.".format(key, value)
按CTRL + X并用Y确认保存并关闭。
使用上述脚本从主机测试docker memcached实例:
# Example: python cache.py [port] [key] [value]
python cache.py 45001 my_test_key test_value
# Return: Value for my_test_key set
# See if the key is set:
python cache.py 45001 my_test_key
# Return: Value for my_test_key is test_value.
有关完整的指令集安装和使用Docker,检查出在docker.ioDocker的文档 。