DockerでPuppeteerをしよう

docker、puppeteer共に初めてでしたが、結構あっさりできました。
でもすぐ忘れそうなのでメモ残しておきます。
私の使用環境はMacです。

#DockerをMacにインストール
公式サイトからDocker for Macをインストールします。
https://hub.docker.com/editions/community/docker-ce-desktop-mac

<img width="984" alt="スクリーンショット 2019-01-11 10.32.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/98758/777ba492-873c-24d0-bd21-d8b8a5ce421c.png">

青い[Get Docker]というボタンを押すと、DockerhubのSignUpを求められます。
別にDockerHubは使う予定なかったのでID作りたくなかったのですが、回避方法が見つからずSignUpしました。

言われるがままに進んでいくと、インストールし起動できます。

インストールの確認は、定番のversion確認を行いました。

```
mbp:~ kuniatsu$ docker version
Client: Docker Engine - Community
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:47:43 2018
 OS/Arch:           darwin/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:55:00 2018
  OS/Arch:          linux/amd64
  Experimental:     false
mbp:~ kuniatsu$

```

#環境に入り作業する
Dockerは用意されているimageをbuildしてcontainerを作成します。
最初何言ってるか自分も最初は何言ってるか全くわからなかったのですが、やってくうちにそこそこつかめました。

おかしいと突っ込まれそうですが、
・Dockerのimageはプログラムで言う所のclass
・Dockerのcontainerはプログラムで言う所のinstance
のようなイメージです。（だと思ってます）


```$ docker pull node:8.4 ```

index（Dockerの公式）からnode.jsのversion8.4のimageをDLする。

```$ docker images```
imageの一覧を表示（DLしたのでnodeが追加されている)

```
$ docker pull node:8.4
8.4: Pulling from library/node
aa18ad1a0d33: Pull complete
90f6d19ae388: Pull complete
94273a890192: Pull complete
c9110c904324: Pull complete
788d73c0fb6b: Pull complete
f221bb562f24: Pull complete
14414a6a768d: Pull complete
af6d2b2ad991: Pull complete
Digest: sha256:080488acfe59bae32331ce28373b752f3f848be8b76c2c2d8fdce28205336504
Status: Downloaded newer image for node:8.4
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                8.4                 386940f92d24        16 months ago       673MB
```

```$ sudo docker run -i -t node  /bin/bash```
-i ・・・インタラクティブモード
-t ・・・コンテナの中でターミナルを立ち上げる。
imageからcontainerを作成し、bashで操作する。

```$ docker ps -a```
作られているcontainerを確認する。


```$ docker exec -i -t [container_id]  /bin/bash```
再びcontainerをbashで操作する
（container_idは$ docker ps -aで調べる）


```$docker rm [container_id]```
containerを削除
（container_idは$ docker ps -aで調べる）


```$ docker rmi image_id```
imageを削除
（image_idは$ docker imagesで調べる）




#Puppeteerをインストールする
```
root@999999e9bb99:/# apt-get update
```
aptをアップデートする


```
root@999999e9bb99:/# apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget fonts-noto-cjk 
```
Puppeteerに必要なライブラリをインストール


```
root@999999e9bb99:/# npm install  puppeteer
```
npmからpuppeteerをインストール
使っているimageがnodeじゃない人は、nodeをインストールしてください。
```root@999999e9bb99:/# apt-get install -y nodejs npm```



#Dockerfileを作成する

先ほどimageはclassのようなものだと思い込んでると書きましたが、
Dockerfileを作ることによってオーバーライドできるイメージです。
Dockerfileにここまでやってきた手順を記載してしまえば、
Dockerfileをbuildしてimageからcontainerを作れば手続き不要です。


##Debian系

```
mbp:dockers kuniatsu$ cat Dockerfile 
 FROM node:8.4
 MAINTAINER kuniatsu
 
 # 日本語文字化け対策
 RUN echo 'deb http://ftp.jp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list
 
 #puppeteerに必要なlibrary
 RUN set -ex; \
        apt-get update; \
        apt-get install -y --no-install-recommends \
                gconf-service \
                libasound2 \
                libatk1.0-0 \
                libc6 \
                libcairo2 \
                libcups2 \
                libdbus-1-3 \
                libexpat1 \
                libfontconfig1 \
                libgcc1 \
                libgconf-2-4 \
                libgdk-pixbuf2.0-0 \
                libglib2.0-0 \
                libgtk-3-0 \
                libnspr4 \
                libpango-1.0-0 \
                libpangocairo-1.0-0 \
                libstdc++6 \
                libx11-6 \
                libx11-xcb1 \
                libxcb1 \
                libxcomposite1 \
                libxcursor1 \
                libxdamage1 \
                libxext6 \
                libxfixes3 \
                libxi6 \
                libxrandr2 \
                libxrender1 \
                libxss1 \
                libxtst6 \
                ca-certificates \
                fonts-liberation \
                libappindicator1 \
                libnss3 \
                lsb-release \
                xdg-utils \
                wget \
                fonts-noto-cjk \
                vim
 
 RUN npm install  puppeteer
 CMD ["echo","now runing..."]
```



##Red Hat系
のちにAWSで使うことになったので、Red Hat系も参考に載せておきます。

```
mbp:dockers kuniatsu$ cat Dockerfile 
FROM amazonlinux
MAINTAINER kuniatsu
RUN echo "now building..."
RUN curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
RUN set -ex; \
        yum -y update; \
        yum -y install \
            vim \
            nodejs \
            libX11 \
            libXcomposite \ 
            libXcursor \
            libXdamage \
            libXext \
            libXi \
            libXtst \
            cups-libs \
            libXScrnSaver \
            libXrandr \
            alsa-lib \
            pango \
            atk \
            at-spi2-atk \
            gtk3
RUN node -v
RUN npm install  puppeteer
CMD ["echo","now runing..."]
```

```$ docker build -t [name] .```
Dockerfileをimageにする


```$ sudo docker run -i -t name  /bin/bash```
後は、imageと同じ使い方。