Docker로 Puppeteer를합시다.

docker, puppeteer 모두 처음이었습니다만, 상당히 깔끔하게 할 수 있었습니다.
하지만 곧 잊을 것 같아서 메모 남겨 둡니다.
내 사용 환경은 Mac입니다.

Docker를 Mac에 설치



공식 사이트에서 Docker for Mac을 설치합니다.
htps // // 후 b. 두 c r. 코 m / 에이 치온 s / 콧물에 ty / 도 c 케 루세로 sk와 p 마 c



파란색 [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는 제공된 이미지를 빌드하여 컨테이너를 만듭니다.
처음 무슨 말을 하는지 자신도 처음에는 무슨 말을 하는지 전혀 몰랐습니다만, 하고 있을 때에 적당히 잡았습니다.

이상하면 돌진할 것 같지만,
・Docker의 image는 프로그램으로 말하는 곳의 class
・Docker의container는 프로그램으로 말하는 곳의 instance
같은 이미지입니다. (그렇다고 생각합니다)
$ docker pull node:8.4
index (Docker의 공식)에서 node.js의 version8.4의 image를 DL한다.
$ docker imagesimage의 일람을 표시(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 ···컨테이너 안에서 터미널을 시작한다.
이미지에서 컨테이너를 만들고 bash로 조작합니다.
$ docker ps -a만들어진 컨테이너를 확인합니다.
$ docker exec -i -t [container_id] /bin/bash다시 컨테이너를 bash로 조작
(container_id는 $ docker ps -a로 확인)
$docker rm [container_id]container 삭제
(container_id는 $ docker ps -a로 확인)
$ docker rmi image_id이미지 삭제
(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를 만들면 절차 불필요합니다.

데비안계


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을 이미지로 만들기
$ sudo docker run -i -t name /bin/bash후에는 image와 같은 사용법.

좋은 웹페이지 즐겨찾기