Build Container (Docker) Image
When building a container (Docker) image, you may want to download and install tools from GitHub Releases or other sources. In particular, if you run CI with CircleCI or Google Cloud Build, you may want to install tools for CI on the image.
Traditionally, you would use curl, tar, unzip, etc. to install these tools, but with aqua, you can declaratively manage them. You don't have to look up download URLs, formats, etc. yourself. You can also use Renovate to automate updates.
aqua.yaml
---
# aqua - Declarative CLI Version Manager
# https://aquaproj.github.io/
registries:
- type: standard
ref: v4.155.1 # renovate: depName=aquaproj/aqua-registry
packages:
- name: rhysd/actionlint@v1.6.15
- name: golangci/golangci-lint@v1.47.2
- name: reviewdog/reviewdog@v0.14.1
Dockerfile
FROM debian:bookworm-20240408
ENV PATH=/root/.local/share/aquaproj-aqua/bin:$PATH
COPY aqua.yaml aqua-checksums.json /etc/aqua/
ENV AQUA_GLOBAL_CONFIG=/etc/aqua/aqua.yaml
RUN apt-get update && \
apt-get install -y curl && \
curl -sSfL -O https://raw.githubusercontent.com/aquaproj/aqua-installer/v3.0.1/aqua-installer && \
echo "fb4b3b7d026e5aba1fc478c268e8fbd653e01404c8a8c6284fdba88ae62eda6a aqua-installer" | sha256sum -c && \
chmod +x aqua-installer && \
./aqua-installer -v v2.28.0 && \
rm aqua-installer && \
aqua i -a && \
apt-get remove -y curl && \
apt-get clean
Remove aqua from Image
aqua >= v1.18.0
In the above Docker image, aqua is installed and used internally to execute tools.
However, if you do not want to install anything extra in the Docker image, if you want to keep the image minimal, or if you do not want to switch tool versions with aqua,
you can also remove aqua using the Multistage Build and aqua cp
command.
Dockerfile
FROM debian:bookworm-20240408 AS aqua
ENV PATH=/root/.local/share/aquaproj-aqua/bin:$PATH
COPY aqua.yaml aqua-checksums.json /etc/aqua/
ENV AQUA_GLOBAL_CONFIG=/etc/aqua/aqua.yaml
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sSfL -O https://raw.githubusercontent.com/aquaproj/aqua-installer/v3.0.1/aqua-installer
RUN echo "fb4b3b7d026e5aba1fc478c268e8fbd653e01404c8a8c6284fdba88ae62eda6a aqua-installer" | sha256sum -c
RUN chmod +x aqua-installer
RUN ./aqua-installer -v v2.28.0
RUN aqua i -a
RUN aqua cp -o /dist actionlint reviewdog
FROM debian:bookworm-20240408
COPY --from=aqua /dist/* /usr/local/bin/
aqua cp
installs specified tools and copies executable files to the specified directory.
In the above example, actionlint and reviewdog are installed and copied under /dist.
Only executable files are installed in the final image.
Notes of aqua cp
There is a caveat to aqua cp
.
aqua cp
copies only executable files from packages.
Therefore, tools that do not work with a single file will not work properly even if they are copied by aqua cp
.
If the tool is a single binary written in Go, there is basically no problem, but if it is a shell script depending on another files in the same repository, it will not work properly.
For example, tfenv will not work correctly even if you copy it by aqua cp
.
You need to install those tools in a different way.