When developing dockerized applications, you might stumble upon the sheer difficulty and annoyance of simply deploying your Compose file along with built service images. If you're not using a full cloud setup and instead want to deploy to a small number of machines, you're left with doing it manually or going for complete automation. At least that was the case until now - I'm happy to introduce compose-deploy. As the name suggests, it is a simple CLI tool that helps you with defining and running your deployments with ease.
Let's go through an example deployment to grasp how easy it actually is to deploy a simple hello-world service to our server. Our Compose file looks like the following
version: '3.7'
services:
demo:
build: .
image: brunoscheufler/demo-service:1.0.0
restart: on-failure
init: true
environment:
NODE_ENV: production
and our compose-deploy configuration contains
name: sample-deployment
targets:
- host: 'my-server-ip'
username: deploy-user
privateKeyFile: ./key/id_rsa
passphrase: 'SECRET PASSPHRASE'
composeFile: ./docker-compose.yml
Now we're ready to run the deployment!
$ compose-deploy
šØ Building Docker images...
Building demo
Step 1/4 : FROM node:11-alpine
---> ebbf98230a82
Step 2/4 : WORKDIR /app
---> Using cache
---> 311a77c5bbda
Step 3/4 : COPY index.js /app
---> Using cache
---> 994482d9b3d0
Step 4/4 : CMD node index.js
---> Using cache
---> aa2745a3fd0c
Successfully built aa2745a3fd0c
Successfully tagged brunoscheufler/demo-service:1.0.0
š Pushing Docker images...
Pushing demo (brunoscheufler/demo-service:1.0.0)...
The push refers to repository [docker.io/brunoscheufler/demo-service]
1.0.0: digest: sha256:<LONG_HASH> size: 1364
šÆ Deploying services...
š« Deploying to target 1 of 1...
š” Connecting to target server
š„ Connected! Copying Compose file...
Removing network sample_default
š¦ Pulling Docker images...
Pulling demo ... done
ā”ļø Launching deployment...
Creating network "sample_default" with the default driver
Creating sample_demo_1 ... done
ā
Deployment done!
And that's it! We've now deployed our demo service in less than thirty seconds. It works like magic āØ If you're interested, head over to the repository and give it a try!