Docker, Oracle

Microservices PoC: Docker Calculator build with docker-compose

Docker-ComposeHopefully you have been following my Docker exploits allowing me to share as I go along. Recently I posted a part two on my Microservices PoC describing a simple calculator. The solution currently instructs to you to execute four (4) docker build commands to create the individual containers for the calculator function. When I did this, I felt there had to be a simpler way. To my delight, docker-compose was the answer. In order to use Docker Compose on my Ubuntu system, I needed to download and install it. To keep it simple, I’ll include the steps here:

Install Docker Compose

Execute the following at your command prompt to install the most current version at the time of this post:

dbryant@asus: sudo curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

dbryant@asus: sudo chmod +x /usr/local/bin/docker-compose

dbryant@asus: docker-compose --version
docker-compose version 1.15.0, build e12f3b9

With docker-compose installed, we can now use the docker-compose.yml file to combine several steps into one. In this case the four docker build commands along with the subsequent docker run commands will be handled with one docker-compose.yml file.

Create docker-compose.yml file

In your favorite editor, vi perhaps, create the docker-compose.yml file in the directory with your current “Dockerfile” files.

dbryant@asus: ls
add2.js     docker-compose.yml  Dockerfile_d  Dockerfile_s
divide2.js  Dockerfile          Dockerfile_m  multiply2.js

dbryant@asus: cat docker-compose.yml 
add:
  build: .
  dockerfile: Dockerfile
  ports:
  - "3000:3000"
subtract:
  build: .
  dockerfile: Dockerfile_s
  ports:
  - "3001:3001"
multiply:
  build: .
  dockerfile: Dockerfile_m
  ports:
  - "3002:3002"
divide:
  build: .
  dockerfile: Dockerfile_d
  ports:
  - "3003:3003"

I have found the docker-compose.yml file to extremely finicky with spacing, tabs, and line feeds so it make take a few times to get the file structure correct.

Once done, we can now use the docker-compose up command to perform the build and run of the four images. In essence, the docker-compose.yml file uses the Dockerfiles identified to build the images and in this situation, exposes the math functions on the various ports 3000, 3001, 3002, 3003.

Run docker-compose up
dbryant@asus:~/development/github.com/Docker/Docker_Calc$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
dbryant@asus:~/development/github.com/Docker/Docker_Calc$ 
dbryant@asus:~/development/github.com/Docker/Docker_Calc$ docker-compose up
Building multiply
Step 1/8 : FROM oraclelinux:7-slim
7-slim: Pulling from library/oraclelinux
3152c71f8d80: Already exists
Digest: sha256:e464042b724d41350fb3ac2c2f84bd9d28d98302c9ebe66048a5367682e5fad2
Status: Downloaded newer image for oraclelinux:7-slim
 ---> c0feb50f7527
Step 2/8 : ADD node-v6* /opt/
 ---> e3bc3a113c3d
Removing intermediate container f4f355ae55b5
Step 3/8 : ENV PATH /opt/node-v6.11.1-linux-x64/bin:$PATH
 ---> Running in 3e2731e6ca82
 ---> 6cc0e7aaf81b
Removing intermediate container 3e2731e6ca82
Step 4/8 : ENV NODE_PATH /opt/node-v6.11.1-linux-x64/lib/node_modules/
 ---> Running in 7029d5a7d4ed
 ---> b370b425a9e7
Removing intermediate container 7029d5a7d4ed
Step 5/8 : RUN npm install -g express
 ---> Running in 5c58fa043b20
