Once you have your own docker registry set up for your containers, deployments can be made automatic, quick, and easy. I do this by having my docker hosts constantly "polling" the registry through the use of a cron and an extended version of the script below. When the registry container is different from the running continer, the update_container function is called. Alternatively, you could have the script triggered by an API request instead.
This is a very simplified script that is only meant to get you started. This example uses a container that is "pushed" to: registery.my-domain.com:port/my-awesome-project
<?php
define("REGISTRY", "registery.my-domain.com:port");
function update_container($project_name)
{
# define your update/replacment steps here...
# perhaps just something like:
# shell_exec("/home/programster/$project_name/update.sh");
# where update.sh has a call to docker stop, and docker run commands.
}
/**
* Checks to see if the project's container is out of date and calls the
* update function if it is.
* @param string $project_name - the name of the project we are checking
* @return void - calls the update function if out of date.
*/
function version_check($project_name)
{
$json_response = file_get_contents("http://" . REGISTRY . "/v1/repositories/" . $project_name . "/tags");
$obj = json_decode($json_response);
$latest = $obj->latest;
$json_response2 = shell_exec('docker inspect "' . REGISTRY . '/' . $project_name . '"');
$obj2 = json_decode($json_response2);#
$current = $obj2[0]->Id;
if ($current != $latest)
{
print "calling update on $project_name" . PHP_EOL;
update_container($project_name, $ip);
}
}
version_check("my-awesome-project");
Now whenever you build and push a container to your registry, it will automatically replace the currently running container within moments.
No comments:
Post a Comment