Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bring back docker image #1211

Merged
merged 9 commits into from Jun 17, 2022
42 changes: 42 additions & 0 deletions .github/workflows/docker-image.yml
@@ -0,0 +1,42 @@
#
# GitHub Actions configuration to automatically build and publish a Docker image
# for Omicron. See README for details.
#
name: docker-image
on: push
jobs:
docker-image:
runs-on: ubuntu-18.04
steps:
# actions/checkout@v2
- uses: actions/checkout@28c7f3d2b5162b5ddd3dfd9a45aa55eaf396478b
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to GitHub Packages Docker Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract branch name
shell: bash
run: BRANCH="${GITHUB_HEAD_REF//\//-}"; echo "::set-output name=branch::${BRANCH:-main}"
id: extract_branch
- name: Build and push
# This pushes a docker image to github's container registry.
# It is not a public image by default.
# The docs are here: https://github.com/docker/build-push-action
uses: docker/build-push-action@9379083e426e2e84abb80c8c091f5cdeb7d3fd7a
with:
push: ${{ ! startsWith(github.ref, 'refs/heads/dependabot') }}
file: ./Dockerfile
tags: ghcr.io/${{ github.repository_owner }}/omicron:${{ steps.extract_branch.outputs.branch }},ghcr.io/${{ github.repository_owner }}/omicron:${{ github.sha }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
44 changes: 44 additions & 0 deletions Dockerfile
@@ -0,0 +1,44 @@
#
# Dockerfile: build a Docker image for Omicron. This is used by the console for
# prototyping and development. This will not be used for deployment to a real
# rack.
#
# ------------------------------------------------------------------------------
# Cargo Build Stage
# ------------------------------------------------------------------------------

FROM rust:latest as cargo-build

ENV DEBIAN_FRONTEND=noninteractive

WORKDIR /usr/src/omicron

COPY . .

WORKDIR /usr/src/omicron
ENV PATH=/usr/src/omicron/out/cockroachdb/bin:/usr/src/omicron/out/clickhouse:${PATH}
RUN apt-get update && apt-get install -y sudo --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN tools/install_prerequisites.sh -y
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was added vs. the original Dockerfile

RUN cargo build --release

# ------------------------------------------------------------------------------
# Final Stage
# ------------------------------------------------------------------------------

FROM debian:sid-slim

RUN apt-get update && apt-get install -y \
ca-certificates \
libpq5 \
libssl1.1 \
libsqlite3-0 \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*


COPY --from=cargo-build /usr/src/omicron/target/release/nexus /usr/bin/nexus
COPY --from=cargo-build /usr/src/omicron/target/release/omicron-dev /usr/bin/omicron-dev
COPY --from=cargo-build /usr/src/omicron/target/release/omicron-package /usr/bin/omicron-package
COPY --from=cargo-build /usr/src/omicron/target/release/sled-agent-sim /usr/bin/sled-agent-sim

CMD ["sled-agent-sim"]
4 changes: 4 additions & 0 deletions README.adoc
Expand Up @@ -49,6 +49,10 @@ This mode of operation will be used in production.

See: xref:docs/how-to-run.adoc[].

== Docker image

This repo includes a Dockerfile that builds an image containing the Nexus and sled agent. There's a GitHub Actions workflow that builds and publishes the Docker image. This is used by [cli](https://github.com/oxidecomputer/cli) for testing. This is **not** the way Omicron will be deployed on production systems, but it's a useful vehicle for working with it.

== Configuration reference

`nexus` requires a TOML configuration file. There's an example in
Expand Down