Docker Runs Server Junk

I ran Docker yesterday, and I thought to myself, "Docker is nice to run a bunch o server junk."

What, junk?

Of course, "junk" doesn't sound thrilling or particularly nice, and I guess that's how I felt the other day. That's what makes Docker nice. You can throw something into a black box and now have to worry too much about it.

For instance, I might throw in a database, a messaging server, and a REST API.

Lots of junks

And once you have more than one junk, a tool called docker-compose is nice. You get it when you install Docker Desktop.

It's nice because you can define several processes to run at once in a docker-compose.yml file. It might contain the things mentioned above:

version: '2'
services:
  rabbit:
    image: rabbitmq:3.7.6-management
    hostname: rabbit
    ports:
      - "15672:15672"
      - "5672:5672"
  postgres:
    image: kiasaki/alpine-postgres:9.5
    volumes:
      - my-postgres:/var/lib/postgresql/data
    ports:
      - '5432:5432'
  my-api
    image: some-custom-image-host:latest
    ports:
      - "3000:3000"
    environment:
      VAR_NAME: valueHere
volumes:
  my-postgres:

You can see the many and sundry options: exposing ports, exposing filesystem volumes, and setting environment variables.

Starting up the junk

If you never have to look inside docker-compose.yml, it's even better. All you have to do is start the processes. This is done with by going to the file path where docker-compose.yml is stored and typing:

docker-compose up -d

This will start it all. -d will fork the process as a daemon.

Accessing the junk

Then what's available? In the example, there will be a Rabbit messaging admin portal mapped to localhost:

open http://localhost:15672

And a postgres instance to access:

psql -U postgres -h localhost

And another REST API to access

open http://localhost:3000

Not mixing junk

Note that once you start all these processes, resources like http ports on localhost or tcp ports for postgres are going to be shared. Make sure you stop any local junk instances so that there are no conflicts.

You wouldn't run local junk anyway, right?

Monitor the junk

Once the junk is running, you might want to see what it's doing:

docker-compose logs -f

This will show a combined log of all processes. -f will show new logs continuously (-f = "follow").

If you're not sure things are running at all, you can run:

docker ps

Throw junk away

Sometimes junk takes up a fair bit of space. We could all use a bit of downsizing and decluttering. Say "Thank you, junk" and let it go. Type:

docker-compose down

A bit of cleanup, and you're back to a pristine state. Docker's nice like that. It seems junk contained.

Any other ways you like to run server junk?