Docker使ってみようず(part1)

dockerが3月のアップデートで商用向けを有料化したことで今後の選択しとしてDockerの立ち位置がどのようになるのか非常に不透明な今日このごろですが、一応コミュニティ版はこれまでと同じように無料で使えるようなので、色々遊べるようになっておいて損はないと思い少しは勉強してみることにしました。

自分がDockerの勉強を始めたのが2016年の12月頃ですが、当時入門書として購入した中井さんの本古賀さんの本も、Qiitaの前佛さんの入門向け記事も今や昔、コマンド体型からバージョン体型まで変わってしまってDockerの開発速度の凄まじさたるや推して知るべしと言ったところか。
しかし、基本的な部分は学ぶことが出来るしコマンドもまだ使えるので、まったく無駄にはなりませんのでご安心です。

今回は最新のVer17.03のインストールからレジストリ構築・Wordpressの稼働までを目指します。
後々、swarmでのクラスタ化や、OpenShiftOriginのPaaS環境化まで出来るようになりたいなあ。

 

さて、まずDockerを使おうと思った際に、調べると導入方法の選択肢からして色々あるので戸惑います。

  1. Docker MachineをWindowsやMacにインストールしてVirtualBoxやHyper-V上で動かす。
  2. VM環境でVagrantを使ってDocker環境の構築
  3. 公式のshell scriptからインストール
  4. Dockerをyumからインストール

だいたい上記の4つくらいがあると思います。

今回は便利な1・2番は捨てて、何処に行っても使えそうな4番で作っていきます。


Dockerをインストールするホストの準備

ホストはいつも利用している自宅PCのHyper-Vに作成します。
OSはCentOS7.3:64bit、後々のことを考えてカーネルを4系にアップデートします。

まずは、公式サイトからDVDインストール用のISOをDLします。
「CentOS-7-x86_64-DVD-1611.iso 」ってヤツです。

ダウンロードしている間にVMを作成します。
Dockerを使う場合、コンテナのイメージを幾つかダウンロードして管理することになりこれが地味に容量を奪っていくので、遊びのつもりでディスク容量を8GBとかでVMを作るとあっという間に容量不足になったりするので、ある程度多めにディスクを用意したほうが良いでしょう。
今回はレジストリの作成も考えているのでイメージ保管用にOSとは別のディスクを用意します。

新規で仮想ハードディスクを適当に空いてるドライブに用意します。サイズは32GBとしました。

続いてVMを作成します。
難しいことは考えず、適当にサイジングします。
CPU:2c, MEM:8GB, HDD20GB(可変), VMの名前は白鯨の舞台のナンタケットから採っています。

MobyLinuxVMは、Windows環境でDockerをインストールすると動き出すVMです。
Hyper-V環境だとHyper-VのVMを勝手に作ってくれるみたいです。今回は関係ありません。
他にも色々遊ぼうとして沈んだ鯨取りたちが漂ってますが、やはり今回は関係ありません。

さて、回線の太さに自信ニキ達はもうDLが終わってると思うので、VMをさわって行きます。
と、その前に先程作ったVHDを忘れずに装着しておきます。
ついでに、DLしたISOをDVDドライブに設定しておきまそ。

準備ができたらVMを起動してCentOSのインストールを開始します。

    1. 言語はアメリカ語の堪能なフレンズ以外はここを見に来てる時点で日本語だよ。
    2. インストールの概要は適当に以下のようにします。
      1. ソフトウェア:最小構成。
      2. インストール先:sda
      3. ネットワーク:つながる方はインターネットに繋がる設定で。
      4. 日付と時刻:インターネットに繋がる人は自動的に設定されます。そうでない方はお住いの地域に合わせてどうぞ。
      5. KDUMP・SECURITY POLICY:特に要件がなければのままで。
    3. rootパスワード:いつものです。ほらいつもの。
    4. ユーザーの作成:好きな子の名前とかで作ります。
    5. インストールが完了するのを待ちます。
      待ってる時間退屈かと思うので、皆さまのためにこんな動画をご用意しました。

インストールと再起動が完了したら、ちゃんと起動するのを確認して停止しチェックポイント(スナップショット)を作ります。
何か嫌なことがあったらいつでもやり直せます。人生と同じですね(ニッコリ)

