Docker 實戰一、創建極簡Redis Image
阿新 • • 發佈:2019-01-23
最近學習 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