|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # Focker Basic Usage Guide
-
- ## Prerequisites
-
- In order to get started, you have to prepare a base image for usage with Focker.
- In order to do so, you can use the `focker bootstrap` command.
-
- `focker bootstrap` has the following syntax:
-
- ```
- usage: focker.py bootstrap [-h] [--tags TAGS [TAGS ...]] [--empty]
-
- optional arguments:
- -h, --help show this help message and exit
- --tags TAGS [TAGS ...], -t TAGS [TAGS ...]
- --empty, -e
- ```
-
- If you use the `--empty` switch, it will create an empty image. This is used
- principally for testing and unless you want to set up your image manually, it is
- recommended to run `bootstrap` without the `--empty` switch.
-
- The `--tags` parameter lets you specify the tags that the resulting image will
- receive. If you do not specify this, the image will be tagged with `freebsd-latest`
- and `freebsd-x.y` where `x.y` will be the major and minor version obtained
- from a call to `freebsd-version`.
-
- The `bootstrap` command creates a new image and runs `bsdinstall jail` targeting
- its mountpoint. It is recommended to install only the base system (no ports, no lib32),
- disable all services and do not add any users. The base image will most likely serve as
- the starting point for all the other images that you will be building. Pre-made
- `Fockerfile` recipes, unless indicated otherwise, will most likely expect a
- barebones image as the base.
-
- It is a good practice to account for a base image that has been created by just
- clicking through the `bsdinstall jail` installer. Therefore, many `Fockerfile`
- recipes will execute the following steps to disable sshd, sendmail, make syslog
- listen only locally, enable clearing of `/tmp` and disable writing to
- `/var/spool/clientmqueue`:
-
- ```
- sysrc sshd_enable=NO
- sysrc sendmail_enable=NONE
- chown root:wheel /var/spool/clientmqueue
- chmod 000 /var/spool/clientmqueue
- sysrc syslogd_flags="-ss"
- sysrc clear_tmp_enable="YES"
- ```
-
- We can now move on and let you try create your first own customized `Fockerfile`.
-
- ## Trivial Example
-
- At the very basic level, Focker can be used simply as a jail building system.
- In order to get started you have to create a new directory:
-
- ```
- mkdir test-focker-build
- cd test-focker-build/
- ```
-
- with a file called `Fockerfile` inside:
-
- `touch Fockerfile`.
-
- Using your editor of choice (`ee` is a good one), you can now put a trivial
- directive in `Fockerfile`:
-
- ```
- base: freebsd-latest
- steps: []
- ```
-
- The `base` directive determines the starting point for your future image.
- A starting point is simply a pre-existing image. We will call this image
- the parent image. The chain always terminates with an image that doesn't have
- a parent. Such an image has to be created manually, by using `focker bootstrap`
- or perhaps transferred using `zfs send`/`zfs receive` combo.
-
- Now you are ready to build your first image. Run:
-
- `focker image build .`
-
- The `focker image build` command has the following syntax:
-
- ```
- usage: focker.py image build [-h] [--tags TAGS [TAGS ...]] [--squeeze]
- focker_dir
-
- positional arguments:
- focker_dir
-
- optional arguments:
- -h, --help show this help message and exit
- --tags TAGS [TAGS ...], -t TAGS [TAGS ...]
- --squeeze, -s
- ```
-
- As you can see, in our call `focker image build .` we have specified only the
- `focker_dir` parameter. It tells the Focker which directory contains the
- Fockerfile and potentially any additional files that you would like to include
- in your build (we will get to this later).
-
- You will see an output similar to the following:
-
- ```
- Waiting for /var/lock/focker.lock ...
- Lock acquired.
- poolname: zroot
- fname: ./Fockerfile
- spec: {'base': 'freebsd-latest', 'steps': []}
- base: zroot/focker/images/e4d5685@1 root: zroot/focker/images
- ```
-
- and if you run `focker image list` you will discover that you are still
- stuck only with your pre-existing base image. Why is that?
-
- Since we have specified no `steps` or more precisely we have specified
- an empty list of steps, the resulting image has the same checksum as the
- base image. This is the case since no modifications have been made and the
- image content is identical. To observe an effect, we could still run:
-
- `focker image build . -t test-build`
-
- This will instruct Focker to add a new tag to the resulting image. If you
- run `focker image list` now, you should see an output similar to:
-
- ```
- Tags Size SHA256 Base
- -------------------------------------- ------ -------- -------
- freebsd-latest freebsd-11.2 test-build 266M e4d5685 -
- ```
-
- Congratulations! Your first image has been tagged. We can now start
- filling the `steps` list to create something more useful.
|