DEV Community

Fabio Oliveira Costa
Fabio Oliveira Costa

Posted on • Edited on

Introduction to container based development - Part 2/4

This is the second part of our container based development series. This post is based on the container development article created by me.

Creating our image - Pressing our own CD.

We are going create a node program its behavior is the following.

  • try to find a file and read from it;
  • output the content of the file;
  • save the content +1;
  • repeat every 1 second until 19.
  • if no content is found it will create the file and save with 0;

The code is on the repository on the firstContainer branch.

nodeCounter.js

const fs = require('fs')
const path = require('path')

const counterFile = path.resolve(__dirname, './counter.txt')

const COUNTER_LIMIT = 20
const INTERVAL = 1000
let counterData = 0
if (fs.existsSync(counterFile)) {
  const fileData = fs.readFileSync(counterFile)
  counterData = parseInt(fileData, 10)
}

const recursiveCounter = () => {
  if (counterData === COUNTER_LIMIT) {
    process.exit(0)
  }
  console.log(counterData)
  counterData++
  fs.writeFileSync(counterFile, counterData)
  setTimeout(recursiveCounter, INTERVAL)
}

recursiveCounter()
Enter fullscreen mode Exit fullscreen mode

With this code on some folder we also need to configure our container, to make how our CD is going to be built.

Dockerfile (No extension)

FROM node:13-alpine3.10
RUN mkdir -p /app/ourApp/
COPY ./nodeCounter.js  /app/ourApp/
WORKDIR  /app/ourApp/
CMD node ./nodeCounter.js
Enter fullscreen mode Exit fullscreen mode

The dockerfile above have some commands

  • FROM - We are using a Node image that uses the alpien linux operating system.
  • RUN - On this image we are creating a folder.
  • COPY - We are copying our node program to the folder.
  • WORKDIR - We change the working dir so all commands will run starting from this new location.
  • CMD - We say which command should run as soon as you play the CD.

To make our cd we execute the following on the terminal, it says to build a image called container_dev with the tag first using the dockerfile on the same folder I am executing the command.

docker build -t container_dev:first  .
Enter fullscreen mode Exit fullscreen mode

The output will be something like:

Sending build context to Docker daemon  70.66kB
Step 1/5 : FROM node:13-alpine3.10
.......
Successfully built 50c9fae3a235
Successfully tagged container_dev:first
Enter fullscreen mode Exit fullscreen mode

If we want to see our images we can type

docker images
Enter fullscreen mode Exit fullscreen mode

To see our container data like Ids, names , tags and so on.

REPOSITORY                              TAG                 IMAGE ID
container_dev                           first               50c9fae3a235       
node                                    13-alpine3.10     
Enter fullscreen mode Exit fullscreen mode

Now that our image has a name and a tag we can run it:

docker run container_dev:first
Enter fullscreen mode Exit fullscreen mode

And you should see a count from 0 to 19 and our image stopping. Congratulations you just created your first image!
This image is saving data on a file, run it again if we persisted data it should stop immediately since we are already on the 20 but now it will start again from 0, run it twice with a little delay each count will not interfere with each other. That is part of the security of containers they are isolated.

Our next topic: Volumes!

Top comments (0)