流行りのDockerの使い方について触って覚える (CentOS7編)①

ども。あいしんくいっとです。しれっとブログタイトルを「あい・しんく・いっと」から「あいしんくいっと」に変更しました。
と、気を取り直して2014年のITトレンドだったらしい「Docker」。。。
docker今更感たっぷりなのですが、遅ればせながらdocekrを触って覚えて行きたいと思います。

そもそも、Dockerとは?

Dockerとは?
Docker(ドッカー[2])はソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。
LinuxカーネルにおけるLXCと呼ばれるLinuxコンテナ技術とAufsという特殊なファイルシステムを利用してコンテナ型の仮想化を行う。VMware製品などの完全仮想化を行うハイパーバイザー型製品と比べて、ディスク使用量は少なく、インスタンス作成やインスタンス起動は速く、性能劣化がほとんどないという利点を持つ。dockerfileと呼ばれる設定ファイルからコンテナイメージファイルを作成可能という特性を持つ。一方で、コンテナOSとしてはホストOSと同じLinuxカーネルしか動作しない。

以上、wikiからの引用

Dockerは昔からあったコンテナ技術を応用したもので、仮想化やクラウドを基盤とした新しいインフラの考え方である「Immutable Infrastructure」=「不変のインフラ」という考えを取り入れたものであり、非常に便利であるという事は知っていましたが、なかなか触れずにいました。
名前だけは知っていたので、仲間内でdockerの話題が挙がっても「docker?、あぁ知ってる知ってる(嘘)」なんて適当な事言っていたのですが、今回ついに触ってみたいと思います。

今回のシステム構成

今回は検証なのでESX上に構築したいと思います。
環境:自宅のESX上の仮想マシン

OS: CentOS7
CPU: 1個
MEMORY: 1GB
HDD: 30GB

Dockerインストール

それではDockerをインストールしてみたいと思います。

・yumパッケージがあるか確認

# yum search docker
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
============================= N/S matched: docker ==============================
docker-logrotate.x86_64 : cron job to run logrotate on docker containers
docker-python.x86_64 : An API client for docker written in Python
docker-registry.noarch : Registry server for Docker
docker-registry.x86_64 : Registry server for Docker
docker.x86_64 : Automates deployment of containerized applications
docker-devel.x86_64 : A golang registry for global request variables (source
: libraries)

・インストール

# yum install -y docker

・起動

# systemctl start docker
Job for docker.service failed. See 'systemctl status docker.service' and 'journalctl -xn' for details.

ん?何かエラーが発生。原因を見てみる事に。

# systemctl status docker.service -l
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled)
Active: failed (Result: exit-code) since 火 2015-04-28 01:20:32 JST; 8min ago
Docs: http://docs.docker.com
Process: 2342 ExecStart=/usr/bin/docker -d $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY (code=exited, status=127)
Main PID: 2342 (code=exited, status=127)
CGroup: /system.slice/docker.service

4月 28 01:20:32 test001 docker[2342]: time="2015-04-28T01:20:32+09:00" level="info" msg="+job serveapi(unix:///var/run/docker.sock)"
4月 28 01:20:32 test001 docker[2342]: /usr/bin/docker: relocation error: /usr/bin/docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file <strong><span style="color: #ff0000;">libdevmapper.so.1.02</span></strong> with link time reference
4月 28 01:20:32 test001 systemd[1]: docker.service: main process exited, code=exited, status=127/n/a
4月 28 01:20:32 test001 systemd[1]: Failed to start Docker Application Container Engine.
4月 28 01:20:32 test001 systemd[1]: Unit docker.service entered failed state.

ふーん。どうやら「libdevmapper.so.1.02」が無いのがいけないらしい・・・。
なので入れてみる。

# yum -y install libdevmapper.so.1.02

・再度、起動

# systemctl start docker

お、動いたっぽい。

・確認

# systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled)
Active: active (running) since 火 2015-04-28 01:35:31 JST; 10s ago
Docs: http://docs.docker.com
Main PID: 3721 (docker)
CGroup: /system.slice/docker.service
mq3721 /usr/bin/docker -d --selinux-enabled

4月 28 01:35:24 test001 docker[3721]: time="2015-04-28T01:35:24+09:00" lev..."
4月 28 01:35:24 test001 docker[3721]: time="2015-04-28T01:35:24+09:00" lev..."
4月 28 01:35:30 test001 docker[3721]: time="2015-04-28T01:35:30+09:00" lev..."
4月 28 01:35:31 test001 docker[3721]: time="2015-04-28T01:35:31+09:00" lev..."
4月 28 01:35:31 test001 docker[3721]: time="2015-04-28T01:35:31+09:00" lev..."
4月 28 01:35:31 test001 docker[3721]: time="2015-04-28T01:35:31+09:00" lev..."
4月 28 01:35:31 test001 docker[3721]: time="2015-04-28T01:35:31+09:00" lev..."
4月 28 01:35:31 test001 docker[3721]: time="2015-04-28T01:35:31+09:00" lev..."
4月 28 01:35:31 test001 docker[3721]: time="2015-04-28T01:35:31+09:00" lev..."
4月 28 01:35:31 test001 systemd[1]: Started Docker Application Container ...e.
Hint: Some lines were ellipsized, use -l to show in full.

無事に起動したので、自動起動を設定しておきます。

・自動起動

# systemctl enable docker
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'

・自動起動確認

# systemctl list-unit-files | grep docker
docker.service enabled

今回はインストールから起動までを検証しました。

dockerについてはじっくりと学びたいので焦らず、ゆっくりと検証して行きたいと思います。
今後もこのdockerは広がっていきそうですし、しっかりと学んでおきたいなと感じています。
業務でdockerを使う事は今のところはないのでしょうが、新しい技術については学んでおいて損は無いのかな?、なんて思います。

誰も「アレやったら?」とか、「コレやったら?」言ってくれないですからね。
IT系の仕事は特に自分でやったもん勝ちなところはあるような気がします。
余談ですが・・・。

それではまた。

こちらの記事もおすすめ!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

あいしんくいっとの中の人。

ありきたりだけど、自分なりの視点で少しでも人の役に立つ記事をありのままに書くをモットーに。 たまには役立つことが書けると良いかな。
聞きたいことがあれば、気軽にツイートください♪可能な範囲でお答えします。
follow us in feedly