Skip to content

Commit 71d195b

Browse files
ensi321nflaig
andauthored
feat: add Dockerfile.dev (#7496)
We have shifted our local testing from running Lodestar binary to using Kurtosis which requires locally built docker image. The current Dockerfile is optimized for production release and the build time is too long for rapid iteration during testing. Adding Dockerfile.dev which is a stripped down version of Dockerfile and it - minimizes number of installs and builds - ~~does not write git data~~ - faster image building - larger image size by not pruning unnecessary fs - is recommended to build and run image locally Following are the comparison of Dockerfile and Dockerfile.dev on my local machine fresh/uncached. It shows ~60% or 8 minute reduction in build time. Dockerfile: ``` NC@Chainsafe % docker build -f Dockerfile -t ensi321/lodestar:production . [+] Building 825.7s (16/16) FINISHED docker:desktop-linux => [internal] load .dockerignore 0.1s => => transferring context: 1.14kB 0.0s => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 2.13kB 0.0s => [internal] load metadata for docker.io/library/node:22-slim 5.2s => [auth] library/node:pull token for registry-1.docker.io 0.0s => [build_src 1/6] FROM docker.io/library/node:22-slim@sha256:0477b569943edd0f0aa24e7881a4d9cba8c23e860802a6b 16.8s => => resolve docker.io/library/node:22-slim@sha256:0477b569943edd0f0aa24e7881a4d9cba8c23e860802a6b64bc4f44852 0.0s => => sha256:dd29906cc036aabbb7aa0a01f781531434e4fed58eae6cf90364be481e7953c4 47.98MB / 47.98MB 8.3s => => sha256:0477b569943edd0f0aa24e7881a4d9cba8c23e860802a6b64bc4f4485240af11 6.49kB / 6.49kB 0.0s => => sha256:0576f7912bf105a725a9f03fe84f0db764e15144c15a729752a3c3cbf7da5408 1.93kB / 1.93kB 0.0s => => sha256:491218b2b27a64456cd038200e1b7266017b24d533b461618891b178acf039b1 6.56kB / 6.56kB 0.0s => => sha256:4d2547c084994a809c138e688fbe4ee14eedbc6e2defc5b1c680edd16e291473 28.04MB / 28.04MB 8.8s => => sha256:2476b939e8425ff9be0988aab8c0840cd3dd98bd6d23be088bbc335515cb4b5d 3.31kB / 3.31kB 2.3s => => sha256:7a592a8c9f904dfcafed04631b7ca268b545491cfbdc3f076e673eab37864cc0 1.71MB / 1.71MB 6.1s => => sha256:86b77aeb969a46771ef5a94f50ae7e724c7eea48de69f3de4af37c0e4c12445f 448B / 448B 7.4s => => extracting sha256:4d2547c084994a809c138e688fbe4ee14eedbc6e2defc5b1c680edd16e291473 3.2s => => extracting sha256:2476b939e8425ff9be0988aab8c0840cd3dd98bd6d23be088bbc335515cb4b5d 0.0s => => extracting sha256:dd29906cc036aabbb7aa0a01f781531434e4fed58eae6cf90364be481e7953c4 3.8s => => extracting sha256:7a592a8c9f904dfcafed04631b7ca268b545491cfbdc3f076e673eab37864cc0 0.2s => => extracting sha256:86b77aeb969a46771ef5a94f50ae7e724c7eea48de69f3de4af37c0e4c12445f 0.0s => [internal] load build context 47.6s => => transferring context: 1.44GB 46.3s => [build_src 2/6] WORKDIR /usr/app 1.0s => [build_src 3/6] RUN apt-get update && apt-get install -y g++ make python3 python3-setuptools && apt-get cl 36.0s => [build_src 4/6] COPY . . 28.6s => [build_src 5/6] RUN yarn install --non-interactive --frozen-lockfile && yarn build && yarn install -- 302.1s => [build_src 6/6] RUN cd packages/cli && GIT_COMMIT=${COMMIT} yarn write-git-data 2.0s => [build_deps 4/6] COPY --from=build_src /usr/app . 45.3s => [build_deps 5/6] RUN yarn install --non-interactive --frozen-lockfile --production --force 216.8s => [build_deps 6/6] RUN cd node_modules/classic-level && yarn rebuild 14.1s => [stage-2 3/3] COPY --from=build_deps /usr/app . 50.2s => exporting to image 30.9s => => exporting layers 30.7s => => writing image sha256:e9c39c3da9512ff3b4c9e04fd13048b929a2756fe9a540d5acd96152275132cd 0.1s => => naming to docker.io/ensi321/lodestar:production 0.0s NC@Chainsafe lodestar % docker image list ensi321/lodestar production e9c39c3da951 46 seconds ago 2.07GB ``` Dockerfile.dev: ``` NC@Chainsafe lodestar % docker build -f Dockerfile.dev -t ensi321/lodestar:dev_arm . [+] Building 282.2s (9/9) FINISHED docker:desktop-linux => [internal] load build definition from Dockerfile.dev 0.1s => => transferring dockerfile: 742B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 1.14kB 0.0s => [internal] load metadata for docker.io/library/node:22 1.8s => [1/4] FROM docker.io/library/node:22@sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b9 0.0s => [internal] load build context 26.4s => => transferring context: 1.44GB 25.9s => CACHED [2/4] WORKDIR /usr/app 0.0s => [3/4] COPY . . 19.0s => [4/4] RUN yarn install --non-interactive && yarn build 201.9s => exporting to image 32.0s => => exporting layers 31.8s => => writing image sha256:e36e5ddbf90842804a0473d9373beecad7da3295ebb6b9ddd88e64214a55102e 0.0s => => naming to docker.io/test/test:0.0.1 0.1s NC@Chainsafe lodestar % docker image list REPOSITORY TAG IMAGE ID CREATED SIZE ensi321/lodestar dev_arm e36e5ddbf908 About a minute ago 6.24GB ``` --------- Co-authored-by: Nico Flaig <nflaig@protonmail.com>
1 parent ca29dbb commit 71d195b

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

.dockerignore

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ prometheus.yml
2626

2727
# Docker
2828
Dockerfile
29+
Dockerfile.dev
2930
docker-compose.yml
3031

3132
# Tests

Dockerfile.dev

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Dockerfile.dev is a stripped down version of Dockerfile that is used for development purposes.
2+
# It minimizes number of installs and builds to speed up the development process.
3+
# Run this on local host only.
4+
# Generated image is larger than production image. Do not use this for production.
5+
6+
FROM --platform=${BUILDPLATFORM:-amd64} node:22 AS build_dev
7+
ARG COMMIT
8+
9+
WORKDIR /usr/app
10+
11+
COPY . .
12+
13+
RUN yarn install --non-interactive && yarn build
14+
15+
RUN cd packages/cli && GIT_COMMIT=${COMMIT} yarn write-git-data
16+
17+
ENV NODE_OPTIONS=--max-old-space-size=8192
18+
19+
ENTRYPOINT ["node", "./packages/cli/bin/lodestar"]

0 commit comments

Comments
 (0)