Docker Fun with 400 ASCII Cows

My colleague turned to me and said:

"There is a whole npm module that just shows cow ASCIIs..."

At that point we knew there was only one way forward..

The easy way

Late Sunday evening I started doing things the easy way:

  • I forked the repository to alexellis/cows
  • Added an ENTRYPOINT instruction and short .js file to select a cow by number so it made sense inside a container.
  • Added Dockerfile deriving from alpine linux
  • Raised the Pull Request (PR) to merge to the 'cows' repository

At this point the PR would normally be approved from the repository owner with a thumbs up and I'd get a few people I knew to test it out. But my PR was rejected - I think there's a certain elegance of having a one file / 5 line repository on Github and the author wanted to keep that going.

Plan B

The repository owner suggested creating a brand new Github repository and hosting the Dockerfile on its own there. Here's what I did:

  • I renamed the fork to cows-docker
  • Altered the package.json so I could push to npm under the new name
  • Added myself to the MIT license files and made references to the original project
  • Built and pushed the image to alexellis2/cows on the Docker hub. Adding a title and description through their webpage.
  • Pushed a module named showcows to npm
  • Did a final git push to alexellis/cows-docker

Check it out

With Docker

If you don't have Docker already then head over to the official Getting Started page, otherwise docker run will automatically pull it from the online Hub.

$ docker run alexellis2/cows 423
            (__)
         ___(oo)
       /-    --\/
      / |     ||
     *  ||___-||
        ^^    ^^
     Freshman Cow
After the "Freshman 15"

Or as suggested by Daniel in the comments, below.. watch Cow ASCII TV with the following neat Bash loop:

for i in {1..423}; do docker run --rm alexellis2/cows $i; done

I've added the --rm option to make sure each container is deleted after it exits.

Without Docker

$ npm install --save showcows
$ var cows = require('showcows');
$ console.log(cows(1))

(__)
(__)           (oo)
(oo)     __ ___\/
-\/    /|      |
| |   * |__ ___|
| |        ||
---        --
Cow Computer

Want to learn Docker?

Check out my tutorial Hands-On Docker

..a self-paced and progressive means to learn the essentials of Docker.. written as a series of practical labs..

TL;DR

$ docker run alexellis2/cows 423
            (__)
         ___(oo)
       /-    --\/
      / |     ||
     *  ||___-||
        ^^    ^^
     Freshman Cow
After the "Freshman 15"

Github: alexellis/cows

Alex Ellis

Read more posts by this author.

Subscribe to Alex Ellis' Blog

Subscribe to keep in touch. By providing your email, you agree to receive marketing emails from OpenFaaS Ltd

or subscribe via RSS with your favourite RSS reader

Learn Go with my new eBook

eBook cover

"Everyday Go" is the fast way to learn tools, techniques and patterns from real tools used in production based upon my experience of building and running OpenFaaS at scale.

Buy a copy on Gumroad