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

来自菜鸟教程
跳转至:导航、​搜索

状态: 已弃用

本文已弃用,不再维护。

原因

本文中的技术已经过时,可能不再反映 Docker 的最佳实践。

请参阅


介绍


对于大多数 Web 应用程序来说,很少会发现 CPU 是导致 HTTP 请求丢失或阻塞托管它们的 Web 服务器的罪魁祸首。 它通常是一个设计不足的设置,不涉及缓存层,占用了后端数据存储的所有资源(即 您选择的数据库)。

Memcached - 现在不需要介绍 - 可以大大提高应用程序部署堆栈的性能,而无需对可用资源进行任何修改(使您能够榨取最后一点汁液)。

在这篇 DigitalOcean 文章中,尤其要记住那些托管多个 Web 应用程序的人(例如 多个 WordPress 实例、Python 应用程序等),我们将创建 docker 图像以快速开始运行(按需)Memcached 容器,可以单独操作。 这些容器在它们自己的环境中保存和保护,将与托管的应用程序一起使用,以帮助它们变得更好、更快。

词汇表


1. Docker 简介


2. Memcached 简介


3. 在 Ubuntu 上安装 Docker


4. 基本的 Docker 命令


  1. 运行 docker 守护进程和 CLI 用法
  2. 码头工人命令

5. 创建 Memcached 映像入门


  1. 快速回顾:什么是 Dockerfile?
  2. Dockerfile 命令概述
  3. 创建 Dockerfile
  4. 最终的 Dockerfile
  5. 为 Memcached 容器创建 Docker 映像

6. 运行 dockerised Memcached 容器


  1. 创建 Memcached 已安装容器
  2. 限制 Memcached 容器的内存
  3. 测试 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”的图像从端口 45001run 访问。

限制 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 文档。

提交人: [[“%3Ca|https]] ://twitter.com/ostezer [[“%3C/a|”>操作系统]] 泰泽