CentOS7の検証用環境をDockerイメージとして作成し「Docker Hub」へプッシュする
はじめに
検証環境としてクリーンなCentOS7環境が必要なことが多いですが、とはいえほぼ必要になるツールが決まっていることが多いです。
アプリケーションのインストール方法として git
が必須ということが多いですし、 データ編集用や確認用に vim
や view
コマンドがあると便利です。
API呼び出し後のJSONデータ検証のために jq
が必要だったりもしますね。
そのような頻繁に使われるツールがインストール済みの薄いCentOS7環境が予めあると助かります。
Dockerのイメージ作成の復習も兼ねてイメージ作成から「Docker Hub」での公開までの流れをまとめてみました。
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ docker --version
Docker version 18.09.2, build 6247962
前提条件
- Dockerがインストールされていること
作業開始
作業用ディレクトリのディレクトリ作成
作業用のディレクトリを作成しましょう。
$ mkdir centos-sandbox
$ cd centos-sandbox
Dockerfile(Dockerイメージを作成するためのレシピ)を作成する
Dockerイメージを作成するための「レシピ」となる Dockerfile を作成します。
ここでは、 git
と vim
コマンドを使えるようにしています。
また yum
を使ったあとはキャッシュ情報がローカルディスクに残ってしまいますが、ディスク使用領域が増えるとDockerイメージが大きくなり、立ち上げや「Docker Hub」のアップロードが遅くなりますので削除しておきます。
実施した内容をブログやWikiに転記することも多いので、プロンプトはシンプルなもの( $
のみ )にしておきます。
$ cat <<'EOF'
FROM centos:centos7
RUN yum install -y git vim \
&& rm -rf /var/cache/yum/* \
&& yum clean all \
;
ENV PS1 '$ '
EOF
内容を確認します。
$ cat Dockerfile
FROM centos:centos7
RUN yum install -y git vim \
&& rm -rf /var/cache/yum/* \
&& yum clean all \
;
ENV PS1 '$ '
Dockerイメージを作成する
先程作成した Dockerfile
を使ってDockerのイメージを作成します。
-t
オプションでイメージにタグ(名前)を付与します。
ここでは genzouw/centos-sandbox
というタグ名を付与しています。(ややこしい書き方になっていますが、ディレクトリ名からタグ名を付与するようにしています。)
# docker build . --tag=genzouw/centos-sandbox でも同じ
$ docker build . --tag=genzouw/"$(basename $(readlink -f .))"
Sending build context to Docker daemon 2.048kB
...(省略)...
Successfully built d40f461d99f8
Successfully tagged genzouw/centos-sandbox:latest
作成できたか確認してみましょう。
# docker images | grep genzouw/centos-sandbox でも同じ
$ docker images | grep "$(basename $(readlink -f .))"
genzouw/centos-sandbox latest d40f461d99f8 20 hours ago 295MB
Dockerイメージを「Docker Hub」にプッシュ(アップロード)する
いよいよ、Dockerのイメージを「Docker Hub」にアップロードします。
「Docker Hub」のアカウントを作成
Docker Hubのページにアクセスし、アカウントを作成します。
ここでの注意点は、先程作成したDcokerイメージのタグ名のスラッシュ前方部分(僕の場合は genzouw/centos-sandbox
としているので、 genzouw
になりますね)とアカウント名を合わせておくということです。
タグ名の方を変更したい場合はもう一度 docker build
し直しましょう。
クライアントマシンで認証を行う
アカウント発行後はクライアントマシンで認証を行っておきます。
プッシュを行う前に認証して置かなければいけません。
# ユーザ名、パスワード、メールアドレスを入力してログインしましょう
$ docker login
Dockerイメージをにプッシュする
Dockerイメージをプッシュするには docker push
コマンドを利用します。
Dockerイメージを選択するには先程指定した「タグ名」を使います。
ここでは genzouw/centos-sandbox
というタグ名を選択しています。(ややこしい書き方になっていますが、ディレクトリ名からタグ名を付与するようにしています。)
# docker push genzouw/centos-sandbox でも同じ
$ docker push genzouw/"$(basename $(readlink -f .))"
The push refers to repository [docker.io/genzouw/centos-sandbox]
...
特にエラーがなければアップロード完了です。
「Docker Hub」のリポジトリページを確認
「Docker Hub」ページは以下のようになりました。
動作確認
本当にできたのか動作確認してみます。
アップロードしたDockerイメージファイルをクライアントマシン上から削除した後、「Docker Hub」からダウンロードしてこれるか確認してみます。
# クライアントマシン上のイメージを一度削除
$ docker rmi genzouw/centos-sandbox
Untagged: genzouw/centos-sandbox:latest
Untagged: genzouw/centos-sandbox@sha256:5da38cda138fd628895c5b258ffcad215832141b0b12ffad91c55f84a5240269
Deleted: sha256:d40f461d99f89003ba6bc976003ad5f272a5d3cbfd00b625c52cde5e41552d50
Deleted: sha256:036928fad58701c41846486b0d7e7f5f375706f495fb187a88e789a67d615afc
Deleted: sha256:a6af9067306b50027923396e1fc64c130ba7b3af6397a26f330e59cce1757841
# さて動作するか??
$ docker run --rm -it genzouw/centos-sandbox bash
初めてのダウンロードなので、1分程度かかります。
コンテナにログインできれば、 git
や vim
を実行してみましょう。利用できることがわかるはずです。
Dockerfile も公開しておこう
「Docker Hub」上に公開されているコンテナイメージですが、どんなセキュリティリスクがあるかわかりません。
レシピとなる Dockerfile
が公開されていれば利用者が判断できますが、 Dockerfile
が公開されていないイメージは利用されることは殆どないはずです。
せっかくなので Dockerfile
も公開してみてもらいましょう。
ここでは hub
コマンドを使って「Github」おリポジトリを作成していますが、ブラウザから手動操作で作成しても構いません。
# ローカルリポジトリ作成
$ git init
Initialized empty Git repository in /private/tmp/work/centos-sandbox/.git/
# ファイルを追加
$ git add .
# コミット
$ git commit -m "first commit."
[master (root-commit) bd62a6b] first commit.
1 file changed, 8 insertions(+)
create mode 100644 Dockerfile
# Githubの公開リポジトリを作成します。(非公開にしないこと!)
$ hub create -o
# Githubにプッシュ
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 311 bytes | 311.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:genzouw/centos-sandbox.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
作成後は「Docker Hub」のリポジトリページと「Github」の公開リポジトリを紐づけてやります。
こちらのページを開き、 「Link to Github」 ボタンを押す。
紐づけしたい「Github」リポジトリを選択します。
正しく設定ができれば、他のユーザからはこのように見えます。
Github連携機能のすごいところ
「Github」連携機能ですが、 Dockerfile
を編集して「Github」にプッシュしたタイミングで、「Docker Hub」にフックされるようです。
「Docker Hub」はフックをトリガにビルドした後、Dockerイメージを自動的に作り直してくれます。ホント便利。
ひとこと
無料でこのような環境を提供してくれるなんて素晴らしいですね。
ディスカッション
コメント一覧
まだ、コメントがありません