LoginSignup
1
0

More than 5 years have passed since last update.

Scraping on Docker for Mac

Last updated at Posted at 2019-02-11

作った環境まとめ(後ほど追記する可能性)
https://github.com/dich1/selenium_ruby

概要

Dockerでスクレイピングをselenium-rubyを使ってGUIで起動しつつ、ホストからも確認できる環境

初期設定

Homebrewを入れる
brew install socat
brew tap caskroom/cask
brew cask install xquartz

使い方

1. Docker for macを入れ、Dockerを起動する

2. ボリュームを作成する  
docker volume create --name=mysql-data

3. プロジェクトのルートに移動する

4. イメージを作成、コンテナを起動する  
docker-compose up -d

5.Mac側からのスクリプトGUI確認準備
別タブのターミナルを開いて下記を実行
open -a XQuartz
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
XQuartzが開き、socatが起動中になっていることを確認

6. 動作確認  
docker-compose run --rm -e DISPLAY=MACのIP(ifconfigのinet 192.168.~):0 app ruby /selenium_ruby/app/tests.rb

7. XQuartzが立ち上がり画面から処理がみえる事の確認

構成

$ tree
.
└── selenium_ruby(プロジェクト名)
    ├── README.md (環境構築、実行方法を記載)
    ├── app(アプリケーションコンテナ)
    │   ├── Dockerfile(イメージ生成元ファイル)
    │   ├── Gemfile(アプリケーションコンテナ内で使うRubyモジュール)
    │   ├── google-chrome.repo(CentOSでchromeを使用するの必要なファイル)
    │   └── tests.rb(テスト用スクリプトが記載されているファイル)
    ├── docker-compose.yml(アプリケーションコンテナとデータベースコンテナを管理するファイル)
    ├── local-setup.sh(初回時使うコマンドまとめ)
    └── mysql(データベースコンテナ)
        ├── Dockerfile(イメージ生成元ファイル)
        └── my.cnf(データベース設定ファイル)

アプリケーションコンテナDockerfileについて

主に下記の事をやっています。
- CentOSのイメージ取得
- rbenvに必要なモジュールのインストール、パス設定
- Rubyの設定
- Gemの設定
- プロジェクトをコンテナ内にマウント
- chromedriverに必要なモジュール取得
- firefoxdriver取得(なくても良い)
- コンテナを起動させ続ける

app/Dockerfile
FROM drecom/centos-base:latest

# rbenv
RUN git clone git://github.com/rbenv/rbenv.git /usr/local/rbenv \
  &&  git clone git://github.com/rbenv/ruby-build.git \
/usr/local/rbenv/plugins/ruby-build \
  &&  git clone git://github.com/jf/rbenv-gemset.git \
/usr/local/rbenv/plugins/rbenv-gemset \
  &&  /usr/local/rbenv/plugins/ruby-build/install.sh
ENV PATH="/usr/local/rbenv/bin:$PATH" \
    RBENV_ROOT="/usr/local/rbenv"

RUN echo 'export RBENV_ROOT=/usr/local/rbenv' >> /etc/profile.d/rbenv.sh \
  &&  echo 'export PATH=/usr/local/rbenv/bin:$PATH' >> /etc/profile.d/rbenv.sh \
  &&  echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh

RUN echo 'export RBENV_ROOT=/usr/local/rbenv' >> /root/.bashrc \
  &&  echo 'export PATH=/usr/local/rbenv/bin:$PATH' >> /root/.bashrc \
  &&  echo 'eval "$(rbenv init -)"' >> /root/.bashrc

ENV CONFIGURE_OPTS="--disable-install-doc" \
    PATH="/usr/local/rbenv/bin:/usr/local/rbenv/shims:$PATH"

# ruby
RUN eval "$(rbenv init -)"; rbenv install 2.3.3 \
  &&  eval "$(rbenv init -)"; rbenv global 2.3.3 \
  &&  eval "$(rbenv init -)"; gem update --system \
  &&  eval "$(rbenv init -)"; gem install bundler --no-document --force

# project setting
RUN mkdir /selenium_ruby
WORKDIR /selenium_ruby
COPY . /selenium_ruby/app
WORKDIR /selenium_ruby/app
RUN bundle install
WORKDIR /

# chromedriver
ARG CHROME_DRIVER_VER=2.44
RUN yum install -y unzip
RUN curl -O https://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VER}/chromedriver_linux64.zip
RUN unzip chromedriver_linux64.zip
RUN mv chromedriver /usr/local/bin/

# dependencies
RUN yum install -y libX11 \
                   GConf2 \
                   fontconfig

# chrome
COPY ./google-chrome.repo /etc/yum.repos.d/google-chrome.repo
RUN yum install -y google-chrome-stable \
                   libOSMesa
RUN yum install -y google-noto-cjk-fonts \
                   ipa-gothic-fonts

# xvfb
RUN yum install -y zlib-devel xorg-x11-server-Xvfb gtk+-devel gtk2-devel
RUN yum groupinstall -y base "Development Tools" --setopt=group_package_types=mandatory,default,optional

# firefox
ENV FF_LANG="ja" \
    FF_BASE_URL="https://archive.mozilla.org/pub" \
    FF_PLATFORM="linux-x86_64" \
    FF_INNER_PATH="firefox/releases"

ARG FF_VER="45.7.0esr"

ENV FF_COMP="firefox-${FF_VER}.tar.bz2"
ENV FF_URL="${FF_BASE_URL}/${FF_INNER_PATH}/${FF_VER}/${FF_PLATFORM}/${FF_LANG}/${FF_COMP}"
RUN cd /opt \
  && wget -nv "${FF_URL}" -O "firefox.tar.bz2" \
  && bzip2 -d "firefox.tar.bz2" \
  && tar xf "firefox.tar" \
  && rm "firefox.tar" \
  && ln -fs /opt/firefox/firefox /usr/bin/firefox \
  && chmod -R 777 /opt/firefox

CMD tail -f /dev/null

データベースコンテナについて

主に以下のことをやっています。

  • データベースのイメージ取得
  • モジュールの最新化
  • 設定ファイルをコンテナ内にマウント
mysql/Dockerfile
FROM mysql:5.6

RUN apt-get update
RUN apt-get install -y locales

ADD ./my.cnf /etc/mysql/conf.d/my.cnf

mysql設定ファイル

my.cnf
[mysqld]
character-set-server=utf8mb4

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

docker-compose.ymlについて

主に以下のことをやっています。

  • 2つのコンテナをまとめて管理(起動時の起点のファイル)
docker-compose.yml
version: '3'
services:
  db:
    build: ./mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Tokyo
    volumes:
      - mysql-data:/var/lib/mysql
  app:
    build: ./app
    volumes:
      - .:/selenium_ruby
    links:
      - db
volumes:
  mysql-data:
    external: true

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0