1. 程式人生 > >Docker 實戰一、創建極簡Redis Image

Docker 實戰一、創建極簡Redis Image

最近學習 docker,看到了這樣一篇文章《Docker 的 Image 太大,怎麼變小?》,原部落格地址沒找到,感興趣的可以移步原創的開源專案

一、基本概念:

  • Docker 不是虛擬機器 (切記)
  • Docker 裡面的程式執行時不需要完整的作業系統!
  • CoreOS,RHEL, Ubuntu, CentOS,等等等,它們都是一個作業系統!

二、步驟

  • 使用 Busybox 的 Install 命令建立一個最小化的系統環境
  • 刪除不必要的各種系統檔案,具體哪些是不必要的,那就得需要具體程式具體分析,樓主花了大量時間來分析每個程式,現在樓主幾乎可以把這些APP的依賴項倒著背出來。
  • 將這些檔案打包成 rootfs.tar
  • 使用 Dockerfile 的 ADD 指令用 rootfs.tar 生成 Image

三、詳細操作
1.準備工作

    #切換至 Docker 目錄
    cd Docker
    #建立 redis2,mredis目錄
    mkdir redis2 mredis

2.使用 Busybox 的 Install 命令建立一個最小化的系統環境

    cd redis2
    vim Dockerfile
    #檔案內容如下

redis2/Dockerfile 檔案內容:

FROM redis:2.8.13

USER root

RUN mkdir /rootfs
WORKDIR /rootfs
RUN mkdir bin etc dev dev/pts lib usr proc sys tmp
RUN mkdir -p usr/lib64 usr/bin usr/local/bin
RUN touch etc/resolv.conf
RUN cp /etc/nsswitch.conf etc/nsswitch.conf RUN echo root:x:0:0:root:/:/bin/sh > etc/passwd RUN echo root:x:0: > etc/group RUN ln -s lib lib64 RUN ln -s bin sbin #busybox install ADD https://busybox.net/downloads/binaries/1.21.1/busybox-x86_64 /sbin/busybox RUN chmod +x /sbin/busybox RUN cp /sbin/busybox bin RUN busybox --install -s bin #複製 redis-server
RUN cp /usr/local/bin/redis-server usr/bin/redis-server #複製所需依賴 RUN bash -c "cp /lib/x86_64-linux-gnu/lib{m,dl,pthread,c}.so.* lib64" RUN cp /lib64/ld-linux-x86-64.so.2 lib64/ RUN tar cf /rootfs.tar .

建立 rootfs.tar

# -t 標籤
docker builder -t mdemo/redis2 ./
# 開啟容器 並且複製到本地
docker run -itd medmo/redis2
docker cp 容器ID:/rootfs.tar ./
docker stop 容器ID

3.構建極簡 redis image

cd ../mredis
vim Dockerfile

mredis/Dockerfile 檔案內容:

FROM scratch
MAINTAINER zhuzq <1228676735@qq.com>
ADD rootfs.tar /
WORKDIR /data
VOLUME /data

EXPOSE 6379
ENTRYPOINT ["/usr/bin/redis-server"]
CMD ["--port", "6379"]

執行

docker build -t microbox/redis ./
# 執行容器 --appendonly yes 資料持久化
docker run -itd -p 6379:6379 -v $PWD/data:/data microbox/redis --appendonly yes