I don’t do AWS, however I do have a prototype environment running on an 
internal Ubuntu VM in which I deploy a set of docker containers: one for 
database, one for web server and another for app server (my apps run in Tomcat 
from WAR files, not WOMonitor—don’t know if that matters to you).  Note that 
all of this runs on a single VM—I haven’t split up the containers across the 
network, nor have I employed anything like Docker swarm or kubernetes. Not yet, 
at least. So if you’re looking for input on that front, I’m afraid I don’t have 
anything to provide.

I can’t say how my application would fare in real world production use, but for 
my current prototyping purposes it works well enough. I run everything on a 
Ubuntu VM (hosted in a Hyper-V cluster) with the docker containers orchestrated 
via docker-compose. If your AWS machine can run Docker, I would imagine that 
the process to get an application running on it would not be too terribly 
different, since most of it is handled by Docker.

From my experience, getting things working in Docker was not terribly hard, 
especially after I was able to get the hang of docker volume mounting and 
docker-compose. Docker-Compose allows you to specify all of your containers and 
their dependencies in one place and then it’s easy to startup and shutdown your 
application stack. You can even startup individual containers, which makes it 
easy to develop and test in Eclipse against the same database that I’m running 
in Docker. 

In my compose file, I have three “services” defined: dbserver, appserver and 
webserver. Each of these has its own Dockerfile to build an image, a set of 
ports that are exposed (I expose ports on each service, however in production, 
you’d only need to expose the webserver ports) and any volumes that are to be 
mounted into the container. The Dockerfiles for each container range from 
trivial (e.g. the postgresql dbserver only exposes a network port) to only 
slightly more complex (the one for the appserver does some installs, symlinking 
and copying of files). 

One of the nice things about Docker-Compose is that it takes care of the 
networking between containers, so you can refer to your services as hostnames 
(e.g. in a connection dictionary, I can specify the database host as dbserver 
to match my dbserver service).  In my environment, my webserver talks to the 
appserver container by specifying the name as “appserver”. Similarly, my 
appserver container refers to my dbserver container as “dbserver”.

In my setup, all of my application’s required files/folders are present under a 
single directory (e.g. /opt/myapp). Under that folder I have my database 
directory, my config files (including the ones that will eventually make it to 
/etc/WebObjects), my document root, and my web apps. I then mount that path (or 
specific subfolders as needed) into my containers as a docker volume in my 
compose file. For example, for the database, I might have the Postgres database 
in /opt/myapp/data, which I would mount to /var/lib/postgresql/data. For the 
app server and web servers, I mount the root folder (/opt/myapp) and then 
either use symlinks within the container to point to specific config files or 
copy over my custom config files to the container (the symlinks and file 
copying is handled in the Dockerfile for that container).

There are a few improvements that I’d like to make: being able to specify 
proper dependencies between containers, being able to automate the docker build 
process, and having docker-compose automatically start up the environment at 
machine boot. 

Docker-Compose lets you specify a dependency between containers so that my 
appserver container isn’t started before the dbserver container *starts*, 
however there’s no guarantee that the dbserver container is actually *ready* 
before the appserver starts. In practice, I’ve found that the database 
container is always ready before the app server, however I believe this is 
simply because it starts up faster (it’s a small Postgres server). 

Since I’m prototyping, I currently deploy manually with a mvn depedency:get 
from our repo manager to get the WAR files into my webapps folder—it works for 
now, since it’s just me putting out test versions, however I’d like to automate 
the docker build process so that it is driven from commits to the repository (I 
haven’t yet set up a Jenkins environment, so that is probably the next step for 
me). 

Having the docker-compose environment started at boot is another improvement 
high on my list. I know it can be done, and it may already be capable of doing 
it, but I haven’t spent any significant energy or time investigating this as I 
don’t need it at the moment. 

Hope that helps.

F

-- 
Faizel Dakri
list...@dakri.com <mailto:list...@dakri.com>



> On Mar 15, 2019, at 01:23 PM, Joe Smith <sjoe76...@gmail.com 
> <mailto:sjoe76...@gmail.com>> wrote:
> 
> Does anyone have experience deploying a WO app to a Docker container. 
> Customer wants deployment to AWS ECS (EC2 launch type).
> 
> webserver in one container, wo app server in another, db in yet another?
> 
> Joe
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com 
> <mailto:Webobjects-dev@lists.apple.com>)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/listfez%40dakri.com 
> <https://lists.apple.com/mailman/options/webobjects-dev/listfez%40dakri.com>
> 
> This email sent to list...@dakri.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to