-
Notifications
You must be signed in to change notification settings - Fork 19
Docker support #249
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Docker support #249
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#!/bin/sh | ||
|
||
# Use Podman if installed, else use Docker | ||
if hash podman 2> /dev/null | ||
then | ||
DOCKER_COMMAND=podman | ||
else | ||
DOCKER_COMMAND=docker | ||
fi | ||
|
||
$DOCKER_COMMAND build -t alephim/vm-supervisor-dev -f docker/vm_supervisor-dev-docker.dockerfile . | ||
|
||
$DOCKER_COMMAND run -ti --privileged --name=vm_supervisor_docker --rm \ | ||
-v "$(pwd)/runtimes/aleph-docker/:/opt/aleph-vm/runtimes/aleph-docker/:ro" \ | ||
-v "$(pwd)/examples/volumes/docker-data.squashfs:/opt/aleph-vm/examples/volumes/docker-data.squashfs:ro" \ | ||
-v "$(pwd)/examples/example_docker_container:/opt/aleph-vm/examples/example_docker_container:ro" \ | ||
-v "$(pwd)/vm_supervisor:/opt/aleph-vm/vm_supervisor:ro" \ | ||
-v "$(pwd)/firecracker:/opt/aleph-vm/firecracker:ro" \ | ||
--device /dev/kvm \ | ||
-p 4020:4020 \ | ||
alephim/vm-supervisor-dev $@ | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# This is mainly a copy of the installation instructions from [vm_supervisor/README.md] | ||
|
||
FROM debian:bullseye | ||
|
||
RUN apt-get update && apt-get -y upgrade && apt-get install -y \ | ||
sudo acl curl squashfs-tools git \ | ||
python3 python3-aiohttp python3-msgpack python3-pip python3-aiodns python3-aioredis \ | ||
python3-psutil python3-setproctitle python3-sqlalchemy python3-packaging python3-cpuinfo \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
RUN useradd jailman | ||
|
||
RUN mkdir /opt/firecracker | ||
RUN chown $(whoami) /opt/firecracker | ||
RUN curl -fsSL https://github.com/firecracker-microvm/firecracker/releases/download/v1.1.1/firecracker-v1.1.1-x86_64.tgz | tar -xz --directory /opt/firecracker | ||
RUN curl -fsSL -o /opt/firecracker/vmlinux.bin https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/kernels/vmlinux.bin | ||
|
||
# Link binaries on version-agnostic paths: | ||
RUN ln /opt/firecracker/release-*/firecracker-v* /opt/firecracker/firecracker | ||
RUN ln /opt/firecracker/release-*/jailer-v* /opt/firecracker/jailer | ||
|
||
RUN pip3 install typing-extensions 'aleph-message>=0.1.19' | ||
|
||
RUN mkdir -p /var/lib/aleph/vm/jailer | ||
|
||
ENV PYTHONPATH /mnt | ||
|
||
# Networking only works in privileged containers | ||
ENV ALEPH_VM_ALLOW_VM_NETWORKING False | ||
ENV ALEPH_VM_NETWORK_INTERFACE "tap0" | ||
# Jailer does not work in Docker containers | ||
ENV ALEPH_VM_USE_JAILER False | ||
# Use fake test data | ||
ENV ALEPH_VM_FAKE_DATA True | ||
# Allow connections from host | ||
ENV ALEPH_VM_SUPERVISOR_HOST "0.0.0.0" | ||
|
||
# Make it easy to enter this command from a shell script | ||
RUN echo "python3 -m vm_supervisor --print-settings --very-verbose --system-logs --profile -f ./examples/example_docker_container" >> /root/.bash_history | ||
|
||
|
||
ENV BENCHMARK_FAKE_DATA_PROGRAM="/opt/aleph-vm/examples/example_docker_container" | ||
ENV FAKE_DATA_MESSAGE="/opt/aleph-vm/examples/message_from_aleph_docker_runtime.json" | ||
ENV FAKE_DATA_DATA="/opt/aleph-vm/examples/data/" | ||
ENV FAKE_DATA_RUNTIME="/opt/aleph-vm/runtimes/aleph-docker/rootfs.squashfs" | ||
ENV FAKE_DATA_VOLUME="/opt/aleph-vm/examples/volumes/docker-data.squashfs" | ||
|
||
RUN mkdir /opt/aleph-vm/ | ||
COPY ./vm_supervisor /opt/aleph-vm/vm_supervisor | ||
COPY ./firecracker /opt/aleph-vm/firecracker | ||
COPY ./guest_api /opt/aleph-vm/guest_api | ||
COPY ./examples /opt/aleph-vm/examples | ||
COPY ./runtimes /opt/aleph-vm/runtimes | ||
|
||
WORKDIR /opt/aleph-vm | ||
|
||
CMD "bash" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What differs from the main Dockerfile ? |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
#!/bin/sh | ||
docker image ls | ||
docker run --rm -p 8080:8080 amozpay/hello_node | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rename |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
{ | ||
"_id": { | ||
"$oid": "6080402d7f44efefd611dc1e" | ||
}, | ||
"chain": "ETH", | ||
"item_hash": "fake-hash-fake-hash-fake-hash-fake-hash-fake-hash-fake-hash-hash", | ||
"sender": "0x9319Ad3B7A8E0eE24f2E639c40D8eD124C5520Ba", | ||
"type": "PROGRAM", | ||
"channel": "Fun-dApps", | ||
"confirmed": true, | ||
"content": { | ||
"type": "vm-function", | ||
"address": "0x9319Ad3B7A8E0eE24f2E639c40D8eD124C5520Ba", | ||
"allow_amend": false, | ||
"code": { | ||
"encoding": "squashfs", | ||
"entrypoint": "entrypoint.sh", | ||
"ref": "7eb2eca2378ea8855336ed76c8b26219f1cb90234d04441de9cf8cb1c649d003", | ||
"use_latest": false | ||
}, | ||
"variables": { | ||
"VM_CUSTOM_NUMBER": "32", | ||
"DOCKER_MOUNTPOINT": "/opt/docker" | ||
}, | ||
"on": { | ||
"http": true, | ||
"message": [ | ||
{ | ||
"sender": "0xb5F010860b0964090d5414406273E6b3A8726E96", | ||
"channel": "TEST" | ||
}, | ||
{ | ||
"content": { | ||
"ref": "4d4db19afca380fdf06ba7f916153d0f740db9de9eee23ad26ba96a90d8a2920" | ||
} | ||
} | ||
] | ||
}, | ||
"environment": { | ||
"reproducible": true, | ||
"internet": true, | ||
"aleph_api": true, | ||
"shared_cache": true | ||
}, | ||
"resources": { | ||
"vcpus": 1, | ||
"memory": 512, | ||
"seconds": 30 | ||
}, | ||
"runtime": { | ||
"ref": "5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51", | ||
"use_latest": false, | ||
"comment": "Aleph Debian Linux with Docker" | ||
}, | ||
"volumes": [ | ||
{ | ||
"mount": "/opt/docker/metadata", | ||
"ref": "5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51", | ||
"use_latest": false | ||
}, | ||
{ | ||
"mount": "/opt/docker/layers", | ||
"ref": "5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51", | ||
"use_latest": false | ||
}, | ||
{ | ||
"comment": "Working data persisted on the VM supervisor, not available on other nodes", | ||
"mount": "/var/lib/example", | ||
"name": "data", | ||
"persistence": "host", | ||
"size_mib": 5 | ||
} | ||
], | ||
"data": { | ||
"encoding": "zip", | ||
"mount": "/data", | ||
"ref": "7eb2eca2378ea8855336ed76c8b26219f1cb90234d04441de9cf8cb1c649d003", | ||
"use_latest": false | ||
}, | ||
"export": { | ||
"encoding": "zip", | ||
"mount": "/data" | ||
}, | ||
"replaces": "0x9319Ad3B7A8E0eE24f2E639c40D8eD124C5520Ba", | ||
"time": 1619017773.8950517 | ||
}, | ||
"item_content": "{\"type\": \"vm-function\", \"address\": \"0x9319Ad3B7A8E0eE24f2E639c40D8eD124C5520Ba\", \"allow_amend\": false, \"code\": {\"encoding\": \"squashfs\", \"entrypoint\": \"main:app\", \"ref\": \"7eb2eca2378ea8855336ed76c8b26219f1cb90234d04441de9cf8cb1c649d003\", \"use_latest\": false}, \"on\": {\"http\": true, \"message\": [{\"sender\": \"0xB31B787AdA86c6067701d4C0A250c89C7f1f29A5\", \"channel\": \"TEST\"}, {\"content\": {\"ref\": \"4d4db19afca380fdf06ba7f916153d0f740db9de9eee23ad26ba96a90d8a2920\"}}]}, \"environment\": {\"reproducible\": true, \"internet\": true, \"aleph_api\": true, \"shared_cache\": false}, \"resources\": {\"vcpus\": 1, \"memory\": 128, \"seconds\": 30}, \"runtime\": {\"ref\": \"5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51\", \"use_latest\": false, \"comment\": \"Aleph Alpine Linux with Python 3.8\"}, \"volumes\": [{\"mount\": \"/opt/venv\", \"ref\": \"5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51\", \"use_latest\": false}, {\"comment\": \"Working data persisted on the VM supervisor, not available on other nodes\", \"mount\": \"/var/lib/sqlite\", \"name\": \"database\", \"persistence\": \"host\", \"size_mib\": 5}], \"data\": {\"encoding\": \"zip\", \"mount\": \"/data\", \"ref\": \"7eb2eca2378ea8855336ed76c8b26219f1cb90234d04441de9cf8cb1c649d003\", \"use_latest\": false}, \"export\": {\"encoding\": \"zip\", \"mount\": \"/data\"}, \"replaces\": \"0x9319Ad3B7A8E0eE24f2E639c40D8eD124C5520Ba\", \"time\": 1619017773.8950517}", | ||
"item_type": "inline", | ||
"signature": "0x372da8230552b8c3e65c05b31a0ff3a24666d66c575f8e11019f62579bf48c2b7fe2f0bbe907a2a5bf8050989cdaf8a59ff8a1cbcafcdef0656c54279b4aa0c71b", | ||
"size": 749, | ||
"time": 1619017773.8950577, | ||
"confirmations": [ | ||
{ | ||
"chain": "ETH", | ||
"height": 12284734, | ||
"hash": "0x67f2f3cde5e94e70615c92629c70d22dc959a118f46e9411b29659c2fce87cdc" | ||
} | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,5 +10,7 @@ else | |
DOCKER_COMMAND=docker | ||
fi | ||
|
||
echo DOCKER_COMMAND=$DOCKER_COMMAND | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove this |
||
$DOCKER_COMMAND build -t aleph-vm-build-squashfs . | ||
$DOCKER_COMMAND run --rm -v "$(pwd)":/mnt aleph-vm-build-squashfs |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
#!/bin/sh | ||
|
||
export PYTHONPATH=$(pwd) | ||
|
||
export ALEPH_VM_ALLOW_VM_NETWORKING=False | ||
export ALEPH_VM_NETWORK_INTERFACE=tap0 | ||
export ALEPH_VM_USE_JAILER=False | ||
export ALEPH_VM_FAKE_DATA=True | ||
export ALEPH_VM_SUPERVISOR_HOST=0.0.0.0 | ||
|
||
export BENCHMARK_FAKE_DATA_PROGRAM=$(pwd)/examples/example_docker_container | ||
export FAKE_DATA_MESSAGE=$(pwd)/examples/message_from_aleph_docker_runtime.json | ||
export FAKE_DATA_DATA=$(pwd)/examples/data/ | ||
export FAKE_DATA_RUNTIME=$(pwd)/runtimes/aleph-docker/rootfs.squashfs | ||
export FAKE_DATA_VOLUME=$(pwd)/examples/volumes/docker/layers:/opt/docker/layers,$(pwd)/examples/volumes/docker/metadata:/opt/docker/metadata | ||
|
||
|
||
python3 -m vm_supervisor --print-settings --very-verbose --system-logs --profile -f ./examples/example_docker_container |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we merge this in the main script or make it explicit that this is for Docker ?