前言:Memcached 是一个将数据缓存在内存的工具,由于其优化合理,被广泛使用在了 Web 服务器中。[1]
今天用基于 debian9,也就是 debian:stretch 来构建一个 Memcached 容器。
准备
把 stretch 源换成国内163源以加快软件下载速度。其软件源与 Dockerfile 在一个目录,文件名为 sources.list,通过 ADD 指令加入容器。
Dockerfile 内容
# Memcached
# VERSION 0.0.1
# 基础镜像
FROM debian:stretch
# 维护者信息
MAINTAINER Geng Li
# 覆盖原来软件源
COPY sources.list /etc/apt/sources.list
# 创建运行时用户
RUN groupadd -r memcached && useradd -r -g memcached memcached
# 安装Memcached
RUN apt-get update \
# 编译时记录下需要的依赖,安装完成后移除,减小镜像体积
&& buildDeps='gcc make perl libc6-dev libevent-dev wget' \
&& apt-get install -y --no-install-recommends libevent-2.0-5 $buildDeps \
# 下载Memcached 源码
&& wget -O memcached.tar.gz "http://www.memcached.org/files/memcached-1.5.12.tar.gz" \
&& mkdir -p /usr/src/memcached \
&& tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1 \
&& rm memcached.tar.gz \
&& cd /usr/src/memcached \
# 配置、编译、安装
&& ./configure \
&& make \
&& make install \
&& cd / \
&& rm -rf /usr/src/memcached \
&& apt-get purge -y --auto-remove $buildDeps
# 使用创建的用户来运行 Memcached
USER memcached
# 暴露默认端口 11211
EXPOSE 11211
# 启动Memcached
CMD ["memcached"]
如图彩色更好看些。
sources.list 内容
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
各文件位置如下:
编译
sudo docker -t gengli/memcached:0.0.1 ./Memcached
把 gengli/memcached:0.0.1
换成你想要的其他名字, ./Memcached
换成你的 Dockerfile 所在的文件夹。
其部分过程如最后的图。
测试
sudo docker images
通过上面构建的 Memcached 镜像创建一个新的容器,并将容器中 Memcached 所监听的 11211 端口映射到物理机上。
由于 Memcached 支持简单的指令格式,可以通过 Telnet 等简单工具连接到 Memcached,并向它发送指令来测试 Memcached 的情况。
通过 Memcached 的 add、replace 和 get 三个指令来模拟一个简单的缓存写入和读取的流程。add、replace 和 get 的使用格式如下:
add <key> <flags> <exptime> \r\n <value> \r\n
replace <key> <flags> <exptime> <bytes> \r\n <value> \r\n
get <key>
其中:
\r\n
回车键flags
标记位,用于判断缓存一致性exptime
缓存的过期时间,如果是 0 则采用 Memcached 允许的最大时间bytes
缓存数据占用的字节长度value
缓存的数据
add
增加一个缓存,名为 hello,值为 world。STORED 结束。
add hello 1 0 5
world
STORED
用get
获取其值
get hello
用replace
更换其值:
replace hello 1 0 5
kitty
STORED
get hello
和前一章一样,有拒绝访问的问题,等网络知识学多了再回过头来研究怎么回事。
部分编译过程展示
参考书目:熊昌隆.没什么难的Docker入门与开发实战