Saturday, August 31, 2019

docker: Build own docker image file

Let's create/build docker image based on 'node' template image.
Following sample uses node script file that I created on here.

create package.json file for 'tweet.js'.
[root@localhost express]# vi package.json
{
"name": "twitter_api_docker",
"version": "1.0.0",
"description": "",
"main": "tweet.js",
"scripts": {
"start": "node tweet.js",
"test": "echo \"error: no test specified\" && exit 1"
},
"author": "Yosuke",
"license": "ISC",
"dependencies": {
"express": "^4.16.3",
"twitter": "^1.7.1"
}
}


Check created package.json file with npm command.
[root@localhost express]# npm start
> twitter_api_docker@1.0.0 start /root/express
> node tweet.js

[ { name: 'ラピュタ',
query: '%E3%83%A9%E3%83%94%E3%83%A5%E3%82%BF',
tweet_volume: 1015481,
date: '8/31/2019, 9:04:00 PM' },
{ name: '#VakaTuberは誰だ',
query: '%23VakaTuber%E3%81%AF%E8%AA%B0%E3%81%A0',
tweet_volume: 13462,
date: '8/31/2019, 9:04:00 PM' },
{ name: '国語の教科書',
query: '%E5%9B%BD%E8%AA%9E%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8',
tweet_volume: 39878,
date: '8/31/2019, 9:04:00 PM' }
]


Here we create 'Docker' file for image build.
It is based on 'node' template image.

[root@localhost express]# vi Dockerfile
FROM node
WORKDIR /opt/tweetjs
COPY . .
RUN npm install
CMD ["npm", "start"]


Let's run 'docker build' command.
The command read 'Docker' file.

[root@localhost express]# docker build -t node-docker-tut .
Removing intermediate container cc70f978f4e7
Successfully built 1ff3ca634e76


Check built image. You can see necessary files were copied to the image.
[root@localhost express]# docker run -it node-docker-tut bash
root@785a50241c04:/opt/tweetjs# ls
Dockerfile insert.js_bk node_modules package.json server.js2 tweet.js
insert.js lib package-lock.json server.js server.js_
root@785a50241c04:/opt/tweetjs# exit
exit


Solely run the image, and it will be executed 'npm start' as we specified in Docker file.
[root@localhost express]# docker run -it node-docker-tut
> twitter_api_docker@1.0.0 start /root/express
> node tweet.js

[ { name: 'ラピュタ',
query: '%E3%83%A9%E3%83%94%E3%83%A5%E3%82%BF',
tweet_volume: 1015481,
date: '8/31/2019, 9:04:00 PM' },
{ name: '#VakaTuberは誰だ',
query: '%23VakaTuber%E3%81%AF%E8%AA%B0%E3%81%A0',
tweet_volume: 13462,
date: '8/31/2019, 9:04:00 PM' },
{ name: '国語の教科書',
query: '%E5%9B%BD%E8%AA%9E%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8',
tweet_volume: 39878,
date: '8/31/2019, 9:04:00 PM' }
]

Thursday, August 29, 2019

docker: Installing docker on CentOS7

Here is how I installed docker on CentOS7 via yum repository, and run retrieved node.js image.

Install docker via yum repository
# yum -y update
# yum -y install docker

Check docker version
# docker -v
# Docker version 1.13.1, build 7f2769b/1.13.1

Start docker service
# service docker start
Redirecting to /bin/systemctl start docker.service


Retrieve node.js image from official docker repository
# docker pull node
Using default tag: latest
Trying to pull repository docker.io/library/node ...
latest: Pulling from docker.io/library/node
9cc2ad81d40d: Pull complete
e6cb98e32a52: Pull complete
ae1b8d879bad: Pull complete
42cfa3699b05: Pull complete
053cac798c4e: Pull complete
e11ff976ff71: Pull complete
6e754155fada: Pull complete
32d7c2fdf415: Pull complete
7acfea3f0d48: Pull complete
Digest: sha256:b524cc1b5a7f5626fc8196886b81e29b1879051471a5a4a9e8101f3132c22a09
Status: Downloaded newer image for docker.io/node:latest


Check if the image was retrieved
# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/node          latest              b18afbdfc458        6 days ago          908 MB
docker.io/hello-world   latest              fce289e99eb9        7 months ago        1.84 kB


Run the image interactively
# docker run -it node
Welcome to Node.js v12.9.0.
Type ".help" for more information.
> console.log("hello docker");
hello docker
undefined
>


Sunday, August 25, 2019

node.js: Installing and using Twitter module

Installing Twitter module
> npm install --save twitter

Check what you installed
> ls -l node_modules/twitter/
total 20
-rw-r--r--. 1 root root   16 Jun 13  2017 CNAME
drwxr-xr-x. 2 root root   41 Jul 21 17:59 lib
-rw-r--r--. 1 root root 1071 Dec  2  2016 LICENSE.md
drwxr-xr-x. 4 root root   40 Jul 21 17:59 node_modules
-rw-r--r--. 1 root root 1708 Jul 21 17:59 package.json
-rw-r--r--. 1 root root 6121 Jun 13  2017 README.md


Create config.js for twitter authentication
> vi lib/config.js
module.exports = {
  consumer_key: 'xxxxxx',
  consumer_secret: 'xxxxxx',
  access_token_key: 'xxx-xxxxx',
  access_token_secret: 'xxxxxxx'
}


Create tweet.js which retrieves trend words
> vi tweet.js

var Twitter = require('twitter');
var config = require('./lib/config.js');

var T = new Twitter(config);

var params = {
  id: 1117099
}

dt = new Date();
dt_format = dt.toLocaleString();

T.get('trends/place', params, function(err, data, response) {
    var tweets = data[0].trends;
    var j = 0;

    for ( i=0; i < tweets.length; i++ ) {
        if ( tweets[i].tweet_volume ) {
            trendData[j] = {"name": tweets[i].name,
                            "query" : tweets[i].query,
                            "tweet_volume" : tweets[i].tweet_volume,
                            "date" : dt_format
                            };
            j++;
        }
    }

    console.log(trendData);

});


Run the script file
> /opt/node/bin/node tweet.js
[ { name: 'テレビ',
    query: '%E3%83%86%E3%83%AC%E3%83%93',
    tweet_volume: 595528,
    date: '8/25/2019, 8:57:15 PM' },
  { name: 'ライブ',
    query: '%E3%83%A9%E3%82%A4%E3%83%96',
    tweet_volume: 529983,
    date: '8/25/2019, 8:57:15 PM' },
  { name: '誕生日',
    query: '%E8%AA%95%E7%94%9F%E6%97%A5',
    tweet_volume: 202457,
    date: '8/25/2019, 8:57:15 PM' },
  { name: '#sbhawks',
    query: '%23sbhawks',
    tweet_volume: 11577,
    date: '8/25/2019, 8:57:15 PM' },
  { name: '久しぶり',
    query: '%E4%B9%85%E3%81%97%E3%81%B6%E3%82%8A',
    tweet_volume: 199483,
    date: '8/25/2019, 8:57:15 PM' } ]