10-17-2020, 08:01 PM
Hi Listy,
sorry for the (very) late answer, I've had little time to work on this but there are some news.
There are two possible ways to approach this:
- The more "docker" way is to create a container for each individual service, ideally one container should run one single task, and chain them to create a stack. In the case of tactic it should be something like postgres <-> tactic <-> apache, than keep persistency with static volumes when the container are deleted and recreated. This method gives you the freedom to choose what program and which version to use for each service, for example you could use mysql in place of postgres or nginx in place of apache. The problem is that from a tactic point of view each container is like another host connected via a private network and the installer script must be heavily modified. I did some changes and Remko merged the PR but more are needed.
- Keep all the services in one image and use a system like supervisord to manage them. This method is more complex but it works more like a standard tactic installation on a single system.
The Dockerfile I wrote takes the second approach, but, because I wrote it mainly to quick test code changes on a "clean" installation it was impossible to keep persistency with docker static volumes. The main technical reason being that it installed and configured the db and the tactic app at build time.
I just made a new version where db and config is done at run time and it is now possible to keep the data on a static volume. It isn't perfect and it isn't tested a lot but it works.
The source is on github (https://github.com/diegocortassa/docker-tactic) and the new image (with tactic 4.8) have been pushed to docker hub.
To use it just launch:
docker run -it --name tactic --volume=/tactic-docker/tactic:/opt/tactic --volume=/tactic-docker/postgres-data:/var/lib/pgsql/data -p 80:80 diegocortassa/tactic
where /tactic-docker/ is the directory on your server where you want to keep the data.
I didn't test it but, beside linux, it should work on windows and mac with Docker Desktop.
sorry for the (very) late answer, I've had little time to work on this but there are some news.
There are two possible ways to approach this:
- The more "docker" way is to create a container for each individual service, ideally one container should run one single task, and chain them to create a stack. In the case of tactic it should be something like postgres <-> tactic <-> apache, than keep persistency with static volumes when the container are deleted and recreated. This method gives you the freedom to choose what program and which version to use for each service, for example you could use mysql in place of postgres or nginx in place of apache. The problem is that from a tactic point of view each container is like another host connected via a private network and the installer script must be heavily modified. I did some changes and Remko merged the PR but more are needed.
- Keep all the services in one image and use a system like supervisord to manage them. This method is more complex but it works more like a standard tactic installation on a single system.
The Dockerfile I wrote takes the second approach, but, because I wrote it mainly to quick test code changes on a "clean" installation it was impossible to keep persistency with docker static volumes. The main technical reason being that it installed and configured the db and the tactic app at build time.
I just made a new version where db and config is done at run time and it is now possible to keep the data on a static volume. It isn't perfect and it isn't tested a lot but it works.
The source is on github (https://github.com/diegocortassa/docker-tactic) and the new image (with tactic 4.8) have been pushed to docker hub.
To use it just launch:
docker run -it --name tactic --volume=/tactic-docker/tactic:/opt/tactic --volume=/tactic-docker/postgres-data:/var/lib/pgsql/data -p 80:80 diegocortassa/tactic
where /tactic-docker/ is the directory on your server where you want to keep the data.
I didn't test it but, beside linux, it should work on windows and mac with Docker Desktop.