Dockerでamazonlinuxを利用してnodejsの環境を作成する

##Dockerfileの書き方
参考記事

https://qiita.com/pottava/items/452bf80e334bc1fee69a

##amazonlinuxをイメージにコンテナを作成
なるべくEC2と同じ環境で作業したいためamazonlinuxでの環境構築を行う

```
ローカルの作業ディレクトリ> docker run -it amazonlinux
Unable to find image 'amazonlinux:latest' locally
latest: Pulling from library/amazonlinux
85ee02fe1a09: Pull complete
Digest: sha256:2e42b5d170dbb6d54d35b3b64627480de9687b52cfbab2086267a0fd2acd7bef
Status: Downloaded newer image for amazonlinux:latest
bash-4.2# ls -lta
total 60
drwxr-xr-x   5 root root  360 Jul  3 11:32 dev
dr-xr-xr-x  13 root root    0 Jul  3 11:32 sys
dr-xr-xr-x 168 root root    0 Jul  3 11:32 proc
drwxr-xr-x   1 root root 4096 Jul  3 11:32 .
drwxr-xr-x   1 root root 4096 Jul  3 11:32 ..
-rwxr-xr-x   1 root root    0 Jul  3 11:32 .dockerenv
drwxr-xr-x   1 root root 4096 Jul  3 11:32 etc
drwxr-xr-x   2 root root 4096 Jun 17 01:48 run
drwxr-xr-x  18 root root 4096 Jun 17 01:48 var
lrwxrwxrwx   1 root root    7 Jun 17 01:48 bin -> usr/bin
lrwxrwxrwx   1 root root    7 Jun 17 01:48 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Jun 17 01:48 lib64 -> usr/lib64
lrwxrwxrwx   1 root root    8 Jun 17 01:48 sbin -> usr/sbin
drwxr-xr-x  13 root root 4096 Jun 17 01:48 usr
drwxr-xr-x   2 root root 4096 Jun 17 01:48 local
drwxrwxrwt   2 root root 4096 Jun 17 01:48 tmp
dr-xr-xr-x   2 root root 4096 Apr  9  2019 boot
drwxr-xr-x   2 root root 4096 Apr  9  2019 home
drwxr-xr-x   2 root root 4096 Apr  9  2019 media
drwxr-xr-x   2 root root 4096 Apr  9  2019 mnt
drwxr-xr-x   2 root root 4096 Apr  9  2019 opt
dr-xr-x---   2 root root 4096 Apr  9  2019 root
drwxr-xr-x   2 root root 4096 Apr  9  2019 srv
```
無事にamazonlinuxをイメージとしてコンテナの起動ができてるはず

## nodejsをインストールする
とりあえず下記コマンドを実行

```
yum update -y
~省略~
Complete!
```
nodejsのインストールを実施

```
bash-4.2# yum install nodejs npm
Loaded plugins: ovl, priorities
No package nodejs available.
No package npm available.
Error: Nothing to do
```
失敗、通常yumではnodejsはインストール出来ない模様
公式に記載されているamazonlinux用の作業を実践

https://nodejs.org/en/download/package-manager/#centos-fedora-and-red-hat-enterprise-linux

https://github.com/nodesource/distributions/blob/master/README.md

```
bash-4.2# curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -

## Installing the NodeSource Node.js 16.x repo...


## Inspecting system...

+ rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release || rpm -q --whatprovides fedora-release
+ uname -m

## Confirming "el7-x86_64" is supported...

+ curl -sLf -o /dev/null 'https://rpm.nodesource.com/pub_16.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'

## Downloading release setup RPM...

+ mktemp
+ curl -sL -o '/tmp/tmp.z8z9Q1v7OL' 'https://rpm.nodesource.com/pub_16.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'

## Installing release setup RPM...

+ rpm -i --nosignature --force '/tmp/tmp.z8z9Q1v7OL'

## Cleaning up...

+ rm -f '/tmp/tmp.z8z9Q1v7OL'

## Checking for existing installations...

+ rpm -qa 'node|npm' | grep -v nodesource

## Run `sudo yum install -y nodejs` to install Node.js 16.x and npm.
## You may also need development tools to build native addons:
     sudo yum install gcc-c++ make
## To install the Yarn package manager, run:
     curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
     sudo yum install yarn
```
NodeSourceのリポジトリを追加する事で実行可能になる

参考記事

https://qiita.com/rkunihiro/items/6e7be8cf67a1ef78938a

nodejsのインストール作業

```
bash-4.2# yum install -y nodejs
~省略~
Installed:
  nodejs.x86_64 2:16.4.1-1nodesource

Complete!
bash-4.2# node -v
v16.4.1
```

##Dockerfileへとまとめる
Expressを利用する環境を作成し確認する。

```docker
FROM amazonlinux

WORKDIR /usr/src/app

RUN yum update -y && \
    curl -fsSL https://rpm.nodesource.com/setup_16.x | bash && \
    yum install -y nodejs && \
    # Expressの環境構築
    cd /usr/src/app && \
    npm init -y  && \
    npm install express --save

COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]
```

https://nodejs.org/ja/docs/guides/nodejs-docker-webapp/