autobuild icon indicating copy to clipboard operation
autobuild copied to clipboard

Earthly Auto Build Repo

Earthly Auto Build Repo

This repo contains the Earthfile of some useful images under the Docker Hub mritd user.

Status Docker Hub
mritd/alpine https://hub.docker.com/r/mritd/alpine
mritd/caddy https://hub.docker.com/r/mritd/caddy
mritd/confluence https://hub.docker.com/r/mritd/confluence
mritd/ddns https://hub.docker.com/r/mritd/ddns
mritd/demo https://hub.docker.com/r/mritd/demo
mritd/derper https://hub.docker.com/r/mritd/derper
mritd/idgen https://hub.docker.com/r/mritd/idgen
mritd/jira https://hub.docker.com/r/mritd/jira
mritd/nginx-singlepage https://hub.docker.com/r/mritd/nginx-singlepage
mritd/nodebuild https://hub.docker.com/r/mritd/nodebuild
mritd/openjdk https://hub.docker.com/r/mritd/openjdk8
mritd/poetbot https://hub.docker.com/r/mritd/poetbot
mritd/s2h https://hub.docker.com/r/mritd/s2h
mritd/ssh https://hub.docker.com/r/mritd/ssh
mritd/derper https://hub.docker.com/r/mritd/derper
mritd/bandwagonmon https://hub.docker.com/r/mritd/bandwagonmon
mritd/notibot https://hub.docker.com/r/mritd/notibot
mritd/open-vm-tools https://hub.docker.com/r/mritd/open-vm-tools
mritd/container-cli https://hub.docker.com/r/mritd/container-cli
mritd/dnsacme https://hub.docker.com/r/mritd/dnsacme
mritd/aria2 https://hub.docker.com/r/mritd/aria2
mritd/makeself https://hub.docker.com/r/mritd/makeself
mritd/tuic-server https://hub.docker.com/r/mritd/tuic-server
mritd/snell https://hub.docker.com/r/mritd/snell
mritd/ci-runner https://hub.docker.com/r/mritd/ci-runner

Why not use Dockerfile?

In the past few years, I have to admit that Dockerfile is great; but as the number of Dockerfile increases, I have to do a lot of repetitive work to solve some problems.

For example, "unify the basic image version"、"fix compatibility issues for specific languages"、"cross compile for each platform", etc...

Well, I can write some "magic scripts" to be lazy; but this will cause the production-level Docker image to become unmaintainable, just like a messy network cable...

Now, Earthly has solved this problem; I unified the specific language version、the operating system at compile time、the basic runtime environment、and some general fixes. Also use GitHub Action for reliable cross-compilation to generate multi-arch images. It all got better 🤪.

Directory Structure

.
├── caddy                       # The directory name is the target image
│   └── Earthfile
├── openjdk
│   ├── cgradle                 # If the build image needs some other files, they will also be saved in this directory
│   ├── cmvn
│   └── Earthfile               # Earthfile is a file similar to Dockerfile, it is modular, it is very convenient to reuse code
│
│
├── udcs                        # udcs (user-defined commands) is a special directory where most common Earthfiles are stored
│   ├── Earthfile               # udcs/Earthfile stores general commands that do not depend on system os and language
│   ├── image                   # udcs/image stores the basic runtime or compile image of most programming languages
│   ├── language                # udcs/language stores special commands for specific languages
│   └── os                      # udcs/os stores special commands for specific system os
│
│
├── .github
│   └── workflows                   # The workflows directory stores job definitions for each docker image automated build
│       ├── alpine.yaml
│       ├── caddy.yaml
│       ├── confluence.yaml
│       ├── ddns.yaml
│       ├── demo.yaml
│       ├── idgen.yaml
│       ├── jira.yaml
│       ├── nginx-singlepage.yaml
│       ├── nodebuild.yaml
│       ├── openjdk.yaml
│       ├── poetbot.yaml
│       ├── s2h.yaml
│       └── ssh.yaml
└── LICENSE