0

Can we run docker commands in New AKS based pods?

We have created Azuredevops agent in our private aks AKS platform(v.122). We have our pipeine tasks with various docker tasks like custom image build from Docker file, docker image push and have docker compose up and down commands as part of our application build. But now we are blocked with latest version AKS is that there is no docker runtime support and only containerd is the runtime. So, none of our application builds are happening.

So, is there any workaround to run docker in docker container for AKS ]?

in my Docker file of vsts-aent i tried to add below. But no luck that docker service is not running.

First I created a image from below dockerfile where we have intenet connectivity.

FROM ubuntu:18.04

# To make it easier for build and release pipelines to run apt-get,
# configure apt to not require confirmation (assume the -y argument by default)
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    curl \
    wget \
    jq \
    git \
    iputils-ping \
    libcurl4 \
    libicu60 \
    libunwind8 \
    netcat \
    telnet \
    libssl1.0 \
    python \
    python3 \
    openjdk-11-jdk-headless \
    gnupg \
    make \
  && rm -rf /var/lib/apt/lists/*

RUN curl -LsS https://aka.ms/InstallAzureCLIDeb | bash \
  && rm -rf /var/lib/apt/lists/*
#Instal Helm
ARG HELM_VERSION="v3.7.2"
ARG HELM_LOCATION="https://get.helm.sh"
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
RUN set -x && \
    wget ${HELM_LOCATION}/${HELM_FILENAME} && \
    echo Verifying ${HELM_FILENAME}... && \
    echo Extracting ${HELM_FILENAME}... && \
    tar zxvf ${HELM_FILENAME} && mv /linux-amd64/helm /usr/local/bin/ && \
    rm ${HELM_FILENAME} && rm -r /linux-amd64
#install kubectl
ENV KUBECTL_VERSION="v1.18.9"
RUN set -x && \
    curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \
    chmod +x kubectl && \
    mv kubectl /usr/local/bin/kubectl
#install node
RUN curl -sL https://deb.nodesource.com/setup_11.x  | bash -
RUN apt-get -y install nodejs
RUN npm install
#install maven 3.8.6
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && echo "Downlaoding maven" \
  && curl -fsSL -o /tmp/apache-maven.tar.gz https://apache.osuosl.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz \
  \
  && echo "Unziping maven" \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  \
  && echo "Cleaning and setting links" \
  && rm -f /tmp/apache-maven.tar.gz \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

# 6- Define environmental variables required by Maven, like Maven_Home directory and where the maven repo is located
ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64
#install docker daemon inside docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg |  gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo \
   "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get update
RUN apt-get install docker-ce docker-ce-cli containerd.io -y

# Can be 'linux-x64', 'linux-arm64', 'linux-arm', 'rhel.6-x64'.
ENV TARGETARCH=linux-x64

WORKDIR /azp

COPY ./vstsagent/ .
COPY ./start.sh .
COPY ./docker.sh .
RUN chmod +x start.sh docker.sh
CMD ["./docker.sh"]
ENTRYPOINT ["./start.sh"]

Then the built image pushed to dockerhub and customised in our private environment with some specific configurations and started the vstsagent startup alone as below

The docker.sh is as below.

#!/bin/bash
echo "DOCKER STARTS HERE"
service docker start
docker version
docker ps
echo "DOCKER ENDS HERE"
Vowneee
  • 956
  • 10
  • 33
  • This might help https://snyk.io/blog/building-docker-images-kubernetes/ – CSharpRocks Nov 15 '22 at 14:25
  • but no guidance about how Kanico can be installed in and Azuredevops aks based build agent. Because our agent is already running inside AKS and ther we want to build our app images using dockerfile – Vowneee Nov 15 '22 at 14:43
  • Updated the answer here. https://stackoverflow.com/questions/52973546/docker-in-docker-in-aks/73966841?noredirect=1#comment131421520_73966841 – iamattiq1991 Nov 15 '22 at 20:24
  • Please follow up the issue resolution on the above thread on [here](https://stackoverflow.com/questions/52973546/docker-in-docker-in-aks) –  Dec 07 '22 at 09:23
  • The issue resolved by following the steps here- stackoverflow.com/questions/52973546/docker-in-docker-in-aks/… – iamattiq1991 – Vowneee Dec 07 '22 at 10:26

0 Answers0