はじめに
DockerでCentOSでRuby2.3.1が動くイメージがないので作った
本投稿はkawasaki.rbのLTで使用したものです
@kon_yu
2016/07/27 kawasaki.rb
以下の様な内容を記載しています
- Docker for macのインストール方法
- Dockerfileってどう作るの?
- ローカル環境で作ったDockerfileを使ってインストール
- DockerfileをDockerHubへ登録する
- DockerHubとGithubを連携してDockerfileを登録する
Docker for macをインストールする
https://docs.docker.com/docker-for-mac/
Get Docker for Mac のボタンを押して、DMGファイルをダウンロードする
ダウンローしたファイルをダブルクリックして、インストール
インストールには結構時間がかかり、既存のDockerが入っている場合はマイグレーションが走るため更に時間がかかる
Docker Toolboxからインストールしたものがる場合は、マイグレーションでほぼ同等の大きさのディスク容量を食うため古い方のDockerを削除する必要がある
削除方法はこちら http://qiita.com/kon_yu/items/457c9652d0de3f64c31f
Dockerfileを作る
# set base OS image
FROM centos:latest
# set Ruby installed Dir
ENV RUBY_DIR /ruby/
ENV RUBY_VERSION 2.3.1
ENV RUBY_INSTALL $RUBY_DIR/$RUBY_VERSION
# install packeges for installing Ruby
RUN yum update -y && \
yum install -y install epel-release && \
yum install -y bzip2 make which wget tar git nodejs \
gcc patch readline-devel zlib-devel \
libyaml-devel openssl-devel \
gdbm-devel ncurses-devel libxml-devel
RUN yum clean all
# install Ruby with ruby-build
RUN mkdir $RUBY_DIR && \
cd $RUBY_DIR && \
git clone https://github.com/sstephenson/ruby-build.git && \
$RUBY_DIR/ruby-build/install.sh && \
cd $RUBY_DIR/ruby-build && ./bin/ruby-build $RUBY_VERSION $RUBY_INSTALL && \
rm -rf $RUBY_DIR/ruby-build
ENV PATH $RUBY_INSTALL/bin:$PATH
DockerfileからDocker Imageを作る
image名を-tオプションでつけてる。
このときdockerhubでつけるアカウント名/イメージ名にしておかないとDockerHubにアップすることが出来ないので注意
Dockerfileのあるディレクトリに行き以下のコマンドを実行(最後のピリオドを忘れないように)
> docker build -t konyu/centos_ruby .
結構時間がかかるので注意すること
Docker imageが作られていることを確認する
centos_rubyと言うrepositoryができていれば成功
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
konyu/centos_ruby latest 78ed661736e3 3 minutes ago 550.4 MB
Docker imageからコンテナを作る
imageを指定してコンテナを起動する
> docker run -it --rm centos_ruby bash
-it コンテナ起動時に起動時にシェルでログインする
--rm コンテナから抜けるタイミングでコンテナを破棄する
RubyのバージョンとOSのバージョンを確認
> ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
> cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
DockerHubに登録する
DockerHubにアカウント登録
https://hub.docker.com/
ここからローカルからイメージをプッシュする方法と、Github連携する方法の2つあり、
それぞれの方法を共有する。
オススメは後述のGithub連携
## ローカルからイメージをプッシュする方法
DockerHubにコマンドラインからログインする
> docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: アカウント名
Password: パスワード
Login Succeeded
DockerHubにイメージをプッシュする
> docker push konyu/centos_ruby:latest
The push refers to a repository [docker.io/konyu/centos_ruby]
c789971294c7: Pushed
94e172a9994f: Pushed
31fa1a4603e2: Pushed
0fe55794a0f7: Pushed
latest: digest: sha256:c3ea799950c079f50b67a7ba570618cc1784c17e8c4f5e87e5f210d78f74dc1e size: 1163
Githubと連携する(オススメ!)
対象のDockerfileをGithubのでホスティングする
GithubにDockerfileを含んだリポジトリを登録する
https://github.com/konyu/centos7-ruby23
DockerHubへ行き「Create automated build」ボタンを押す
Githubと連携し、DockerHubに連携するリポジトリを選択する
対象のDockerHubのリポジトリからBuild Settingsを選択し、下記のTriggerボタンを押す
Build Detailsのタブを押すとDockerfileがコンパイルされていることがわかる
作ったDockerImageをDockerHubから利用してみよう
DockerHubにあるイメージ名を指定してdocker runしてやる
docker run --rm -it konyu/centos7-ruby23
Unable to find image 'konyu/centos7-ruby23:latest' locally
latest: Pulling from konyu/centos7-ruby23
8c3d77a518cb: Already exists
60683d059310: Pull complete
908e534a605e: Pull complete
ddd64406a2ab: Pull complete
Digest: sha256:5d616e0a1494aba10ff8dc3cca5b769ea659aeb1f6034c1bc829052dd5495c06
Status: Downloaded newer image for konyu/centos7-ruby23:latest
[root@b922eecdd73d /]# ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
ハマったところ
CentOSのcoreは最小限過ぎるところがあってハマった
- fileコマンドをインストールしておかないとpaperclipでファイルアップロードできなかった
- crondも無い
技術顧問案件募集しています(お仕事ください)
採用補助、設計レビュー、技術的負債の解消、開発戦略の相談 などなど