|
1 | 1 | Building Docker Image
|
2 | 2 | =====================
|
3 | 3 |
|
4 |
| -Create the ``Dockerfile`` and you can build an image. |
| 4 | +Example Dockerfile for building a multi-platform image: |
5 | 5 |
|
6 | 6 | .. code-block:: dockerfile
|
7 | 7 |
|
8 | 8 | # syntax=docker/dockerfile:1.4
|
9 |
| - FROM --platform=$BUILDPLATFORM alpine:latest |
10 | 9 |
|
| 10 | + # Stage 1: UI Builder |
| 11 | + FROM --platform=$BUILDPLATFORM node:18-alpine as ui-builder |
| 12 | +
|
| 13 | + WORKDIR /app |
| 14 | + COPY ui/ ./ |
| 15 | +
|
| 16 | + RUN rm -rf node_modules; \ |
| 17 | + yarn install --frozen-lockfile --non-interactive; \ |
| 18 | + yarn build |
| 19 | +
|
| 20 | + # Stage 2: Go Builder |
| 21 | + FROM --platform=$TARGETPLATFORM golang:1.22-alpine as go-builder |
| 22 | +
|
| 23 | + ARG LDFLAGS |
| 24 | + ARG TARGETOS |
11 | 25 | ARG TARGETARCH
|
12 |
| - ARG VERSION= |
13 |
| - ARG RELEASES_URL="https://github.com/dagu-org/dagu/releases" |
| 26 | +
|
| 27 | + WORKDIR /app |
| 28 | + COPY . . |
| 29 | +
|
| 30 | + RUN go mod download && rm -rf frontend/assets |
| 31 | + COPY --from=ui-builder /app/dist/ ./internal/frontend/assets/ |
| 32 | +
|
| 33 | + RUN GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags="${LDFLAGS}" -o ./bin/dagu . |
| 34 | +
|
| 35 | + # Stage 3: Final Image |
| 36 | + FROM --platform=$TARGETPLATFORM alpine:latest |
14 | 37 |
|
15 | 38 | ARG USER="dagu"
|
16 | 39 | ARG USER_UID=1000
|
17 | 40 | ARG USER_GID=$USER_UID
|
18 | 41 |
|
19 |
| - EXPOSE 8080 |
| 42 | + # Create user and set permissions |
| 43 | + RUN apk update; \ |
| 44 | + apk add --no-cache sudo tzdata; \ |
| 45 | + addgroup -g ${USER_GID} ${USER}; \ |
| 46 | + adduser ${USER} -h /home/${USER} -u ${USER_UID} -G ${USER} -D -s /bin/ash; \ |
| 47 | + echo ${USER} ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/${USER}; \ |
| 48 | + chmod 0440 /etc/sudoers.d/${USER}; \ |
| 49 | + mkdir -p .config/dagu/dags; \ |
| 50 | + chown -R ${USER}:${USER} /home/${USER}; |
20 | 51 |
|
21 |
| - RUN <<EOF |
22 |
| - #User and permissions setup |
23 |
| - apk update |
24 |
| - apk add --no-cache sudo tzdata |
25 |
| - addgroup -g ${USER_GID} ${USER} |
26 |
| - adduser ${USER} -h /home/${USER} -u ${USER_UID} -G ${USER} -D -s /bin/ash |
27 |
| - echo ${USER} ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/${USER} |
28 |
| - chmod 0440 /etc/sudoers.d/${USER} |
29 |
| - EOF |
| 52 | + COPY --from=go-builder /app/bin/dagu /usr/local/bin/ |
| 53 | +
|
| 54 | + USER ${USER} |
| 55 | + WORKDIR /home/${USER} |
30 | 56 |
|
31 |
| - USER dagu |
32 |
| - WORKDIR /home/dagu |
33 |
| - RUN <<EOF |
34 |
| - #dagu binary setup |
35 |
| - if [ "${TARGETARCH}" == "amd64" ]; then |
36 |
| - arch="x86_64"; |
37 |
| - else |
38 |
| - arch="${TARGETARCH}" |
39 |
| - fi |
40 |
| - export TARGET_FILE="dagu_${VERSION}_Linux_${arch}.tar.gz" |
41 |
| - wget ${RELEASES_URL}/download/v${VERSION}/${TARGET_FILE} |
42 |
| - tar -xf ${TARGET_FILE} && rm *.tar.gz |
43 |
| - sudo mv dagu /usr/local/bin/ |
44 |
| - mkdir .dagu |
| 57 | + # Add the hello_world.yaml file |
| 58 | + COPY --chown=${USER}:${USER} <<EOF .config/dagu/dags/hello_world.yaml |
| 59 | + schedule: "* * * * *" |
| 60 | + steps: |
| 61 | + - name: hello world |
| 62 | + command: sh |
| 63 | + script: | |
| 64 | + echo "Hello, world!" |
45 | 65 | EOF
|
46 | 66 |
|
47 | 67 | ENV DAGU_HOST=0.0.0.0
|
48 | 68 | ENV DAGU_PORT=8080
|
| 69 | + ENV DAGU_TZ="Etc/UTC" |
49 | 70 |
|
50 |
| - CMD dagu server |
| 71 | + EXPOSE 8080 |
51 | 72 |
|
52 |
| -For example:: |
| 73 | + CMD ["dagu", "start-all"] |
53 | 74 |
|
54 |
| - DAGU_VERSION=<X.X.X> |
55 |
| - docker build -t dagu:${DAGU_VERSION} \ |
56 |
| - --build-arg VERSION=${DAGU_VERSION} \ |
57 |
| - --no-cache . |
|
0 commit comments