Rancherize is a php cli script based on symfony/console. It makes developing with docker and rancher easy for developers without specialized knowledge in the subjects. This is done by choosing a blueprint that fits your apps required environment and setting abstract requirements instead of of adding and connecting services.
For a concrete example on how the configuration becomes easier through this see the example at the bottom of this page.
As of 2.23.0 the default behaviour for pushed services has changed to always pull images on an upgrade.
This can be disabled by setting docker.always-pull: false
in either the defaults or the environment.
Rancherize comes bundled as Docker Container ipunktbs/rancherize
.
Rancherize creates configuration to be used with external docker tools. Thus it is necessary to have the following tools installed to use Rancherize:
No need to separately install it. To use it, just make a shell alias:
alias rancherize='docker run -it --init -v $HOME/.rancherize:/home/rancherize/.rancherize -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):$(pwd) -w $(pwd) -e "USER_ID=$(id -u)" -e "GROUP_ID=$(id -g)" ipunktbs/rancherize:2-stable'
or use the provided script script/rancherize.sh
.
From now on use rancherize without other dependencies for your local environment than docker.
With build tools like jenkins or gitlab-ci, you cannot rely on the presence of a .rancherize file in the home-dir. For this usecase you can set account settings with environment variables on the docker container on runtime. best practise would be to include these variables via secrets.
DOCKER_SERVER
- registry server (e.g. registry.gitlab.com), ignore or leave empty for dockerhubDOCKER_USER
- username for dockerhub / registryDOCKER_PASSWORD
- password for dockerhub / registryDOCKER_ECR
- true if using AWS ECRRANCHER_URL
- rancher environment api-urlRANCHER_KEY
- rancher api-keyRANCHER_SECRET
- rancher api-secretRANCHER_ACCOUNTNAME_URL
- alternative rancher environment api-url when using rancher.account = 'ACCOUNTNAME'RANCHER_ACCOUNTNAME_KEY
- alternative rancher api-key when using rancher.account = 'ACCOUNTNAME'RANCHER_ACCOUNTNAME_SECRET
- alternative rancher api-secret when using rancher.account = 'ACCOUNTNAME'
Note that RANCHER_ACCOUNTNAME_{URL,KEY,SECRET}
are only parsed when RANCHER_URL
is set. Setting them without default
account will NOT work.
Rancherize creates configuration to be used with external docker tools. Thus it is necessary to have the following tools installed to use Rancherize:
docker
https://docs.docker.com/engine/installation/docker-compose
https://docs.docker.com/compose/install/rancher-compose
https://docs.rancher.com/rancher/v1.2/en/cattle/rancher-compose/#installation
Rancherize is installed using composer
composer require 'ipunkt/rancherize:^2.5.0'
Rancherize knows 2 types of accounts:
- docker accounts. They are used to push images to docker hub
- rancher accounts. They are used to deploy your app to your rancher environment
Both are managed in the json file ~/.rancherize
which should be set to be only readable by your own user.
For easy editing use the following command. It opens the file in your $EDITOR
and creates a default file
if it does not exist yet.
vendor/bin/rancherize rancher:access
Rancherize configuration is split into environments
. A typical app knows at least a local
and a production
environment. Environments are configured by editing the file rancherize.json
inside the app work directory.
Note that all configuration values can also be set in the defaults
section. Values in this section will be used if the
configuration value does not appear in the environment
See Environments and Defaults for a longer explanation on how to best use environments
The command init
can be used to create an initial configuration for an environment.
It will prompt the blueprint to create a sensible default production configuration. If the --dev
Flag is used then
a configuration for a local development environment is created instead.
vendor/bin/rancherize init [--dev] BLUEPRINT ENVIRONENTNAME1 ENVIRONEMNTNAME2... ENVIRONMENTNAMEX
e.g.
vendor/bin/rancherize init --dev webserver local
vendor/bin/rancherize init webserver production staging
The command environment:set
exists to conveniently set an environment value for all environments
. It will go through
all environments
, display the current value and ask for the new value. If none is given then the old value
will be used again.
vendor/bin/rancherize environment:set VARIABLENAME
e.g.
vendor/bin/rancherize environment:set APP_KEY
The command start
exists to start an environment of your app on the local machine.
vendor/bin/rancherize start ENVIRONMENTNAME
e.g.
vendor/bin/rancherize start local
Note that this command does not currently build a docker image from your work directory so the environment
should be
set to mount your work directory directly. For the WebserverBlueprint this means setting
"use-app-container": false
"mount-workdir":"true"
Theses settings are included when initializing with the --dev
flag
The command push
exists to deploy the current state of your work directory into Rancher.
vendor/bin/rancherize push ENVIRONEMNT VERSION
e.g.
vendor/bin/rancherize push staging v1
- The current state of your work directory is build as docker image and tagged as
$(docker.repository):$(docker.version-prefix)VERSION
- The built Image is pushed to docker hub using the credentials from the global configuration named
$(docker.account)
- The current configuration of the stack in rancher is retrieved
- If the stack does not exist yet it is created empty
- The apps configuration is added to the stack configuration
- The app is deployed into the stack
- If no other version of the service is found it will be created
- !NEW! If
rancher.in-service
is set totrue
then a rolling upgrade will be triggered to a non-versionized name and subsequently in-service upgrades of this service - If the same version of the service is found then an in-service upgrade is triggered
- If a different version of the service is found then a rolling-upgrade ist triggered
- In case of an in-service upgrade rancherize waits for the stack to reach
upgraded
and confirms the upgrade.
You can setrancher.upgrade-healthcheck
totrue
to wait for it to reporthealthy
instead. Not that this only works if a service has a health-check is defined(not yet supported through rancherize)
The command build-image
exists to build the current state of your work directory into the docker registry, then deploy
them via push -i
.
It is essentially the push
command without any interaction with rancher.
See the Blueprint readme for more information on how to develop your own blueprints