LoginSignup
50
19

More than 5 years have passed since last update.

circleci/ruby:2.4.1-node-browsersって何入ってるのか知りたかった

Last updated at Posted at 2017-07-15

2018-11-19追記
https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/
いつの間にか公開されてました

動機

  • circleciが提供しているdockerファイルで、rubyのバージョンとして、node, browswer , node-browsersとかがあった
    • setup-projectしたときのデフォルトはnode-browsersだった
    • 地味にsetup projectでボイラープレート出てくるのも知らなかった。。。
  • なんとなくフロント好きおじさんからするとnodeってバージョン何入ってるんだ!が気になった。

dockerの中身が見たい。

残念ながらDockerfileは公開されていないっぽい

ここでdocker historyコマンドがあると知った。

$ docker pull circleci/ruby:2.4.1-node-browsers
$ docker history --no-trunc --format "{{.CreatedBy}}" circleci/ruby:2.4.1-node-browsers

今回はコマンド何やってるか知れれば良いだけなのでformatかける

circleci/ruby:2.4.1-node-browsersは何が入っているっぽいか荒目に見る

historyなので、実行が逆順。先頭の方が後に行っているコマンド

entrypoint

docker-entrypoint.shはssh接続したら見れそうだけど、今のところ興味ないのでスルー

#(nop)  CMD ["/bin/sh"]
#(nop)  ENTRYPOINT ["/docker-entrypoint.sh"]
#(nop)  LABEL com.circleci.preserve-entrypoint=true

browser関連インストール

怒号感ある。

