Ever wondered how you can deploy your locally running docker-compose project to a remote server?
There are several options:
- Pushing the images to a container registry like dockerhub, github container registry and pulling them on your server
- Saving the images to a .tar archive and copying it over to your server and loading them there explained here
There is a easier way using docker remote host:
The only thing you have to make sure is to install docker, docker-compose onto your server and have a valid ssh key
docker-compose.yml
version: '3.9'
services:
backend:
build: spring-backend
container_name: spring-backend
image: spring-backend:0.0.1
expose:
- "8088"
frontend:
build: angular-frontend
image: angular-frontend:0.0.1
container_name: angular-frontend
ports:
- 80:80
depends_on:
- backend
command: [nginx-debug, '-g', 'daemon off;']
deploy.sh
#!/bin/bash
docker-compose build
for img in $(docker-compose config | awk '{if ($1 == "image:") print $2;}'); do
images="$images $img"
done
echo $images
docker image save $images | docker -H "ssh://user@serverIp" image load
docker-compose -H "ssh://user@serverIp" up --force-recreate -d
docker-compose -H "ssh://user@serverIp" logs -f
read -p "Press any key to continue... " -n1 -s
With a simple deploy.sh you can build your current state, load them onto your server, run them and attach to the output.
Top comments (1)
Hi this is great, but i was running into the following errors:
ERROR: Secsh channel 14 open FAILED: open failed: Connect failed
Solution: On the target host, set the MaxSessions of the sshd to something bigger then the 10-default (20 should be enough).