For my game project, I want to have multiple Docker containers started up at once which are all linked together by easy-to-use hostnames (not terrible auto-generated Docker hashes).
The solution to this arrived to me pretty easily thanks to my friend @will2bill on Twitter who pointed out that Docker Compose is a thing! By declaring a YAML manifest file called docker-compose.yml
and filling it appropriately you can have a series of linked containers come up easily with a single command, sudo docker-compose up -d
. I’ve included an example docker-compose.yml
file directly below:
version: '3'
services:
gateway:
build: ./gateway
ports:
- "2222:22"
another:
build: ./anyway
As you can see, we define the version of docker-compose manifest first, then we define the services/containers that we’ll want. In this case, we’re creating two containers, one called gateway
and the other called another
. They’ll both be built individually and locally from Dockerfile
s located in their relevant directories, however you can also specify an image
property with a Docker image:tag
rather than using the build
keyword. You’ll also notice the ports
array, which in this case maps port 2222 on the host to 22 on the guest container called gateway
and allows us to SSH in from our host to the guest. Once we’re inside the guest, we can simply SSH to the other box with ssh user@another
, making it super easy for us to get around.
This is exactly what I needed for the problem, however docker-compose
has some different features from docker
and so the next challenge will be getting multiple docker-compose
orchestrated container groups loaded, one per each SSH connection from a user.