sadaszewski 0412a707c1 | 4 anni fa | |
---|---|---|
example | 4 anni fa | |
focker | 4 anni fa | |
scripts | 4 anni fa | |
.gitignore | 4 anni fa | |
README.md | 4 anni fa | |
requirements.txt | 4 anni fa | |
setup.py | 4 anni fa |
Focker is a FreeBSD image orchestration tool in the vein of Docker.
In order to use Focker you need a ZFS pool available in your FreeBSD installation.
Run:
git clone https://github.com/sadaszewski/focker.git
cd focker/
python setup.py install
or (if you want an uninstaller):
git clone https://github.com/sadaszewski/focker.git
cd focker/
python setup.py sdist
pip install dist/focker-0.9.tgz
Upon first execution of the focker
command, Focker will automatically create the necessary directories and ZFS datasets. You just need to exclude the unlikely case that you are already using /focker in your filesystem hierarchy. The layout after initialization will look the following:
/focker
/focker/images
/focker/jails
/focker/volumes
images
, jails
, and volumes
have corresponding ZFS datasets with canmount=off
so that they serve as mountpoint anchors for child entries.
To bootstrap the images system you need to install FreeBSD in jail mode to a ZFS dataset placed in /focker/images and provide two user-defined properties - focker:sha256
and focker:tags
. One way to achieve this would be the following:
TAGS="freebsd-latest freebsd-$(freebsd-version | cut -d'-' -f1)"
VERSION="FreeBSD $(freebsd-version)"
SHA256=$(echo -n ${VERSION} | sha256)
NAME=${SHA256:0:7}
zfs create -o focker:sha256=${SHA256} -o focker:tags="${TAGS}" zroot/focker/images/${NAME}
bsdinstall jail /focker/images/${NAME}
zfs set readonly=on zroot/focker/images/${NAME}
zfs snapshot zroot/focker/images/${NAME}@1
At this point, Focker is ready to use.
focker
command syntaxThe focker
command is the single entrypoint to all of the Focker's functionality. The overview of its syntax is presented below as a tree where the focker
command is the root, the first level of descendants represents the choice of Level 1 mode (image
, jail
, volume
or compose
), the second level - the Level 2 mode (dependent on L1 mode) and the final third level lists required and optional arguments specific to the given combination of L1/L2 modes.
focker
|- image|img|im|i
| |- build|b
| | |- FOCKER_DIR
| | `- --tags|-t TAG [...TAG]
| |- tag|t
| | |- REFERENCE
| | `- TAG [...TAG]
| |- untag|u
| | `- TAG [...TAG]
| |- list|ls|l
| | `- --full-sha256|-f
| |- prune|p
| `- remove|r
| |- REFERENCE
| `- --remove-dependents|-R
|- jail|j
| |- create|c
| | |- IMAGE
| | |- --command|-c COMMAND (default: /bin/sh)
| | |- --env|-e VAR1:VALUE1 [...VARN:VALUEN]
| | |- --mounts|-m FROM1:ON1 [...FROMN:ONN]
| | `- --hostname|-n HOSTNAME
| |- start|s
| | `- REFERENCE
| |- stop|S
| | `- REFERENCE
| |- remove|r
| | `- REFERENCE
| |- exec|e
| | |- REFERENCE
| | `- [...COMMAND]
| |- oneshot|o
| | `- IMAGE
| | `- --env|-e VAR1:VALUE1 [...VARN:VALUEN]
| | `- --mounts|-m FROM1:ON1 [...FROMN:ONN]
| | `- [...COMMAND]
| |- list|ls|l
| | `- --full-sha256|-f
| |- tag|t
| | |- REFERENCE
| | `- TAG [...TAG]
| |- untag|u
| | `- TAG [...TAG]
| `- prune|p
| `- --force|-f
|- volume
| |- create
| | `- --tags|-t TAG [...TAG]
| |- prune
| |- list
| | `- --full-sha256|-f
| |- tag
| | |- REFERENCE
| | `- TAG [...TAG]
| `- untag
| `- TAG [...TAG]
`- compose
|- build
| `- FILENAME
`- run
|- FILENAME
`- COMMAND
Individual combinations are briefly described below: