dockerfile构建加速之alpine-linux,ubuntu,centos等等

dockerfile构建加速之alpine-linux

docker是非常常用的一个工具,可以快速的制作分发。既可以单独使用;又可以结合k8s使用(未来可能取消);还
可以快速部署开发,测试环境。但是在使用一些外国的开源项目的时候,经常会因为“墙”的原因,网速特别慢,而
且有的资源死活无法下载。大多数原因是因为包管理工具,或者需要在一些git产品(如:github,gitee)上下
载一些代码和配置等等。这时候,就会非常慢,我在没有研究dockerfile的构建方式的时候,曾经一次构建需要6
个小时,当时真的很笨,呵呵。后来慢慢研究了dockerfile的构建命令,把构建时间从6小时缩短到了半个小时,
这样,我就每天可以做更多的事情,yes
在2年之前,我就被这个问题困扰过,在2年后的现在,我又被这个问题困扰。这次我没有立刻想到这方面,真是罪
过,浪费了一天半时间。虽然我在这一天半里也做了其他事情。
好了,这里主要记录一下,dockerfile在本土构建的时候,为什么慢?哪里会慢?如何解决?

下面看一个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"]

解释:

以上为一个著名的解密解密项目的示例工程的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

ubuntu,centos等其他情况。

ubuntu: 使用apt包管理工具。 有国内源如:清华和阿里云源
centos: 使用yum包管理工具。 有国内源如:阿里云源(其它暂时不清楚,大概率还有,不过我用centos用的少。哈哈哈)

如果你还用蓝maven等包管理工具,那就可以问问度娘:如何替换maven的镜像源。


再提供个好东西:
https://developer.aliyun.com/tool/?spm=5176.27087497.J_3207526240.53.577278ceVUpn4o
在这里,你可以查看一下阿里云有诶有你的镜像。

你可能感兴趣的:(项目细节,linux,运维部署,linux,ubuntu,centos)