Docker构建映像大小对于Postgresql 9.6太大

时间:2018-07-17 14:16:16

标签: postgresql docker

我正在尝试构建安装了plv8扩展名的PostgreSql 9.6 Docker映像。以下是我的Dockerfile。

FROM postgres:9.6

RUN apt-get update
RUN apt-get install wget make git python python-pip python-dev build-essential postgresql-server-dev-9.6 libglib2.0-dev libc++abi-dev libc++-dev -y
RUN pip install psycopg2

RUN wget https://github.com/plv8/plv8/archive/v2.3.0.tar.gz && tar -xvzf v2.3.0.tar.gz && cd plv8-2.3.0 && make

RUN cp /plv8-2.3.0/plv8--2.3.0.sql /usr/share/postgresql/9.6/extension/
RUN cp /plv8-2.3.0/plv8.control /usr/share/postgresql/9.6/extension/
RUN cp /plv8-2.3.0/plv8.so /usr/lib/postgresql/9.6/lib/

RUN rm v2* && rm -rf plv8-2.3.0
RUN apt-get remove --purge wget make git python python-pip python-dev build-essential postgresql-server-dev-9.6 libglib2.0-dev libc++abi-dev libc++-dev -y
RUN apt-get autoremove -y && apt-get autoclean -y

生成的图像大小为3.45 GB,而来自Docker Hub的原始图像大小为235 MB。知道为什么生成的图像这么大吗?如何缩小尺寸?我尝试使用this link减小其大小,但不幸的是docker import/export丢失了元数据。

更新

我试图将所有RUN语句合并为一个。

FROM postgres:9.6

RUN apt-get update ; apt-get install wget make git python python-pip python-dev build-essential postgresql-server-dev-9.6 libglib2.0-dev libc++abi-dev libc++-dev -y ; pip install psycopg2 ; wget https://github.com/plv8/plv8/archive/v2.3.0.tar.gz ; tar -xvzf v2.3.0.tar.gz ; cd plv8-2.3.0 ; make ; cp /plv8-2.3.0/plv8--2.3.0.sql /usr/share/postgresql/9.6/extension/ ; cp /plv8-2.3.0/plv8.control /usr/share/postgresql/9.6/extension/ ; cp /plv8-2.3.0/plv8.so /usr/lib/postgresql/9.6/lib/ ; rm v2* ; rm -rf plv8-2.3.0 ; apt-get remove --purge wget make git python python-pip python-dev build-essential postgresql-server-dev-9.6 libglib2.0-dev libc++abi-dev libc++-dev -y ; apt-get autoremove -y ; apt-get autoclean -y

新大小为3.11 GB。还不大吗?

1 个答案:

答案 0 :(得分:2)

尝试尽可能使用&&运行命令。 示例:

FROM postgres:9.6

RUN apt-get update && \
    apt-get install wget make git python python-pip python-dev build-essential 
    postgresql-server-dev-9.6 libglib2.0-dev libc++abi-dev libc++-dev -y && \
    apt-get install wget make git python python-pip python-dev build-essential 
    postgresql-server-dev-9.6 libglib2.0-dev libc++abi-dev libc++-dev -y && \
    pip install psycopg2

RUN wget https://github.com/plv8/plv8/archive/v2.3.0.tar.gz && tar -xvzf v2.3.0.tar.gz && cd plv8-2.3.0 && make

RUN cp /plv8-2.3.0/plv8--2.3.0.sql /usr/share/postgresql/9.6/extension/ && \
    cp /plv8-2.3.0/plv8.control /usr/share/postgresql/9.6/extension/ && \
    cp /plv8-2.3.0/plv8.so /usr/lib/postgresql/9.6/lib/
.
.
.

以此类推... 因为每条RUN行都会生成具有其自身大小的称为“悬空图像”的图像。