This post describes how to develop on a relatively weak MacBook Air (without the M1 chip ;->) with Mac OS and let the containers run natively on a relatively strong bare-metal Intel NUC with Manjaro Linux (connected via the
DOCKER_HOST ENV VAR) on the same local network.
More technically speaking this means to have an
NFS export on your Mac OS (e.g. exporting your application folders in which you are working with your code editor) and on the other side an
NFS mount on your Linux machine with the Docker daemon there running the actual containers. Then use for
docker run (
DOCKER_HOST ENV VAR in this
shell set to Manjaro host address or connection string) the
-v flag for a so-called
bind mount (which is in fact an
NFS mount in the Linux Docker Host passed in from the Mac OS
NFS export) so that your Mac folder - with its ongoing changes - is immediately visible in the Docker container on the Linux machine - here the Intel NUC with Manjaro as kind of an home server (although it is as well a desktop system).
As it turns out it is surprisingly easy to use NFS on (FreeBSD based) Mac OS - also without the so-called NFS Manager (which is nevertheless a great program ... and it of course can be used as well if you want e.g. more control, comfort or volume).
Mac OS (permanent export):
# create an export sudo nano /etc/exports # add something like the following /Users/homer/repos/Applications -mapall=-2:-2 -ro localhost nuc # restart sudo nfsd restart # optionally check the result nfsd checkexports showmount -e # example result Exports list on localhost: /Users/homer/repos/Applications localhost nuc
Manjaro Linux (manual temporary mount):
# based on https://wiki.archlinux.org/index.php/NFS#Manual_mounting # see there also for more permanent solutions, e.g. via fstab # (but consider well which system will always be on/available) sudo pacman -Syu sudo pacman -Syu nfs-utils # test if export is reachable showmount -e 192.168.178.30 # on Ubuntu also '-a' worked # example result Export list for 192.168.178.30: /Users/homer/repos/Applications localhost,nuc # create a mount point and manually mount it according to your needs sudo mkdir /mnt/Applications sudo mount -t nfs -o proto=tcp,port=2049 192.168.178.30:/Users/homer/repos/Applications /mnt/Applications # check if Mac folders are visible in Linux ls -al /mnt/Applications/
Docker Run Example
# e.g. mount your 'app1' folder to '/opt/app1' within the container docker run <other_options> -v /mnt/Applications/app1:/opt/app1 <image>:<tag> # flow for e.g. app1 directory (originally located on Mac OS) # Mac: # /Users/homer/repos/Applications/app1 # ↓ # Manjaro (Docker Host): # /mnt/Applications/app1 # ↓ # Docker Container: # /opt/app1
Of course this might be a very special setup: The far more usual setup for using (Docker) containers in software development is of course to have the Docker daemon running "somehow locally" on your development machine - either on Linux natively or on Mac or Windows inside a virtual machine. However, there are cases where you might want to use also for software development a remote machine - e.g. for performance reasons on a stronger bare-metal machine or to have a native Docker container experience without the virtual machine in between.
For all people who would like to use such a "remote" (on the same local network) machine as e.g. a bare-metal home server with native Linux and Docker this blog post proposes (one possible) solution to the problem.
Fun fact on the side: Here it is totally twisted around regarding terminology on what is the
server and what is the
client: For Docker Manjaro is the
server as it provides the Docker daemon which is used in Mac OS - via the
DOCKER_HOST environment variable. For NFS it is Mac OS which is the
server as it provides the NFS export which is then used by Manjaro as
client. And from the container perspective it is then Manjaro which is the
server for the