At Simulmedia, our infrastructure is designed using a mix of standard data center and cloud technologies. On top of this hybrid infrastructure, engineers are given the freedom to develop locally, resulting in various disparate environments where code is expected to just work. To facilitate the app deployment process, we have chosen to use Docker as our standard tool for app deployment.
Docker is a container technology. Dockers container provides a lightweight runtime environment running only the application and its dependencies. Its strength is in container isolation which is achieved via the kernels support for namespace and cgroups. Every container has its own memory, CPU, network, file system and storage. With Docker, our engineers develop their code locally without worrying about portability. Docker applications are self-contained and can run within any Docker container. Docker provides decoupling of the applications from the server operating system.
We started with small team of engineers to develop and deploy an API application with Docker. We utilized Chef to deploy virtual instances in our cloud platform and recipes to install Docker. Our engineers developed and tested their code in their local Docker instances. As developers check in their code, Jenkins builds and test the project. Once the code passes all the tests, a Docker image is composed and deployed to our virtual instances via Capistrano. Utilizing Jenkins along with Capistrano, we were able to continuously build and deploy to our docker instances.
The challenges of security, high availability, monitoring and maintenance still exist within the Docker platform. One still need to be mindful of the security of the Docker host. Only trusted users should be allowed to control the Docker daemon. Are you using a trustworthy Docker images that you pulled? Docker Compose offers the ability to ship a multi-container application within a single file, yet it is not considered production-ready. Docker does offer a good guide in production deployment for Docker Compose.
The guideline is to build a foundation for your deployment workflow, with various team members. Docker Compose, Metal, and Swarm provide flexibility on building out a complex infrastructure. The deployment process is tweaked or reworked through the various needs of your organization. Our continuous integration and deployment workflow have greatly improved, and it can be further improved such as deploying the container directly using AWS EC2 Containers service.