<$>[警告]
状态: 已弃用
本文已弃用,不再维护。
原因
本文中的技术已经过时,可能不再反映Docker的最佳实践。
See Instead
<$>
简介
对于大多数Web应用程序来说,发现CPU是丢弃的HTTP请求的罪魁祸首或阻塞托管它们的Web服务器的情况非常罕见。它通常是一个设计不足的设置,不涉及缓存层,会消耗后端数据存储(即您选择的数据库)的所有资源。
Memcached -到目前为止应该不需要介绍-可以大大提高应用程序部署堆栈的性能,而无需对可用资源进行任何修改(使您能够榨取其最后一点果汁)。
在这篇DigitalOcean的文章中,尤其要记住那些托管多个Web应用程序(例如,多个WordPress实例、PYTHON应用程序等)的人,我们将创建docker图像以快速开始运行(按需)Memcached Containers),它们可以单独操作。这些容器在自己的环境中保存和保护,将与托管的应用程序一起工作,以帮助它们变得更好、更快。
词汇表
1. Docker简介
2.Memcach简介
3.在Ubuntu上安装Docker
4.Docker基本命令
1.运行Docker守护进程和CLI用法 2. docker命令
5.开始创建Memcached映像
1.快速总结:什么是Dockerfile? 2.Dockerfile命令概述 3.创建Dockerfile 4.最终文档文件 5.创建Memcached容器的Docker镜像
6.运行停靠的Memcached容器
1.创建Memcached已安装容器 2.限制Memcached Container的内存 3.测试Memcached Container
Docker简介
docker项目 提供了更高级别的工具,它们协同工作,这些工具构建在一些Linux内核功能之上。其目标是帮助开发人员和系统管理员移植应用程序--以及它们的所有依赖项--并让它们跨系统和机器运行--让人头疼不已。
Docker通过为称为Docker Containers的应用程序创建基于LXC(即Linux容器)的安全环境来实现这一点。这些容器是使用docker镜像创建的,可以通过手动或通过Dockerfile自动执行命令来构建。
注意: 要了解有关Docker及其部分(例如,Docker守护进程、命令行界面、图像等)的更多信息,请查看我们关于该项目的介绍性文章:** Docker解释** :获取Started.
Memcach简介
Memcached是一个分布式、开源的数据存储引擎。它旨在将某些类型的数据存储在RAM中(而不是速度较慢的传统磁盘),以供应用程序非常快速地检索,通过减少对较重的数据集或API(如传统数据库(如MySQL))执行的查询数量来减少处理请求所需的时间。
通过引入智能、精心规划和优化的缓存机制,应用程序可以处理看似更多的请求并执行更多过程。与任何其他缓存应用程序或组件一样,这是Memcached最重要的用例。
在网站和各种其他应用程序的生产中严重依赖和使用Memcached,它已经成为提高性能的首选工具之一,而不一定需要使用更多的硬件(例如,更多的服务器或服务器资源)。
它的工作方式是将关键字和它们的匹配值(大小最大为1MB)存储到关联数组(即哈希表)上,该数组可以扩展并分布在大量虚拟服务器上。
在Ubuntu上安装Docker(最新)
要开始在您的VPS上使用Docker项目,您可以在Ubuntu 13.04上使用DigitalOcean的docker镜像,也可以自己安装。在本节中,我们将快速浏览Docker 0.7.1的基本安装说明。
Ubuntu安装说明
更新您的水滴:
1sudo aptitude update
2sudo aptitude -y upgrade
确保aufs支持可用:
1sudo aptitude install linux-image-extra-`uname -r`
将docker仓库密钥添加到apt-key中进行套餐验证:
1sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
将docker仓库添加到智能资源中:
1sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
2> /etc/apt/sources.list.d/docker.list"
用新增内容更新仓库:
1sudo aptitude update
最后下载并安装docker:
1sudo aptitude install lxc-docker
Ubuntu的默认防火墙(UFW :简单防火墙)默认拒绝所有转发流量,这是docker需要的。
启用UFW转发:
使用Nano文本编辑器编辑UFW配置。
1sudo nano /etc/default/ufw
向下滚动,找到以DEFAULT_FORWARD_POLICY 开头的行。
替换:
1DEFAULT_FORWARD_POLICY="DROP"
带:
1DEFAULT_FORWARD_POLICY="ACCEPT"
按CTRL+X 并用** Y** 进行审批即可保存并关闭。
最后,重新加载UFW:
1sudo ufw reload
Docker基本命令
在我们开始使用Docker之前,让我们快速浏览一下它的可用命令,以回顾我们的第一篇文章获取Started ]。
运行docker守护进程和CLI使用
安装后,docker守护进程应该在后台运行,准备接受docker CLI发送的命令。对于可能需要手动运行docker的某些情况,请使用以下方法。
运行docker守护进程:
1sudo docker -d &
坞站命令行界面使用情况
1sudo docker [option] [command] [arguments]
注意: docker需要sudo权限才能工作。
命令列表
以下是当前可用的(0.7.1版)docker命令的摘要:
附加
连接到正在运行的容器
build
从Dockerfile构建容器
提交
根据容器的更改创建新图像
cp
将文件/文件夹从容器文件系统复制到主机路径
不同
检查容器文件系统上的更改
事件
从服务器获取实时事件
导出
将容器的内容作为TAR归档进行流式传输
历史
显示图像的历史记录
图片
列出图像
导入
从tarball的内容创建新的文件系统映像
[]信息
显示系统范围的信息
插入
在图像中插入文件
检查
返回有关容器的低级信息
杀戮
杀死一个正在运行的容器
加载
从TAR存档加载图像
登录
注册或登录到Docker注册服务器
日志
去拿集装箱的日志
端口
查找NAT转换为私有端口的面向公共的端口
PS
列出容器
拉取
从docker注册表服务器中提取镜像或存储库
推流
将镜像或仓库推送到Docker注册表服务器
重启
重新启动正在运行的容器
rm
删除一个或多个容器
--
删除一个或多个图像
运行
在新容器中运行命令
保存
将图像保存到TAR存档
搜索
在docker索引中搜索图像
启动
启动已停止的容器
停止
停止正在运行的容器
标签
将图像标记到存储库中
TOP
查找容器的正在运行的进程
版本
显示docker版本信息
创建Memcached镜像入门
基于我们从docker系列的前几篇文章中获得的知识,让我们直接开始构建一个Dockerfile,让docker自动构建Memcached安装的映像(它将用于运行沙箱Memcached实例)。
快速回顾:什么是Dockerfile?
Docker文件是包含连续声明的命令的脚本,这些命令将由docker按照给定的顺序执行,以自动创建新的docker映像。它们极大地帮助了部署。
这些文件始终使用FROM命令以基本图像的定义开始。从那时起,_Build_Process_开始,随后采取的每个操作都在主机上形成最终的提交(保存映像状态)。
用途:
1# Build an image using the Dockerfile at current location
2# Tag the final image with [name] (e.g. *nginx*)
3# Example: sudo docker build -t [name] .
4sudo docker build -t memcached_img .
注意: 要了解有关Docker文件的更多信息,请查看我们的文章:Docker解释:使用Docker文件自动构建Images.
Dockerfile命令概述
添加
将文件从主机复制到容器中
CMD
设置要执行的默认命令或将其传递给入口点
切入点
在容器内设置默认的入口点应用程序
ENV
设置环境变量(如)
博览会
将端口暴露给外部
来自
设置要使用的基本图像
维护者
设置Dockerfile的作者/所有者数据
运行
运行命令并提交结束结果(容器)映像
用户
将用户设置为从映像运行容器
卷
将目录从主机挂载到容器
工作目录
设置要执行的CMD指令的目录
创建Dockerfile
由于Docker文件由纯文本文档组成,因此创建一个Docker文件相当于启动您最喜欢的文本编辑器,并编写您希望docker执行的命令以构建图像。开始处理文件后,在保存最终结果之前,请继续添加下面的所有内容(一个接一个)。
注意: 您可以在本节的末尾找到最终的Dockerfile。
让我们使用Nano文本编辑器创建一个空的Dockerfile:
1nano Dockerfile
我们需要有所有的指令(命令)和指令顺序列出。但是,一切都要从构建基础映像开始(使用from命令设置)。
让我们定义Dockerfile的用途,并声明要使用的基本映像:
1############################################################
2# Dockerfile to run Memcached Containers
3# Based on Ubuntu Image
4############################################################
5
6# Set the base image to use to Ubuntu
7FROM ubuntu
8
9# Set the file maintainer (your name - the file's author)
10MAINTAINER Maintaner Name
在最初的命令和声明块之后,我们可以开始列出Memcached安装的说明。
1# Update the default application repository sources list
2RUN apt-get update
3
4# Install Memcached
5RUN apt-get install -y memcached
设置要暴露到容器外部的默认端口:
1# Port to expose (default: 11211)
2EXPOSE 11211
设置默认执行命令和入口点(即Memcached守护进程):
1# Default Memcached run command arguments
2CMD ["-u", "root", "-m", "128"]
3
4# Set the user to run Memcached daemon
5USER daemon
6
7# Set the entrypoint to memcached binary
8ENTRYPOINT memcached
♪最终文档文件
1############################################################
2# Dockerfile to run Memcached Containers
3# Based on Ubuntu Image
4############################################################
5
6# Set the base image to use to Ubuntu
7FROM ubuntu
8
9# Set the file maintainer (your name - the file's author)
10MAINTAINER Maintaner Name
11
12# Update the default application repository sources list
13RUN apt-get update
14
15# Install Memcached
16RUN apt-get install -y memcached
17
18# Port to expose (default: 11211)
19EXPOSE 11211
20
21# Default Memcached run command arguments
22CMD ["-m", "128"]
23
24# Set the user to run Memcached daemon
25USER daemon
26
27# Set the entrypoint to memcached binary
28ENTRYPOINT memcached
在Dockerfile中写入所有内容后,保存它并按CTRL+X然后按Y退出。
使用这个Dockerfile,我们就可以开始使用Dockerised Memcached容器了!
创建Memcached容器的Docker镜像
现在,我们可以按照Dockerfile基础知识部分中解释的用法说明来创建我们的第一个Memcached映像。
运行以下命令创建一个标记为Memcached_img
的映像:
1sudo docker build -t memcached_img .
注意: 不要忘记后面的.
,这样docker才能找到Dockerfile
。
运行停靠的Memcached容器
由于我们在上一节中获得的图像,创建任意数量的完全隔离和自包含的Memcached实例--现在 --非常简单。我们要做的就是用docker run
创建一个新的容器。
创建Memcached安装容器
要创建新容器,请使用以下命令,并按照以下示例对其进行修改以满足您的要求:
1# Example: sudo docker run -name [container name] -p [port to access:port exposed] -i -t [memcached image name]
2sudo docker run -name memcached_ins -d -p 45001:11211 memcached_img
现在,我们将拥有一个名为Memcached_ins
的docker容器,可从45001 run
端口使用我们先前构建的标记为Memcached_img
的镜像进行访问。
限制Memcached容器的内存
为了限制停靠容器进程可以使用的内存量,只需将-m[内存量]
标志设置为限制即可。
要运行内存限制为256 MB的容器:
1# 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]
2sudo docker run -name memcached_ins -m 256m -d -p 45001:11211 memcached_img
要确认内存限制,可以检查容器:
1# Example: docker inspect [container ID] | grep Memory
2sudo docker inspect memcached_ins | grep Memory
注意: 上面的命令将从检查输出中获取内存相关信息。要查看有关您的容器的所有相关信息,请选择sudo docker check[容器ID]
。
测试Memcached Container
有多种方法可以尝试新创建的Memcached Running容器(S)。为此,我们将使用一个简单的Python CLI应用程序。但是,您可以使用缓存插件、框架或库来使用您的应用程序进行生产。
确保您的主机具有Python/Memcached所需的库:
1sudo apt-get update && sudo apt-get -y upgrade
2sudo apt-get install -y python-pip
3pip install python-memcached
让我们使用Nano创建一个简单的名为mc.py
的Python脚本:
1nano cache.py
将以下(不言而喻的)内容复制并粘贴到内部:
1# Import python-memcache and sys for arguments
2import memcache
3import sys
4
5# Set address to access the Memcached instance
6addr = 'localhost'
7
8# Get number of arguments
9# Expected format: python cache.py [memcached port] [key] [value]
10len_argv = len(sys.argv)
11
12# At least the port number and a key must be supplied
13if len_argv < 3:
14 sys.exit("Not enough arguments.")
15
16# Port is supplied and a key is supplied - let's connect!
17port = sys.argv[1]
18cache = memcache.Client(["{0}:{1}".format(addr, port)])
19
20# Get the key
21key = str(sys.argv[2])
22
23# If a value is also supplied, set the key-value pair
24if len_argv == 4:
25
26 value = str(sys.argv[3])
27 cache.set(key, value)
28
29 print "Value for {0} set!".format(key)
30
31# If a value is not supplied, return the value for the key
32else:
33
34 value = cache.get(key)
35
36 print "Value for {0} is {1}.".format(key, value)
按CTRL+X并按Y进行审批,保存并关闭。
使用上面的脚本从您的主机测试docker Memcached实例:
1# Example: python cache.py [port] [key] [value]
2python cache.py 45001 my_test_key test_value
3
4# Return: Value for my_test_key set
5
6# See if the key is set:
7python cache.py 45001 my_test_key
8
9# Return: Value for my_test_key is test_value.
有关安装和使用docker的完整说明,请查看docker文档,地址:docker.io 。