diff --git a/g3doc/user_guide/docker-in-gvisor.md b/g3doc/user_guide/docker-in-gvisor.md new file mode 100644 index 000000000..e35266e9f --- /dev/null +++ b/g3doc/user_guide/docker-in-gvisor.md @@ -0,0 +1,73 @@ +# Docker in gVisor + +Docker is a platform designed to help developers build, share, and run container +applications. + +In gVisor, all basic docker commands should function as expected. However, it's +important to note that, currently, only the host network driver is supported. +This means that both 'docker run' and 'docker build' commands must be executed +with the `--network=host` option. + +# How to run Docker in a gVisor container + +First, prepare a container image with pre-installed Docker: + +```shell +$ cd images/basic/docker/ +$ docker build -t docker-in-gvisor . +``` + +Since Docker requires root privileges and a full set of capabilities, a gVisor +sandbox needs to be started in privileged mode: + +```shell +$ docker run --runtime runsc -it --rm --privileged docker-in-gvisor bash +``` + +All following commands have to be executed inside a gVsior sandbox. + +For the Docker daemon to operate correctly, the devices cgroup must be mounted +using the following commands: + +```shell +mount -t tmpfs cgroups /sys/fs/cgroup +mkdir /sys/fs/cgroup/devices +mount -t cgroup -o devices devices /sys/fs/cgroup/devices +``` + +Afterwards, the daemon can be started with the following command: + +```shell +/usr/bin/dockerd --bridge=none --iptables=false --ip6tables=false +``` + +Now, we can build and run Docker containers + +```shell +$ mkdir whalesay && cd whalesay +$ cat > Dockerfile <