Docker学习过程 (11-实战-Memcached)

前言: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入门与开发实战

猜你喜欢

转载自blog.csdn.net/gengli2017/article/details/86532868
今日推荐