前言
之前用Dockerfile构建过一个redis镜像,833M,太大了,因此进行瘦身,传输和部署会更快。
优化完,251M。
修改后的Dockerfile
FROM centos:7.8.2003 as build
MAINTAINER xun "418728966@qq.com"
RUN yum install -y gcc gcc-c++ make vim && \
yum install -y centos-release-scl && \
yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils && \
yum clean all && \
rm -rf /var/cache/yum/* && \
rm -f /redis-6.0.6.tar.gz
RUN ln -sf /opt/rh/devtoolset-9/root/usr/bin/gcc /usr/bin/gcc && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# RUN gcc -v
ADD lib/redis-6.0.6.tar.gz /
RUN cd /redis-6.0.6 && \
make -j6 && \
make install PREFIX=/usr/local/redis/ && \
rm -rf /redis-6.0.6/ && \
mkdir -p /usr/local/redis/{logs,data}
COPY redis6379.conf /usr/local/redis/bin/redis.conf
FROM centos:7.8.2003
COPY --from=build /usr/local/redis /redis
ENV PATH $PATH:/redis/bin
WORKDIR /redis/bin
EXPOSE 6379
CMD ["redis-server", "/redis/bin/redis.conf"]
# 构建镜像
docker run -d -v /Users/xun/redis.conf:/redis/bin/redis.conf -p 6379:6379 --name redisStandAlone redis-base:v2 redis-server /redis/bin/redis.conf
~/redis-cluster docker history redis-base:v2
IMAGE CREATED CREATED BY SIZE COMMENT
faad17dec657 48 minutes ago /bin/sh -c #(nop) CMD ["redis-server" "/red… 0B
1aecff214291 48 minutes ago /bin/sh -c #(nop) EXPOSE 6379 0B
8670cc6ded66 48 minutes ago /bin/sh -c #(nop) WORKDIR /redis/bin 0B
15cf267557e3 48 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B
039946cee4d3 48 minutes ago /bin/sh -c #(nop) COPY dir:4bc9735407a7c1a37… 47.2MB
afb6fca791e0 6 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 6 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 6 months ago /bin/sh -c #(nop) ADD file:72b194edf3abedf51… 203MB
xun@xun15 ~/redis-cluster
瘦身需要注意几点
- 合并Dockerfile语句:COPY、ADD、RUN都会创建新层,使用**&&**合并
- 使用多阶段构建,将层合并
- 使用DiDistroless移除容器中的所有累赘
- 使用alpine作为更小的基础镜像