Docker 解说:如何创建运行 Memcached 的 Docker 容器

<$>[警告]

状态: 已弃用

本文已弃用,不再维护。

原因

本文中的技术已经过时,可能不再反映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

Submitted by: O.S. Tezer
Published At
Categories with 技术
comments powered by Disqus