DockerImageをDockerHubに登録する方法

# はじめに

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
```

![kobito.1469590120.457475.png](https://qiita-image-store.s3.amazonaws.com/0/5390/bd2cbd8d-b004-bbee-d741-0f765f53b0aa.png "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](https://qiita-image-store.s3.amazonaws.com/0/5390/1c37540b-2a44-638b-52e2-f5e0d9bf2497.png "スクリーンショット 2016-07-27 12.33.13.png")

---

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

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

![スクリーンショット 2016-07-27 12.49.10.png](https://qiita-image-store.s3.amazonaws.com/0/5390/c4015d93-4131-d211-6401-e6258b5a4629.png "スクリーンショット 2016-07-27 12.49.10.png")

---
Build Detailsのタブを押すとDockerfileがコンパイルされていることがわかる
![kobito.1469596464.937349.png](https://qiita-image-store.s3.amazonaws.com/0/5390/0c8a0263-1557-9f1f-59cb-68b7efe8b4b3.png "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も無い

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

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