sync-stat is an NPX CLI toolkit that offers an alternative to Docker Bind Mounts that is on par with Bind mounts on Linux Based FSs in terms of performance for MacOS.(Windows NTFS support is comming soon)
Docker with bind mounts can really cause a major performance penalty in MacOS (APPFS) and windows (NTFS)
Windows has WSL so it's not really effected but it would be nice if it would work as fast as bind mounts in linux in NTFS
sync-stat also offers some other options that docker cp / bind mounts do not offer. such as the ability to set an explicit user group and mode to the directory
npm i sync-stat
create a YAML file named sync-compose.yaml
at the root directory of your project
version: 1
containers: #Array
- name-of-container: #Array - must be defined in docker-compose or name container on start
volumes: # Bind Mounts - Array
- volume: # Item - config for each bind
profile: local # profile names will group volumes, can use run <profilename> to activate only the volumes in the group. if empty it will be activated too.
from: app/ # From location relative to <ProjectRoot> => app/ || does not support ./app yet
to: /var/www/html/ # to location inside docker container
mode: 775 # Mode to write files
owner: www-data:www-data # owner to write files as
cmd: #Run the Following commands on start, this only runs 1 time
- npm install
- composer install
ignore: #ignore these directories when syncing
- node_modules/
replace: # replace these strings when copying
- 'localhost:mysql-db'
database:
driver: mysql # Currently only mysql is supported
profile: staging # Profiles
method: export # [ export | dump ]
file: /path/to/dump.sql #[ ./relative | /absolute ]/path/to/dump.sql . will only be used when method is in export
server: # externel server config
database_user: user
database_name: dbname
database_pass: pass
host: server.name
port: 3306
local: # local server config. external servers can be used too
provision: true # drop db if it exists, create if not exist. needs root password
database_user: user
database_name: dbname
database_pass: pass
root_password: root_password # only used for provision function
host: localhost
port: 3306
docker-compose.yml
version: '3.9'
services:
wordpress:
container_name: mytest-container
image: some-image #REPLACE
volumes:
- ./app:/var/www/html # (IMPORTANT!) REMOVE THIS. sync-stat will Automaticall do this
# MOUNT CANNOT MATCH THE ONE IN SYNC-COMPOSE
# IF YOU DONT REMOVE THAT LINE, IT WILL CAUSE AN ERROR.
ports:
- '8000:80'
## application is placed at /var/www/html
sync-compose.yaml
version: 1
containers:
- mytest-container:
volumes:
- volume:
profile: local
from: app/
to: /var/www/html/
mode: 775
owner: www-data:www-data
cmd:
- echo hi
ignore:
- node_modules/
replace:
- 'string:string'
make sure to name the container with matching names defined in the sync-compose.json
Once Containers are online run the following in the root directory
npx syncstat run
running profiles
npx syncstat run <profilename>
when using run <profilename>
, only volumes that match the profile name will be added. volumes without profile names will be added as well.
npx syncstat db
or with profiles
npx syncstat db <profile>