前言: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入門與開發實戰