From 739608454de2d1b22a538151dd08b2b10d26210c Mon Sep 17 00:00:00 2001 From: Aleksey Karpov <86011874+alekseyolg@users.noreply.github.com> Date: Thu, 23 Feb 2023 12:39:34 +0300 Subject: [PATCH] Dockerfile optimization (#9821) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reducing the number of layers, increasing readability, reducing the size of the image (how much I can’t check, it’s impossible for me to build due to the unavailability of the vagrant repository) --- pipeline.Dockerfile | 68 ++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/pipeline.Dockerfile b/pipeline.Dockerfile index 7e1667db1..fb66b8112 100644 --- a/pipeline.Dockerfile +++ b/pipeline.Dockerfile @@ -2,50 +2,42 @@ FROM ubuntu:focal-20220531 ARG ARCH=amd64 -ARG TZ=Etc/UTC -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -ENV VAGRANT_VERSION=2.3.4 -ENV VAGRANT_DEFAULT_PROVIDER=libvirt -ENV VAGRANT_ANSIBLE_TAGS=facts - -RUN apt update -y \ - && apt install -y \ - libssl-dev python3-dev sshpass apt-transport-https jq moreutils wget libvirt-dev openssh-client rsync git \ - ca-certificates curl gnupg2 software-properties-common python3-pip unzip \ - && rm -rf /var/lib/apt/lists/* -RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \ - && add-apt-repository \ - "deb [arch=$ARCH] https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) \ - stable" \ - && apt update -y && apt-get install --no-install-recommends -y docker-ce \ - && rm -rf /var/lib/apt/lists/* # Some tools like yamllint need this # Pip needs this as well at the moment to install ansible # (and potentially other packages) # See: https://github.com/pypa/pip/issues/10219 -ENV LANG=C.UTF-8 +ENV VAGRANT_VERSION=2.3.4 \ + VAGRANT_DEFAULT_PROVIDER=libvirt \ + VAGRANT_ANSIBLE_TAGS=facts \ + LANG=C.UTF-8 \ + DEBIAN_FRONTEND=noninteractive + +RUN apt update && apt install -y \ + libssl-dev python3-dev python3-pip sshpass apt-transport-https jq moreutils libvirt-dev openssh-client rsync git \ + ca-certificates curl gnupg2 software-properties-common unzip \ + && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \ + && add-apt-repository "deb [arch=$ARCH] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \ + && apt update && apt install --no-install-recommends -y docker-ce \ + && apt autoremove -yqq --purge && apt clean && rm -rf /var/lib/apt/lists/* WORKDIR /kubespray -COPY . . -RUN /usr/bin/python3 -m pip install --no-cache-dir pip -U \ - && /usr/bin/python3 -m pip install --no-cache-dir -r tests/requirements.txt \ - && python3 -m pip install --no-cache-dir -r requirements.txt \ - && update-alternatives --install /usr/bin/python python /usr/bin/python3 1 -RUN KUBE_VERSION=$(sed -n 's/^kube_version: //p' roles/kubespray-defaults/defaults/main.yaml) \ - && curl -LO https://storage.googleapis.com/kubernetes-release/release/$KUBE_VERSION/bin/linux/$ARCH/kubectl \ - && chmod a+x kubectl \ - && mv kubectl /usr/local/bin/kubectl - -# Install Vagrant -RUN wget https://releases.hashicorp.com/vagrant/${VAGRANT_VERSION}/vagrant_${VAGRANT_VERSION}-1_amd64.deb && \ - dpkg -i vagrant_${VAGRANT_VERSION}-1_amd64.deb && \ - rm vagrant_${VAGRANT_VERSION}-1_amd64.deb && \ - vagrant plugin install vagrant-libvirt +COPY . . -# Install Kubernetes collections -RUN pip3 install kubernetes \ - && ansible-galaxy collection install kubernetes.core +RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 \ + && pip install --no-cache-dir pip -U \ + && pip install --no-cache-dir -r tests/requirements.txt -r requirements.txt \ + && KUBE_VERSION=$(sed -n 's/^kube_version: //p' roles/kubespray-defaults/defaults/main.yaml) \ + && curl -L https://storage.googleapis.com/kubernetes-release/release/$KUBE_VERSION/bin/linux/$ARCH/kubectl -o /usr/local/bin/kubectl\ + && chmod a+x /usr/local/bin/kubectl \ + # Install Vagrant + && curl -LO https://releases.hashicorp.com/vagrant/${VAGRANT_VERSION}/vagrant_${VAGRANT_VERSION}-1_amd64.deb \ + && dpkg -i vagrant_${VAGRANT_VERSION}-1_amd64.deb \ + && rm vagrant_${VAGRANT_VERSION}-1_amd64.deb \ + && vagrant plugin install vagrant-libvirt \ + # Install Kubernetes collections + && pip install --no-cache-dir kubernetes \ + && ansible-galaxy collection install kubernetes.core \ + # Clean cache python + && find / -type d -name '*__pycache__' -prune -exec rm -rf {} \;