/opt/node-v6.11.1-linux-x64/lib
`-- express@4.15.4 
  +-- accepts@1.3.4 
  | +-- mime-types@2.1.16 
  | | `-- mime-db@1.29.0 
  | `-- negotiator@0.6.1 
  +-- array-flatten@1.1.1 
  +-- content-disposition@0.5.2 
  +-- content-type@1.0.2 
  +-- cookie@0.3.1 
  +-- cookie-signature@1.0.6 
  +-- debug@2.6.8 
  | `-- ms@2.0.0 
  +-- depd@1.1.1 
  +-- encodeurl@1.0.1 
  +-- escape-html@1.0.3 
  +-- etag@1.8.0 
  +-- finalhandler@1.0.4 
  | `-- unpipe@1.0.0 
  +-- fresh@0.5.0 
  +-- merge-descriptors@1.0.1 
  +-- methods@1.1.2 
  +-- on-finished@2.3.0 
  | `-- ee-first@1.1.1 
  +-- parseurl@1.3.1 
  +-- path-to-regexp@0.1.7 
  +-- proxy-addr@1.1.5 
  | +-- forwarded@0.1.0 
  | `-- ipaddr.js@1.4.0 
  +-- qs@6.5.0 
  +-- range-parser@1.2.0 
  +-- send@0.15.4 
  | +-- destroy@1.0.4 
  | +-- http-errors@1.6.2 
  | | `-- inherits@2.0.3 
  | `-- mime@1.3.4 
  +-- serve-static@1.12.4 
  +-- setprototypeof@1.0.3 
  +-- statuses@1.3.1 
  +-- type-is@1.6.15 
  | `-- media-typer@0.3.0 
  +-- utils-merge@1.0.0 
  `-- vary@1.1.1 

 ---> dbc77ff00d97
Removing intermediate container 5c58fa043b20
Step 6/8 : ADD multiply2.js .
 ---> 2426ecb359c2
Removing intermediate container 136f55d5a34d
Step 7/8 : EXPOSE 3002
 ---> Running in f1088f80a7a6
 ---> c51ebc6c96f4
Removing intermediate container f1088f80a7a6
Step 8/8 : CMD node multiply2.js
 ---> Running in ab9ba3505470
 ---> a9bd02502eb9
Removing intermediate container ab9ba3505470
Successfully built a9bd02502eb9
Successfully tagged dockercalc_multiply:latest
WARNING: Image for service multiply was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building add
Step 1/7 : FROM oraclelinux:7-slim
 ---> c0feb50f7527
Step 2/7 : ADD node-v6* /opt/
 ---> Using cache
 ---> e3bc3a113c3d
Step 3/7 : ENV PATH /opt/node-v6.11.1-linux-x64/bin:$PATH
 ---> Using cache
 ---> 6cc0e7aaf81b
Step 4/7 : ENV NODE_PATH /opt/node-v6.11.1-linux-x64/lib/node_modules/
 ---> Using cache
 ---> b370b425a9e7
Step 5/7 : RUN npm install -g express
 ---> Using cache
 ---> dbc77ff00d97
Step 6/7 : ADD add2.js .
 ---> 4918e0593ae4
Removing intermediate container f4a9e564b16a
Step 7/7 : CMD node add2.js
 ---> Running in ffcd4de5bd01
 ---> e8af879c151a
Removing intermediate container ffcd4de5bd01
Successfully built e8af879c151a
Successfully tagged dockercalc_add:latest
WARNING: Image for service add was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building subtract
Step 1/8 : FROM oraclelinux:7-slim
 ---> c0feb50f7527
Step 2/8 : ADD node-v6* /opt/
 ---> Using cache
 ---> e3bc3a113c3d
Step 3/8 : ENV PATH /opt/node-v6.11.1-linux-x64/bin:$PATH
 ---> Using cache
 ---> 6cc0e7aaf81b
Step 4/8 : ENV NODE_PATH /opt/node-v6.11.1-linux-x64/lib/node_modules/
 ---> Using cache
 ---> b370b425a9e7
Step 5/8 : RUN npm install -g express
 ---> Using cache
 ---> dbc77ff00d97
Step 6/8 : ADD subtract2.js .
 ---> b87fd184c682
Removing intermediate container 230a1bd82ed5
Step 7/8 : EXPOSE 3001
 ---> Running in a3ce90e09053
 ---> 4251062554a8
Removing intermediate container a3ce90e09053
Step 8/8 : CMD node subtract2.js
 ---> Running in 992df846b962
 ---> 2e16507c16a6
Removing intermediate container 992df846b962
Successfully built 2e16507c16a6
Successfully tagged dockercalc_subtract:latest
WARNING: Image for service subtract was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building divide
Step 1/8 : FROM oraclelinux:7-slim
 ---> c0feb50f7527
Step 2/8 : ADD node-v6* /opt/
 ---> Using cache
 ---> e3bc3a113c3d
Step 3/8 : ENV PATH /opt/node-v6.11.1-linux-x64/bin:$PATH
 ---> Using cache
 ---> 6cc0e7aaf81b
Step 4/8 : ENV NODE_PATH /opt/node-v6.11.1-linux-x64/lib/node_modules/
 ---> Using cache
 ---> b370b425a9e7
Step 5/8 : RUN npm install -g express
 ---> Using cache
 ---> dbc77ff00d97
Step 6/8 : ADD divide2.js .
 ---> a614ae005246
Removing intermediate container 129ab6d193ed
Step 7/8 : EXPOSE 3003
 ---> Running in 407631099de2
 ---> 96c365ac8705
Removing intermediate container 407631099de2
Step 8/8 : CMD node divide2.js
 ---> Running in e77f1c4a0276
 ---> 7c528b7728f1
Removing intermediate container e77f1c4a0276
Successfully built 7c528b7728f1
Successfully tagged dockercalc_divide:latest
WARNING: Image for service divide was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating dockercalc_divide_1 ... 
Creating dockercalc_multiply_1 ... 
Creating dockercalc_add_1 ... 
Creating dockercalc_subtract_1 ... 
Creating dockercalc_divide_1
Creating dockercalc_add_1
Creating dockercalc_subtract_1
Creating dockercalc_multiply_1 ... done
Attaching to dockercalc_divide_1, dockercalc_add_1, dockercalc_subtract_1, dockercalc_multiply_1
divide_1    | Division service listening on port 3003!
add_1       | Addition service listening on port 3000!
subtract_1  | Subtraction service listening on port 3001!
multiply_1  | Multiplication service listening on port 3002!

At the end of this process, you can see that all four “microservices” are up and running. We can verify a few things.

dbryant@asus:~$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
dockercalc_divide     latest              7c528b7728f1        11 minutes ago      163MB
dockercalc_subtract   latest              2e16507c16a6        11 minutes ago      163MB
dockercalc_add        latest              e8af879c151a        11 minutes ago      163MB
dockercalc_multiply   latest              a9bd02502eb9        11 minutes ago      163MB
oraclelinux           7-slim              c0feb50f7527        2 weeks ago         118MB
dbryant@asus:~$ 


dbryant@asus:~$ docker container ls
CONTAINER ID IMAGE               COMMAND             CREATED        STATUS        PORTS                  NAMES
f8e1a031ed70 dockercalc_subtract "node subtract2.js" 12 minutes ago Up 12 minutes 0.0.0.0:3001->3001/tcp dockercalc_subtract_1
47e8bb757446 dockercalc_multiply "node multiply2.js" 12 minutes ago Up 12 minutes 0.0.0.0:3002->3002/tcp dockercalc_multiply_1
8fb7d791bdbd dockercalc_add      "node add2.js"      12 minutes ago Up 12 minutes 0.0.0.0:3000->3000/tcp dockercalc_add_1
1d46aa08eb13 dockercalc_divide   "node divide2.js"   12 minutes ago Up 12 minutes 0.0.0.0:3003->3003/tcp dockercalc_divide_1


dbryant@asus:~/development/github.com/Docker/Docker_Calc$ docker-compose images
Container             Repository Tag             Image Id     Size 
----------------------------------------------------------------------------
dockercalc_add_1      dockercalc_add latest      e8af879c151a 156 MB 
dockercalc_divide_1   dockercalc_divide latest   7c528b7728f1 156 MB 
dockercalc_multiply_1 dockercalc_multiply latest a9bd02502eb9 156 MB 
dockercalc_subtract_1 dockercalc_subtract latest 2e16507c16a6 156 MB

We can even test this with the curl command. The %20 represents a space between the two operands.

dbryant@asus:~$ curl http://localhost:3000/add/?id=4%205 Your answer: 9 
dbryant@asus:~$ curl http://localhost:3001/subtract/?id=4%205 The answer is: -1 
dbryant@asus:~$ curl http://localhost:3002/multiply/?id=4%205 The answer is: 20 
dbryant@asus:~$ curl http://localhost:3003/divide/?id=4%205 The answer is: 0.8

Once you are ready to stop these, you simply press <ctrl-c>:

^CGracefully stopping... (press Ctrl+C again to force)
Killing dockercalc_subtract_1 ... done
Killing dockercalc_multiply_1 ... done
Killing dockercalc_add_1      ... done
Killing dockercalc_divide_1   ... done

There we have it. In general, Soma pills tend to provide arapidhealing effect. This also applies to the cases in which patients suffer from chronic back pain and spasms. According to the results obtained in clinical trials, most of these patients report a great relief and a general impression of change within the first three days of treatment, which is an outstanding result – buy soma online.

Enjoy!dbaontap

1 Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.