DockerImageをDockerHubに登録の仕方

  • 5
    いいね
  • 0
    コメント

はじめに

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と言うreposigtoryができていれば成功

> 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

kobito.1469590120.457475.png


Githubと連携する(オススメ!)

対象のDockerfileをGithubのでホスティングする
GithubにDockerfileを含んだリポジトリを登録する
https://github.com/konyu/centos7-ruby23


DockerHubへ行き「Create automated build」ボタンを押す

スクリーンショット 2016-07-27 12.33.13.png


Githubと連携し、DockerHubに連携するリポジトリを選択する

対象のDockerHubのリポジトリからBuild Settingsを選択し、下記のTriggerボタンを押す

スクリーンショット 2016-07-27 12.49.10.png


Build Detailsのタブを押すとDockerfileがコンパイルされていることがわかる
kobito.1469596464.937349.png


作った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も無い

技術顧問案件募集しています(お仕事ください)

採用補助、設計レビュー、技術的負債の解消、開発戦略の相談 などなど