printf '#!/bin/sh\nXvfb :99 -screen 0 1280x1024x24 &\nexec "$@"\n' > /tmp/entrypoint  && chmod +x /tmp/entrypoint         && sudo mv /tmp/entrypoint /docker-entrypoint.sh
#(nop)  ENV DISPLAY=:99
export CHROMEDRIVER_RELEASE=$(curl --location --fail --retry 3 http://chromedriver.storage.googleapis.com/LATEST_RELEASE)       && curl --silent --show-error --location --fail --retry 3 --output /tmp/chromedriver_linux64.zip "http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_RELEASE/chromedriver_linux64.zip"       && cd /tmp       && unzip chromedriver_linux64.zip       && rm -rf chromedriver_linux64.zip       && sudo mv chromedriver /usr/local/bin/chromedriver       && sudo chmod +x /usr/local/bin/chromedriver
curl --silent --show-error --location --fail --retry 3 --output /tmp/google-chrome-stable_current_amd64.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb       && (sudo dpkg -i /tmp/google-chrome-stable_current_amd64.deb || sudo apt-get -fy install)        && rm -rf /tmp/google-chrome-stable_current_amd64.deb       && sudo sed -i 's|HERE/chrome"|HERE/chrome" --disable-setuid-sandbox --no-sandbox|g'            "/opt/google/chrome/google-chrome"
curl --silent --show-error --location --fail --retry 3 --output /tmp/firefox.deb https://s3.amazonaws.com/circle-downloads/firefox-mozilla-build_47.0.1-0ubuntu1_amd64.deb   && echo 'ef016febe5ec4eaf7d455a34579834bcde7703cb0818c80044f4d148df8473bb  /tmp/firefox.deb' | sha256sum -c   && sudo dpkg -i /tmp/firefox.deb || sudo apt-get -f install    && sudo apt-get install -y libgtk3.0-cil-dev   && rm -rf /tmp/firefox.deb
export PHANTOMJS_VERSION=$(curl --location --fail --retry 3  https://api.github.com/repos/ariya/phantomjs/tags | jq -r '.[0].name')   && sudo apt-get update; sudo apt-get install libfontconfig   && curl --silent --show-error --location --fail --retry 3 --output /tmp/phantomjs.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-${PHANTOMJS_VERSION}-linux-x86_64.tar.bz2   && tar -x -C /tmp -f /tmp/phantomjs.tar.bz2   && sudo mv /tmp/phantomjs-${PHANTOMJS_VERSION}-linux-x86_64/bin/phantomjs /usr/local/bin   && rm -rf /tmp/phantomjs.tar.bz2 /tmp/phantomjs-*
#(nop)  USER [circleci]

こんな感じが読み取れる

  • xvfbが入ってるっぽい
  • chromedriver入れてる
  • chrome入れてる
  • firefox入れてる
  • phantomjs入れてる

node & yarnインストール

set -ex   && for key in     6A010C5166006599AA17F08146C2130DFD2497F5   ; do     gpg --keyserver pgp.mit.edu --recv-keys "$key" ||     gpg --keyserver keyserver.pgp.com --recv-keys "$key" ||     gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ;   done   && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz"   && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc"   && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz   && mkdir -p /opt/yarn   && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1   && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn   && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg   && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz
#(nop)  ENV YARN_VERSION=0.24.6
curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz"   && curl -SLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"   && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc   && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c -   && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1   && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt   && ln -s /usr/local/bin/node /usr/local/bin/nodejs
#(nop)  ENV NODE_VERSION=8.1.4
#(nop)  ENV NPM_CONFIG_LOGLEVEL=info
  • yarn入れてる
  • node入れてる
    • nodeが8.1ということも判明

なるほど。このへんまでで-node-browswerとわかった。わりと想像通り。

dockerなどツール系インストール

set -ex   && for key in     9554F04D7259F04124DE6B476D5A82AC7E37093B     94AE36675C464D64BAFA68DD7434390BDBE9B9C5     FD3A5288F042B6850C66B31F09FE44734EB7990E     71DCFD284A79C3B38668286BC97EC7A07EDE3FC1     DD8F2338BAE7501E3DD5AC78C273792F7D83545D     B9AE9905FFD7803F25714661B63B535A4C206CA9     C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8     56730D5401028683275BD23C23EFEFE93C4CFFFE   ; do     gpg --keyserver pgp.mit.edu --recv-keys "$key" ||     gpg --keyserver keyserver.pgp.com --recv-keys "$key" ||     gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ;   done
groupadd --gid 1000 node   && useradd --uid 1000 --gid node --shell /bin/bash --create-home node
#(nop)  USER [root]
#(nop)  CMD ["/bin/sh"]
#(nop)  USER [circleci]
groupadd --gid 3434 circleci   && useradd --uid 3434 --gid circleci --shell /bin/bash --create-home circleci   && echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci   && echo 'Defaults    env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep
DOCKERIZE_URL=$(curl --location --fail --retry 3 https://api.github.com/repos/jwilder/dockerize/releases/latest | jq -r '.assets[] | select(.name | startswith("dockerize-linux-amd64")) | .browser_download_url')   && curl --silent --show-error --location --fail --retry 3 --output /tmp/dockerize-linux-amd64.tar.gz $DOCKERIZE_URL   && tar -C /usr/local/bin -xzvf /tmp/dockerize-linux-amd64.tar.gz   && rm -rf /tmp/dockerize-linux-amd64.tar.gz
COMPOSE_URL=$(curl --location --fail --retry 3 https://api.github.com/repos/docker/compose/releases/latest | jq -r '.assets[] | select(.name == "docker-compose-Linux-x86_64") | .browser_download_url')   && curl --silent --show-error --location --fail --retry 3 --output /usr/bin/docker-compose $COMPOSE_URL   && chmod +x /usr/bin/docker-compose
set -ex   && export DOCKER_VERSION=$(curl --silent --fail --retry 3 https://get.docker.com/builds/  | grep -P -o 'docker-\d+\.\d+\.\d+-ce\.tgz' | head -n 1)   && DOCKER_URL="https://get.docker.com/builds/Linux/x86_64/${DOCKER_VERSION}"   && echo Docker URL: $DOCKER_URL   && curl --silent --show-error --location --fail --retry 3 --output /tmp/docker.tgz "${DOCKER_URL}"   && ls -lha /tmp/docker.tgz   && tar -xz -C /tmp -f /tmp/docker.tgz   && mv /tmp/docker/* /usr/bin   && rm -rf /tmp/docker /tmp/docker.tgz
JQ_URL=$(curl --location --fail --retry 3 https://api.github.com/repos/stedolan/jq/releases/latest  | grep browser_download_url | grep '/jq-linux64"' | grep -o -e 'https.*jq-linux64')   && curl --silent --show-error --location --fail --retry 3 --output /usr/bin/jq $JQ_URL   && chmod +x /usr/bin/jq

docker関連とか色々瑣末なやつ入れている
* jq
* jsonパーサー
* dockerize
* https://github.com/jwilder/dockerize
* 専門知識が薄い部分なのでよくわかってないが、コンテナの起動関連?
* compose
* https://github.com/docker/compose/
* docker-compose。複数のdockerを扱うやつ

apt-get

gitやxvfbなどapt-getしてる

#(nop)  ENV LANG=C.UTF-8
locale-gen C.UTF-8 || true
ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime
apt-get update   && apt-get install -y     git mercurial xvfb     locales sudo openssh-client ca-certificates tar gzip parallel     net-tools netcat unzip zip bzip2
#(nop)  ENV DEBIAN_FRONTEND=noninteractive
echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/90circleci   && echo 'APT::Get::force-Yes "true";' >> /etc/apt/apt.conf.d/90circleci   && echo 'DPkg::Options "--force-confnew";' >> /etc/apt/apt.conf.d/90circleci
  • apt-getで色々入れてる
    • git / mercurial
    • xvfb
    • locales / sudo
    • openssh-client / ca-certificates
    • tar / gzip parallel
    • net-tools / netcat
    • unzip / zip / bzip2
  • このへんはdockerhubに書いてる感じ

rubyインストール

#(nop)  CMD ["irb"]
mkdir -p "$GEM_HOME" "$BUNDLE_BIN"  && chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
#(nop)  ENV PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#(nop)  ENV BUNDLE_PATH=/usr/local/bundle BUNDLE_BIN=/usr/local/bundle/bin BUNDLE_SILENCE_ROOT_WARNING=1 BUNDLE_APP_CONFIG=/usr/local/bundle
#(nop)  ENV GEM_HOME=/usr/local/bundle
gem install bundler --version "$BUNDLER_VERSION"
#(nop)  ENV BUNDLER_VERSION=1.15.1
set -ex   && buildDeps='   bison   dpkg-dev   libgdbm-dev   ruby  '  && apt-get update  && apt-get install -y --no-install-recommends $buildDeps  && rm -rf /var/lib/apt/lists/*   && wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"  && echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum -c -   && mkdir -p /usr/src/ruby  && tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1  && rm ruby.tar.xz   && cd /usr/src/ruby   && {   echo '#define ENABLE_PATH_CHECK 0';   echo;   cat file.c;  } > file.c.new  && mv file.c.new file.c   && autoconf  && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"  && ./configure   --build="$gnuArch"   --disable-install-doc   --enable-shared  && make -j "$(nproc)"  && make install   && apt-get purge -y --auto-remove $buildDeps  && cd /  && rm -r /usr/src/ruby   && gem update --system "$RUBYGEMS_VERSION"
#(nop)  ENV RUBYGEMS_VERSION=2.6.12
#(nop)  ENV RUBY_DOWNLOAD_SHA256=4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
#(nop)  ENV RUBY_VERSION=2.4.1
#(nop)  ENV RUBY_MAJOR=2.4
mkdir -p /usr/local/etc  && {   echo 'install: --no-document';   echo 'update: --no-document';  } >> /usr/local/etc/gemrc
set -ex;  apt-get update;  apt-get install -y --no-install-recommends   autoconf   automake   bzip2   file   g++   gcc   imagemagick   libbz2-dev   libc6-dev   libcurl4-openssl-dev   libdb-dev   libevent-dev   libffi-dev   libgdbm-dev   libgeoip-dev   libglib2.0-dev   libjpeg-dev   libkrb5-dev   liblzma-dev   libmagickcore-dev   libmagickwand-dev   libncurses-dev   libpng-dev   libpq-dev   libreadline-dev   libsqlite3-dev   libssl-dev   libtool   libwebp-dev   libxml2-dev   libxslt-dev   libyaml-dev   make   patch   xz-utils   zlib1g-dev     $(    if apt-cache show 'default-libmysqlclient-dev' 2>/dev/null | grep -q '^Version:'; then     echo 'default-libmysqlclient-dev';    else     echo 'libmysqlclient-dev';    fi   )  ;  rm -rf /var/lib/apt/lists/*
apt-get update && apt-get install -y --no-install-recommends   bzr   git   mercurial   openssh-client   subversion     procps  && rm -rf /var/lib/apt/lists/*
apt-get update && apt-get install -y --no-install-recommends   ca-certificates   curl   wget  && rm -rf /var/lib/apt/lists/*
#(nop)  CMD ["bash"]
#(nop) ADD file:9c48682ff75c756544d4491472081a078edf5dd0bb5038d1cb850a1f9c480e3e in / 
  • ruby系のインストール
  • bundlerのインストール
  • apt-getでビルドに必要なもの入れているっぽい

結論

  • circleci/ruby:2.4.1-node-browsersはわりと名前の通り
    • xvfbとかphantomjsとかchromeとかそのへん使う場合に有益っぽい
    • nodeは8系。stableを使うポリシーなのかedgeを利用するポリシーなのかとかは不明
      • 地味に一番知りたかったのはこれだった。目的達成
  • 他のtagは?
    • 普通にそれぞれが必要な分入ってる
    • circleci/ruby:2.4.1-nodeだとchromeとかxvfb入ってない
    • circleci/ruby:2.4.1-browsersだとnodeとかyarn入らない
50
19
1

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
50
19