alpine-linux para la aceleración de la construcción de dockerfile
docker是非常常用的一个工具,可以快速的制作分发。既可以单独使用;又可以结合k8s使用(未来可能取消);还
可以快速部署开发,测试环境。但是在使用一些外国的开源项目的时候,经常会因为“墙”的原因,网速特别慢,而
且有的资源死活无法下载。大多数原因是因为包管理工具,或者需要在一些git产品(如:github,gitee)上下
载一些代码和配置等等。这时候,就会非常慢,我在没有研究dockerfile的构建方式的时候,曾经一次构建需要6
个小时,当时真的很笨,呵呵。后来慢慢研究了dockerfile的构建命令,把构建时间从6小时缩短到了半个小时,
这样,我就每天可以做更多的事情,yes
在2年之前,我就被这个问题困扰过,在2年后的现在,我又被这个问题困扰。这次我没有立刻想到这方面,真是罪
过,浪费了一天半时间。虽然我在这一天半里也做了其他事情。
好了,这里主要记录一下,dockerfile在本土构建的时候,为什么慢?哪里会慢?如何解决?
Veamos un ejemplo de dockerfile:
FROM alpine:3.15.0
# Product version
ARG VERSION
ENV VERSION ${
VERSION:-0.0.0}
# Link to the product repository
ARG VCS_URL
# Hash of the commit
ARG VCS_REF
# Repository branch
ARG VCS_BRANCH
# Date of the build
ARG BUILD_DATE
# Include metadata, additionally use label-schema namespace
LABEL org.label-schema.schema-version="1.0" \
org.label-schema.vendor="Cossack Labs" \
org.label-schema.url="https://cossacklabs.com" \
org.label-schema.name="AcraEngineeringDemo - django - djangoproject" \
org.label-schema.description="AcraEngineeringDemo demonstrates features of main components of Acra Suite" \
org.label-schema.version=$VERSION \
org.label-schema.vcs-url=$VCS_URL \
org.label-schema.vcs-ref=$VCS_REF \
org.label-schema.build-date=$BUILD_DATE \
com.cossacklabs.product.name="acra-engdemo" \
com.cossacklabs.product.version=$VERSION \
com.cossacklabs.product.vcs-ref=$VCS_REF \
com.cossacklabs.product.vcs-branch=$VCS_BRANCH \
com.cossacklabs.product.component="acra-engdemo-django-djangoproject" \
com.cossacklabs.docker.container.build-date=$BUILD_DATE \
com.cossacklabs.docker.container.type="product"
# Fix CVE-2019-5021
RUN echo 'root:!' | chpasswd -e
EXPOSE 8000
# Install packages
RUN apk update
RUN apk add --no-cache bash python3 py3-pip postgresql-dev postgresql-client npm \
libxslt-dev jpeg-dev
RUN pip3 install --no-cache-dir --upgrade pip
RUN ln -s /usr/bin/python3 /usr/bin/python
RUN apk add gcc python3-dev musl-dev libxml2-dev git alpine-sdk rsync
# TODO : remove when themis will fully support alpine
RUN mkdir -p /usr/local/sbin
RUN echo -e '#!/bin/sh\n\nexit 0\n' > /usr/local/sbin/ldconfig
RUN chmod +x /usr/local/sbin/ldconfig
RUN cd /root \
&& git clone -b stable https://github.com/cossacklabs/themis
RUN cd /root/themis \
&& make \
&& make install \
&& make pythemis_install
# Fetch and patch django
RUN mkdir /app
RUN git clone $VCS_URL /app/ \
&& cd /app \
&& git checkout $VCS_REF
COPY django/configs/common.py.patch /app/djangoproject/settings/
COPY _common/ssl/acra-client/acra-client.crt /app/blog/ssl/acra-client.crt
COPY _common/ssl/acra-client/acra-client.key /app/blog/ssl/acra-client.key
COPY _common/ssl/ca/ca.crt /app/blog/ssl/root.crt
RUN chmod 0600 -R /app/blog/ssl/
RUN patch \
/app/djangoproject/settings/common.py \
/app/djangoproject/settings/common.py.patch
# Install python modules
RUN pip3 install --no-cache-dir -r /app/requirements/dev.txt
RUN cd /app && npm install
ENV DJANGOPROJECT_DATA_DIR /app.data
RUN mkdir -p $DJANGOPROJECT_DATA_DIR/conf
RUN mkdir -p /app/docker
COPY django/entry.sh /app/docker/
RUN chmod +x /app/docker/entry.sh
WORKDIR /app
ENTRYPOINT ["/app/docker/entry.sh"]
explicar:
以上为一个著名的解密解密项目的示例工程的dockerfile,
可以看到:
它以alpine3.15 为基础镜像进行了构建。
使用了 RUN apk update 包管理工具管理工具包
使用了 git 克隆 https://github.com/cossacklabs/themis 项目
还使用了pip python包管理工具。
以上三种默认都是需要去国外下载的, 所以他们会非常慢!!如果不去优化非常浪费时间!!
那么如何优化?? 其实也就是将其替换为国内的镜像。
此dockerfile使用了三个不同的工具,那我们就需要三个国内镜像加速,
github:这里我还是直接用了国内的gitee先导入仓库,然后直接放到服务器上,将使用git克隆直接改为 COPY 命令。
alpine: 在使用apk包管理工具之前,加上这条命令:
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
pip这里: 可以使用清华源,阿里云源,中科大源等等。。。
如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /app/requirements/dev.txt
Otras situaciones como ubuntu, centos, etc.
ubuntu: 使用apt包管理工具。 有国内源如:清华和阿里云源
centos: 使用yum包管理工具。 有国内源如:阿里云源(其它暂时不清楚,大概率还有,不过我用centos用的少。哈哈哈)
如果你还用蓝maven等包管理工具,那就可以问问度娘:如何替换maven的镜像源。
再提供个好东西:
https://developer.aliyun.com/tool/?spm=5176.27087497.J_3207526240.53.577278ceVUpn4o
在这里,你可以查看一下阿里云有诶有你的镜像。