Add docker.

This commit is contained in:
Tom Alexander 2023-08-18 22:26:42 -04:00
parent e96c39e3e0
commit 0d6621d389
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
4 changed files with 97 additions and 1 deletions

6
.dockerignore Normal file
View File

@ -0,0 +1,6 @@
**/.git
target/
docker/
LICENSE
readme/
README.md

View File

@ -4,4 +4,28 @@ This repository contains a slapdash tool to make visualizing the abstract syntax
![Screenshot showing the interface to the org-mode abstract syntax tree investigation tool.](readme/screenshot.png?raw=true "Org-mode investigation tool interface")
## Running
TODO
Running in docker is the recommended way to run this. It creates a consistent working environment, without impacting (or requiring you to install) emacs, org-mode, or rust.
### Docker
First we need to build the docker container. On the first run, this will pull the emacs and org-mode source code so this build will take a while the first time. After that, subsequent builds should be fast because docker caches the layers.
```bash
# from the root of this repository:
make --directory=docker
```
Next we need to launch the server:
```bash
docker run --rm --publish 127.0.0.1:3000:3000/tcp org-investigation
```
This launches a server listening on port 3000, so pop open your browser to http://127.0.0.1:3000/ to access the web interface.
### No docker
You will need a fully functional rust setup with nightly installed (due to the use of exit_status_error). Then from the root of this repo you can launch the server by running:
```bash
cargo run --release
```
It will use your installed version of emacs and org-mode which may differ from what the docker users are using.
This launches a server listening on port 3000, so pop open your browser to http://127.0.0.1:3000/ to access the web interface.

39
docker/Dockerfile Normal file
View File

@ -0,0 +1,39 @@
FROM alpine:3.17 AS build
RUN apk add --no-cache build-base musl-dev git autoconf make texinfo gnutls-dev ncurses-dev gawk
FROM build AS build-emacs
RUN git clone --depth 1 --branch emacs-29.1 https://git.savannah.gnu.org/git/emacs.git /root/emacs
WORKDIR /root/emacs
RUN mkdir /root/dist
RUN ./autogen.sh
RUN ./configure --prefix /usr --without-x --without-sound
RUN make
RUN make DESTDIR="/root/dist" install
FROM build AS build-org-mode
COPY --from=build-emacs /root/dist/ /
RUN mkdir /root/dist
RUN mkdir /root/org-mode && git -C /root/org-mode init --initial-branch=main && git -C /root/org-mode remote add origin https://git.savannah.gnu.org/git/emacs/org-mode.git && git -C /root/org-mode fetch origin cc435cba71a99ee7b12676be3b6e1211a9cb7285 && git -C /root/org-mode checkout FETCH_HEAD
WORKDIR /root/org-mode
RUN make compile
RUN make DESTDIR="/root/dist" install
FROM rustlang/rust:nightly-alpine3.17 AS build-org-investigation
RUN apk add --no-cache musl-dev
RUN mkdir /root/org-investigation
WORKDIR /root/org-investigation
COPY . .
RUN CARGO_TARGET_DIR=/target cargo build --release
FROM alpine:3.17 AS run
RUN apk add --no-cache ncurses gnutls
COPY --from=build-emacs /root/dist/ /
COPY --from=build-org-mode /root/dist/ /
COPY --from=build-org-investigation /target/release/org_ownership_investigation /usr/bin/
COPY static /opt/org-investigation/static
WORKDIR /opt/org-investigation
CMD ["/usr/bin/org_ownership_investigation"]

27
docker/Makefile Normal file
View File

@ -0,0 +1,27 @@
IMAGE_NAME:=org-investigation
# REMOTE_REPO:=harbor.fizz.buzz/private
.PHONY: all
all: build push
.PHONY: build
build:
docker build -t $(IMAGE_NAME) -f Dockerfile ../
.PHONY: push
push:
ifdef REMOTE_REPO
docker tag $(IMAGE_NAME) $(REMOTE_REPO)/$(IMAGE_NAME)
docker push $(REMOTE_REPO)/$(IMAGE_NAME)
else
@echo "REMOTE_REPO not defined, not pushing to a remote repo."
endif
.PHONY: clean
clean:
docker rmi $(IMAGE_NAME)
ifdef REMOTE_REPO
docker rmi $(REMOTE_REPO)/$(IMAGE_NAME)
else
@echo "REMOTE_REPO not defined, not removing from remote repo."
endif