再度起動したら、ホスト名を変えたり、sudo権限つけたり、vimをインストールしたりします。
すまないがvim勢以外は帰ってくれないか。

sudo権限付けても、どうせsudo su -でずっとrootで操作するんですよね。

dfとかvgdisplay見ると、20GBで作ってたはずなんだけど、なんか127GBになってました。
Hyper-Vの可変だとこうなるのか、作るときに間違えてるのに気づかなかったのか。

先程作ったVHDのsdbがまだ無いので追加しておきましょう。
まずはsdbをPVに割り当てます。

続いて、ボリュームグループを作成します。名前は「docker」です。

TOTAL PE sizeが8191でサイズが32GiBとなっています。
仲良く半分ずつ使おうと思うので、お兄ちゃんを4095、弟を4096でPEを分けます。(理不尽)

それぞれ、適当にファイルシステムを作ってマウントしておきます。
ついでにfstabに書き込んで、boot時に自動でマウントできるようにしておきます。

あとは、最初に言っていたカーネルのアップデートを行います。
オフラインの方は、下に表示されるインストールされた一覧のRPMを集めれば、出来るんじゃないでしょうか。
インストールの順番は以下のようです。

カーネルアップデートはこちらのページを参考にさせてもらいました。
書いてある通りにやったら出来ました。すっご~い!

epelrepoをyumのリポジトリに追加して、古いカーネルを削除して、カーネルをアップデートしたら、grubの設定見ます。
1行目にカーネル4.10のものがあるので、次回からこれで起動するように設定するっぽいです。

最後にオリーブオイルを一振りして下準備は完了です。
チェックポイントでも作っておきましょう。

 


Dockerのインストール

続いてDocker Engineをインストールします。
公式の手順通りにやってみます。

なんかGPGキー云々は出ませんでした。

あ、ここで出ました。

うごけー!
ってことでハロワが動きました。

稼働したコンテナ(終了済み)を確認しましょう。
コマンド体系が変わっても古いコマンドは使えますが、慣れるためにも新しいコマンドを使っていきましょう。

ついでに、Dockerのプロセスも見てみましょう。

DockerはDockerの操作を受け付けるためのAPIを提供するデーモンと、コンテナを動かすコンテナランタイム、そして実際にアプリケーションが動作するコンテナにプロセスが別れてるっぽいです。
最近のDockerはデーモンが死んでーもん(激ウマギャグ)コンテナが動き続ける事ができるので偉いですね。

Dockerの情報は今まで通り、docker info コマンドで見られます。

なんかWarningが出てるので、iptablesを入れておきましょう。

あれ?入れた覚えないけど入ってました。
なんかfirewalld関連で付いてくるとかなんとか。

サービスとして起動するためにiptables-servicesを入れておきます。

あとは、これで良いのかな?

再起動時の対応はこんな感じでしょうか。
ついでに再起動時にiptablesとDockerが起動するように設定もしておきましょう。

あとは、dockerのイメージ保存先を先程作った、「/docker/host」配下になるように設定します。
まずはさっきダウンロードされたイメージを削除しておきます。

docker ps (container ls) の -q オプションを使うとコンテナIDのみが取れるので、-a オプションで停止中のコンテナも含めて全て表示してrmへ送っています。

同様にイメージを削除します。

dockerのサービスを止めて、もとの場所にあるデータを移しておきます。

先程systemctlで表示されていた「Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled」のとおり、設定ファイルは「/usr/lib/systemd/system/docker.service」のようです。

デーモンの起動オプションに-gを指定することでDockerランタイムのルートディレクトリを変更できるらしい。
デーモンのマニュアルは「man dockerd」ね。

systemctlはデフォルトの設定が/usr/lib/systemd/system 配下に、ユーザー定義が/etc/systemd/system配下に置くらしいので、まずはデフォルトの定義をコピーします。

中身はsedでさらっと変えておきます。

良さそうなのでDockerデーモンを上げておきます。

もう一度ハロワに行ってみましょう。

イメージはちゃんとアルカナ

有磯海サービスエリアですね。

 

かなり長くなってしまったので、一旦区切り。
次回はレジストリの作成とwordpressの実行まで。
多分次回は短く済むと思う。

Pocket

コメントを残す

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

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