Skip to content

Commit

Permalink
Add denoland/deno:bin image (#159)
Browse files Browse the repository at this point in the history
Add a `bin` image containing simply the Deno binary on a `scratch` image.
  • Loading branch information
felipecrs committed Aug 25, 2021
1 parent 0e5a020 commit ae19386
Show file tree
Hide file tree
Showing 8 changed files with 132 additions and 81 deletions.
44 changes: 41 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,49 @@ name: ci
on: [push, pull_request]

jobs:
build-bin:
name: bin
runs-on: ubuntu-latest-xl
steps:
- name: Clone repository
uses: actions/checkout@v2

- name: Build and export image
run: |
docker build -f bin.dockerfile -t bin .
docker save bin -o /tmp/bin-image.tar
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: bin-image
path: /tmp/bin-image.tar

build:
needs: build-bin
name: ${{ matrix.kind }}
runs-on: ubuntu-latest-xl
strategy:
matrix:
kind: ['alpine', 'centos', 'debian', 'distroless', 'ubuntu']
kind: ["alpine", "centos", "debian", "distroless", "ubuntu"]
steps:
- name: Clone repository
uses: actions/checkout@v2

- name: Download bin image artifact
uses: actions/download-artifact@v2
with:
name: bin-image
path: /tmp

- name: Load bin image
run: |
docker load --input /tmp/bin-image.tar
docker inspect bin
- name: Build image
run: |
docker build -f ${{ matrix.kind }}.dockerfile -t ${{ matrix.kind }} .
docker build -f ${{ matrix.kind }}.dockerfile --build-arg BIN_IMAGE=bin -t ${{ matrix.kind }} .
docker run -t ${{ matrix.kind }}
- name: Test basic run
Expand Down Expand Up @@ -43,7 +73,15 @@ jobs:
docker push denoland/deno:${{ matrix.kind }}-${GITHUB_REF#refs/*/}
docker push denoland/deno:${{ matrix.kind }}
- name: Push base image (default)
- name: Push bin image
if: github.repository == 'denoland/deno_docker' && startsWith(github.ref, 'refs/tags/') && matrix.kind == 'debian'
run: |
docker tag bin denoland/deno:bin-${GITHUB_REF#refs/*/}
docker tag bin denoland/deno:bin
docker push denoland/deno:bin-${GITHUB_REF#refs/*/}
docker push denoland/deno:bin
- name: Push default image
if: github.repository == 'denoland/deno_docker' && startsWith(github.ref, 'refs/tags/') && matrix.kind == 'debian'
run: |
docker tag ${{ matrix.kind }} denoland/deno:${GITHUB_REF#refs/*/}
Expand Down
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Dockerhub:
(default)
- Distroless: [denoland/deno:distroless](https://hub.docker.com/r/denoland/deno)
- Ubuntu: [denoland/deno:ubuntu](https://hub.docker.com/r/denoland/deno)
- Only the binary: [denoland/deno:bin](https://hub.docker.com/r/denoland/deno)

![ci status](https://github.com/denoland/deno_docker/workflows/ci/badge.svg?branch=main)

Expand Down Expand Up @@ -70,6 +71,18 @@ and build and run this locally:
$ docker build -t app . && docker run -it --init -p 1993:1993 app
```

## Using your own base image

If you prefer to install `deno` in your own base image, you can use the `denoland/deno:bin` to simplify the process.

```Dockerfile
FROM ubuntu

ARG DENO_VERSION=1.13.2

COPY --from=denoland/deno:bin-${DENO_VERSION} /deno /usr/local/bin/deno
```

## (optional) Add `deno` alias to your shell

Alternatively, you can add `deno` command to your shell init file (e.g.
Expand Down
26 changes: 13 additions & 13 deletions alpine.dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
FROM frolvlad/alpine-glibc:alpine-3.13
ARG DENO_VERSION=1.13.2
ARG BIN_IMAGE=denoland/deno:bin-${DENO_VERSION}


ENV DENO_VERSION=1.13.2
FROM ${BIN_IMAGE} AS bin

RUN apk add --virtual .download --no-cache curl \
&& curl -fsSL https://github.com/denoland/deno/releases/download/v${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip \
--output deno.zip \
&& unzip deno.zip \
&& rm deno.zip \
&& chmod 755 deno \
&& mv deno /bin/deno \
&& apk del .download

FROM frolvlad/alpine-glibc:alpine-3.13

RUN addgroup --gid 1000 deno \
&& adduser --uid 1000 --disabled-password deno --ingroup deno \
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/
&& adduser --uid 1000 --disabled-password deno --ingroup deno \
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/

ENV DENO_DIR /deno-dir/
ENV DENO_INSTALL_ROOT /usr/local

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}
COPY --from=bin /deno /bin/deno

COPY ./_entry.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh

Expand Down
23 changes: 23 additions & 0 deletions bin.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
ARG DENO_VERSION=1.13.2


FROM ubuntu:20.04 AS download

RUN apt-get update \
&& apt-get install -y curl unzip \
&& rm -rf /var/lib/apt/lists/*

ARG DENO_VERSION
RUN curl -fsSL https://github.com/denoland/deno/releases/download/v${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip \
--output deno.zip \
&& unzip deno.zip \
&& rm deno.zip \
&& chmod 755 deno


FROM scratch

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}

COPY --from=download /deno /deno
24 changes: 10 additions & 14 deletions centos.dockerfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
FROM centos:8
ARG DENO_VERSION=1.13.2
ARG BIN_IMAGE=denoland/deno:bin-${DENO_VERSION}


FROM ${BIN_IMAGE} AS bin

ENV DENO_VERSION=1.13.2

RUN yum makecache \
&& yum install unzip -y \
&& curl -fsSL https://github.com/denoland/deno/releases/download/v${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip \
--output deno.zip \
&& unzip deno.zip \
&& rm deno.zip \
&& chmod 755 deno \
&& mv deno /bin/deno \
&& yum remove unzip -y \
&& yum clean all \
&& rm -rf /var/cache/yum
FROM centos:8

RUN groupadd -g 1993 deno \
&& adduser -u 1993 -g deno deno \
Expand All @@ -22,9 +15,12 @@ RUN groupadd -g 1993 deno \
ENV DENO_DIR /deno-dir/
ENV DENO_INSTALL_ROOT /usr/local

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}
COPY --from=bin /deno /bin/deno

COPY ./_entry.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh


ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["run", "https://deno.land/std/examples/welcome.ts"]
32 changes: 13 additions & 19 deletions debian.dockerfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,25 @@
FROM debian:stable-slim
ARG DENO_VERSION=1.13.2
ARG BIN_IMAGE=denoland/deno:bin-${DENO_VERSION}


ENV DENO_VERSION=1.13.2
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get -qq update \
&& apt-get -qq install -y --no-install-recommends curl ca-certificates unzip \
&& curl -fsSL https://github.com/denoland/deno/releases/download/v${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip \
--output deno.zip \
&& unzip deno.zip \
&& rm deno.zip \
&& chmod 755 deno \
&& mv deno /usr/bin/deno \
&& apt-get -qq remove --purge -y curl ca-certificates unzip \
&& apt-get -y -qq autoremove \
&& apt-get -qq clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
FROM ${BIN_IMAGE} AS bin


FROM debian:stable-slim

RUN useradd --uid 1993 --user-group deno \
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/

ENV DENO_DIR /deno-dir/
ENV DENO_INSTALL_ROOT /usr/local

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}
COPY --from=bin /deno /usr/bin/deno

COPY ./_entry.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh


ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["run", "https://deno.land/std/examples/welcome.ts"]
19 changes: 6 additions & 13 deletions distroless.dockerfile
Original file line number Diff line number Diff line change
@@ -1,25 +1,18 @@
FROM alpine:3.12.3
ARG DENO_VERSION=1.13.2
ARG BIN_IMAGE=denoland/deno:bin-${DENO_VERSION}

ENV DENO_VERSION=1.13.2

RUN apk add --virtual .download --no-cache curl \
&& curl -fsSL https://github.com/denoland/deno/releases/download/v${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip \
--output deno.zip \
&& unzip deno.zip \
&& rm deno.zip \
&& chmod 755 deno \
&& mv deno /bin/deno \
&& apk del .download
FROM ${BIN_IMAGE} AS bin


FROM gcr.io/distroless/cc
COPY --from=0 /bin/deno /bin/deno

ENV DENO_VERSION=1.13.2
ENV DENO_DIR /deno-dir/
ENV DENO_INSTALL_ROOT /usr/local

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}
COPY --from=bin /deno /bin/deno

ENTRYPOINT ["/bin/deno"]
CMD ["run", "https://deno.land/std/examples/welcome.ts"]

32 changes: 13 additions & 19 deletions ubuntu.dockerfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,25 @@
FROM ubuntu:20.04
ARG DENO_VERSION=1.13.2
ARG BIN_IMAGE=denoland/deno:bin-${DENO_VERSION}


ENV DENO_VERSION=1.13.2

RUN apt-get -qq update \
&& apt-get upgrade -y -o Dpkg::Options::="--force-confold" \
&& apt-get -qq install -y ca-certificates curl unzip --no-install-recommends \
&& curl -fsSL https://github.com/denoland/deno/releases/download/v${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip \
--output deno.zip \
&& unzip deno.zip \
&& rm deno.zip \
&& chmod 755 deno \
&& mv deno /usr/bin/deno \
&& apt-get -qq remove -y ca-certificates curl unzip \
&& apt-get -y -qq autoremove \
&& apt-get -qq clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
FROM ${BIN_IMAGE} AS bin


FROM ubuntu:20.04

RUN useradd --uid 1993 --user-group deno \
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/

ENV DENO_DIR /deno-dir/
ENV DENO_INSTALL_ROOT /usr/local

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}
COPY --from=bin /deno /usr/bin/deno

COPY ./_entry.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh


ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["run", "https://deno.land/std/examples/welcome.ts"]

0 comments on commit ae19386

Please sign in to comment.