Docker解释:如何创建运行Memcached的Docker容器
状态: 已弃用
本文已弃用,不再维护。
原因
本文中的技术已经过时,可能不再反映 Docker 的最佳实践。
请参阅
介绍
对于大多数 Web 应用程序来说,很少会发现 CPU 是导致 HTTP 请求丢失或阻塞托管它们的 Web 服务器的罪魁祸首。 它通常是一个设计不足的设置,不涉及缓存层,占用了后端数据存储的所有资源(即 您选择的数据库)。
Memcached - 现在不需要介绍 - 可以大大提高应用程序部署堆栈的性能,而无需对可用资源进行任何修改(使您能够榨取最后一点汁液)。
在这篇 DigitalOcean 文章中,尤其要记住那些托管多个 Web 应用程序的人(例如 多个 WordPress 实例、Python 应用程序等),我们将创建 docker 图像以快速开始运行(按需)Memcached 容器,可以单独操作。 这些容器在它们自己的环境中保存和保护,将与托管的应用程序一起使用,以帮助它们变得更好、更快。
词汇表
1. Docker 简介
2. Memcached 简介
3. 在 Ubuntu 上安装 Docker
4. 基本的 Docker 命令
- 运行 docker 守护进程和 CLI 用法
- 码头工人命令
5. 创建 Memcached 映像入门
- 快速回顾:什么是 Dockerfile?
- Dockerfile 命令概述
- 创建 Dockerfile
- 最终的 Dockerfile
- 为 Memcached 容器创建 Docker 映像
6. 运行 dockerised Memcached 容器
- 创建 Memcached 已安装容器
- 限制 Memcached 容器的内存
- 测试 Memcached 容器
Docker 简介
docker 项目 提供了更高级别的工具,可以协同工作,这些工具构建在一些 Linux 内核特性之上。 目标是帮助开发人员和系统管理员移植应用程序——连同它们的所有依赖项——并让它们跨系统和机器运行——无头疼。
Docker 通过创建安全的 LXC(即 Linux Containers)基于应用程序的环境,称为 docker 容器。 这些容器是使用 docker 镜像创建的,可以通过手动执行命令或通过 Dockerfiles 自动执行来构建。
注意: 了解更多关于 docker 及其部分(例如 docker daemon、CLI、图像等),请查看我们对项目的介绍性文章:docker Explained: Getting Started。
Memcached 简介
Memcached 是一个分布式的开源数据存储引擎。 它旨在将某些类型的数据存储在 RAM(而不是速度较慢的传统磁盘)中,以便应用程序进行非常快速的检索,通过减少对较重的数据集或 API 执行的查询数量来减少处理请求所需的时间,例如传统数据库(例如 MySQL)。
通过引入智能、精心规划和优化的缓存机制,可以处理看似更大量的请求,并由应用程序执行更多的过程。 这是 Memcached 最重要的用例,与任何其他缓存应用程序或组件一样。
Memcached 高度依赖并用于网站和其他各种应用程序的生产,已成为无需使用更多硬件(例如 更多服务器或服务器资源)。
它通过将 keys 及其匹配的 values(最大 1 MB 大小)存储到关联数组(即 哈希表),可以在大量虚拟服务器上进行扩展和分布。
在 Ubuntu 上安装 Docker(最新)
要开始在您的 VPS 上使用 Docker 项目,您可以使用 DigitalOcean 的 Ubuntu 13.04 的 docker 映像或自行安装。 在本节中,我们将快速浏览 Docker 0.7.1 的基本安装说明。
Ubuntu 安装说明
更新您的液滴:
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: 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 之前,让我们快速回顾一下它的可用命令,以刷新我们的第一篇 Getting Started 文章中的记忆。
运行 docker 守护进程和 CLI 用法
安装后,docker daemon 应该在后台运行,准备好接受 docker CLI 发送的命令。 对于某些可能需要手动运行 docker 的情况,请使用以下命令。
运行 docker 守护进程:
sudo docker -d &
码头工人 CLI 用法:
sudo docker [option] [command] [arguments]
注意: docker 需要 sudo 权限才能工作。
命令列表
以下是当前可用(0.7.1 版)docker 命令的摘要:
附
附加到正在运行的容器
建造
从 Dockerfile 构建容器
犯罪
从容器的更改创建新图像
cp
将文件/文件夹从容器文件系统复制到主机路径
差异
检查容器文件系统上的更改
事件
从服务器获取实时事件
出口
将容器的内容作为 tar 存档流式传输
历史
显示图像的历史
图片
列出图像
进口
从 tarball 的内容创建新的文件系统映像
信息
显示系统范围的信息
插入
在图像中插入文件
检查
返回容器的底层信息
杀
杀死一个正在运行的容器
加载
从 tar 存档加载图像
登录
注册或登录到 docker 注册服务器
日志
获取容器的日志
港口
查找经过 NAT 转换为 PRIVATE_PORT 的面向公众的端口
ps
列出容器
拉
从 docker 注册表服务器中拉取图像或存储库
推
将图像或存储库推送到 docker 注册表服务器
重新开始
重新启动正在运行的容器
R M
移除一个或多个容器
rmi
移除一张或多张图片
跑
在新容器中运行命令
节省
将图像保存到 tar 存档
搜索
在 docker 索引中搜索图像
开始
启动一个停止的容器
停止
停止正在运行的容器
标签
将图像标记到存储库中
最佳
查找容器的运行进程
版本
显示 docker 版本信息
创建 Memcached 映像入门
基于我们从 docker 系列的前几篇文章中获得的知识,让我们直接构建一个 Dockerfile,让 docker 自动构建 Memcached 安装的镜像(将用于运行沙盒化的 Memcached 实例)。
快速回顾:什么是 Dockerfile?
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 .
注意: 要了解有关 Dockerfile 的更多信息,请查看我们的文章:Docker 解释:使用 Dockerfiles 自动构建映像。
Dockerfile 命令概述
添加
将文件从主机复制到容器中
命令
设置要执行的默认命令,或传递给 ENTRYPOINT
入口点
设置容器内的默认入口点应用程序
环境噪声
设置环境变量(例如 “键=值”)
暴露
将端口暴露在外面
从
设置要使用的基础镜像
维护者
设置 Dockerfile 的作者/所有者数据
跑
运行命令并提交最终结果(容器)图像
用户
设置用户从镜像运行容器
体积
从宿主机挂载目录到容器
工作目录
设置要执行的 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
设置默认执行命令和入口(即 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 容器
借助我们在上一节中获得的图像,创建任意数量的完全隔离且自包含的 memcached 实例非常简单 - now。 我们所要做的就是用 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_ins”的 docker 容器,可以使用我们之前构建的标记为“memcached_img”的图像从端口 45001、run
访问。
限制 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.io 上的 docker 文档。