Comments (1)
A few assumptions:
- You're going to start out with the Dart official image (that comes from this repo).
- You're trying to get to a minimal container that has just enough libraries to run your Dart app.
- You're going to use a two stage build to firstly compile your AOT binary within the Dart container then copy it into your
FROM scratch
container.
The Dart image doesn't have Sqlite3 there by default. So the library needs to be installed. It's that library that will then be used via dart:ffi
for packages like drift or sqlite3.
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends libsqlite3-0
The library then needs to be copied into /runtime
so that it's there with the other libraries that are needed for an AOT binary to dynamically link to:
RUN set -eux; \
case "$(dpkg --print-architecture)" in \
amd64) \
TRIPLET="x86_64-linux-gnu" ;; \
armhf) \
TRIPLET="arm-linux-gnueabihf" ;; \
arm64) \
TRIPLET="aarch64-linux-gnu" ;; \
*) \
echo "Unsupported architecture" ; \
exit 5;; \
esac; \
FILES="/lib/$TRIPLET/libsqlite3.so.0"; \
for f in $FILES; do \
dir=$(dirname "$f"); \
mkdir -p "/runtime$dir"; \
cp --archive --link --dereference --no-target-directory "$f" "/runtime$f"; \
done
The section above copies liberally from the Dockerfile-debian.template in this repo, which is designed for multiple architectures. If you know your target architecture is fixed then things can be simplified quite a bit by simply copying the single libsqlite3.so.0
shared library file.
The second stage of the Dockerfile then proceeds as normal, copying in the /runtime
, which will now have the sqlite3 library along with libc and the other AOT dependencies:
FROM scratch
COPY --from=build /runtime/ /
NB I've not tested this, so please excuse any typos. I'm pretty sure that the libraries libsqlite3-0.so.0
links to are already present in runtime:
ldd /lib/x86_64-linux-gnu/libsqlite3.so.0
linux-vdso.so.1 (0x00007ffdb45f1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa502bd1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa5029f0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa502e13000)
linux-vdso.so.1
is a virtual shared object rather than a library file on disk.
from dart-docker.
Related Issues (20)
- Reduce size of images that are based on jit snapshots HOT 4
- MIrrors HOT 2
- No linux/arm/v7 image for 2.17.6 HOT 1
- Dart sqlcipher simple HOT 1
- libatomic.so.1 needed in /runtime for RISC-V HOT 1
- error while running the container HOT 1
- Handshake error in dart client using this dart docker image when calling kubernetes api from inside pod HOT 1
- Use newer Debian stable base image than debian:bullseye-slim
- Crash when building linux/amd64 image on arm64 HOT 4
- Upgrade to Debian bookworm HOT 2
- Request sync on DevContainer Feature
- Seg fault when building on Apple Silicon for linux/amd64 target - related to Dart SDK carat syntax in pubspec HOT 6
- Replace deprecated `set-output` command with environment file
- Latest stable SDK still not on DockerHub a week after version.json was bumped here HOT 4
- Automated tests to confirm availability of images on DockerHub HOT 1
- No Armv7 image in 2.17.0 tag on Docker Hub HOT 1
- pub is unavailable on 2.17 HOT 1
- RISC-V image for beta channel HOT 5
- Lag between SDK releases and Dart library image updates HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dart-docker.