Virtual DSM for Docker
[![build_img]][build_url]
[![gh_last_release_svg]][dsm-docker-hub]
[![Docker Image Size]][dsm-docker-hub]
[![Docker Pulls Count]][dsm-docker-hub]
[build_url]: https://github.com/kroese/virtual-dsm/actions
[dsm-docker-hub]: https://hub.docker.com/r/kroese/virtual-dsm
[build_img]: https://github.com/kroese/virtual-dsm/actions/workflows/build.yml/badge.svg
[Docker Image Size]: https://img.shields.io/docker/image-size/kroese/virtual-dsm/latest
[Docker Pulls Count]: https://img.shields.io/docker/pulls/kroese/virtual-dsm.svg?style=flat
[gh_last_release_svg]: https://img.shields.io/docker/v/kroese/virtual-dsm?arch=amd64&sort=date
Virtual DSM in a docker container.
## Features
- KVM acceleration
- Graceful shutdown
- Upgrades supported
## Usage
Via `docker-compose.yml`
```yaml
version: "3"
services:
dsm:
container_name: dsm
image: kroese/virtual-dsm:latest
environment:
DISK_SIZE: "16G"
devices:
- /dev/kvm
cap_add:
- NET_ADMIN
ports:
- 5000:5000
- 5001:5001
restart: on-failure
stop_grace_period: 1m
```
Via `docker run`
```bash
docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 60 kroese/virtual-dsm:latest
```
## FAQ
* ### How do I check if my system supports KVM?
To check if your system supports KVM run these commands:
```
sudo apt install cpu-checker
sudo kvm-ok
```
If `kvm-ok` returns an error stating KVM acceleration cannot be used, you may need to change your BIOS settings.
* ### How do I change the size of the virtual disk? ###
By default it is 16GB, but to increase it you can modify the `DISK_SIZE` setting in your compose file:
```
environment:
DISK_SIZE: "16G"
```
To resize the disk to a capacity of 8 terabyte you would use a value of `"8T"` for example.
* ### How do I change the location of the virtual disk? ###
By default it resides inside a docker volume, but to store it somewhere else you can add these lines to your compose file:
```
volumes:
- /home/user/data:/storage
```
Just replace `/home/user/data` with the path to the folder you want to use for storage.
* ### How do I change the space reserved by the virtual disk? ###
By default the total space for the disk is reserved in advance. If you want to only reserve the space that is actually used by the disk, add these lines:
```
environment:
ALLOCATE: "N"
```
This might lower performance a bit, since the image file will need to grow every time new data is added to it.
* ### How do I change the amount of CPU/RAM? ###
By default a single core and 512MB of RAM is allocated to the container.
To increase this you can add the following environment variabeles:
```
environment:
CPU_CORES: "4"
RAM_SIZE: "2048M"
```
* ### How do I give the container its own IP address?
By default the container uses bridge networking, and uses the same IP as the docker host.
If you want to give it a seperate IP address, create a macvlan network.
For example:
```
$ docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.100/28 \
-o parent=eth0 vdsm
```
Modify these values to match your local subnet.
Now change the containers configuration in your compose file:
```
networks:
vdsm:
ipv4_address: 192.168.0.100
```
And add the network to the very bottom of your compose file:
```
networks:
vdsm:
external: true
```
This also has the advantage that you don't need to do any portmapping anymore, because all ports will be fully exposed this way.
NOTE: Docker does not allow communication between the host and the container in a macvlan network. There are some ways to fix that if needed, but they go beyond the scope of this FAQ.
* ### How can the container get an IP address via DHCP? ###
First follow the steps to configure the container for macvlan (see above), and then add the following lines to your compose file:
```
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c 510:* rwm'
```
NOTE: The exact cgroup rule may be different than `510` depending on your system, but the correct rule number will be printed to the logfile in case of error.
* ### How do I install a specific version of vDSM? ###
By default it installs vDSM 7.2, but if you want to use an older version you can add its URL to your compose file:
```
environment:
URL: "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_VirtualDSM_42962.pat"
```
You can also switch back and forth between versions this way without loosing your file data.
* ### What are the differences compared to standard DSM? ###
There are only three minor differences: the Virtual Machine Manager package is not available, Surveillance Station does not include any free licenses, and logging in to your Synology account is not supported.
## Acknowledgments
Based on an [article](https://jxcn.org/2022/04/vdsm-first-try/) by JXCN.
## Disclaimer
Only run this container on original Synology hardware, any other use is not permitted and might not be legal.