データボリューム・コンテナー

https://thinkit.co.jp/story/2015/09/15/6384

前回の「ホストとコンテナでディレクトリを共有する」ではデータボリュームを作成する場所としてホスト側のパスを明示的に指定していました。

データボリューム・コンテナーは、ホスト側のパスを指定するのではなくて、コンテナーを指定することで指定したコンテナーのデータボリュームを共有することが可能になります。

目次

  1. 実行
    1. volumes-from オプションについて
    2. 動作確認
  2. 参考リンク

実行

–volumes-from オプションについて

データボリューム・コンテナーを作成する場合には –volumes-form オプションを利用します。

<container> で指定したコンテナの Data Volume を全部マウントしてコンテナを起動する

--volumes-from コンテナ名

動作確認

#作業ディレクトリ作成
mkdir -p /tmp/data-volume-container

#作業ディレクトリへ移動
cd /tmp/data-volume-container

#マウントするディレクトリとファイルを作成
mkdir -p source
#空ファイル作成
touch source/test.txt

#centos7 としてコンテナ作成。データボリュームとして直下のディレクトリにホストの/tmp/と
#コンテナ内の/tmp/testをマウントする
sudo docker run -it -d \
--name centos7 \
-v /tmp/data-volume/source:/tmp/test \
centos:centos7

#centos7-from としてデータボリューム・コンテナー用のコンテナ作成。
#先ほど作成した centos7 コンテナのデータボリュームを参照できるようにする
sudo docker run -it -d \
--name centos7-from \
--volumes-from centos7 \
centos:centos7

#centos7 に接続
sudo docker exec -it centos7 bash

#データボリュームの中身を確認
ls -alt /tmp/test
total 16
drwxrwxrwt 1 root root  4096 Aug 29 23:35 ..
drwxr-xr-x 2 1001 users 4096 Aug 23 02:53 .
-rw-r--r-- 1 1001 users    4 Aug 23 02:53 test2.txt
-rw-r--r-- 1 1001 users    4 Aug 23 02:52 test.txt

#centos7-from に接続
sudo docker exec -it centos7-from bash

#centos7コンテナの中身と同じか確認する
ls -alt /tmp/test/
total 16
drwxrwxrwt 1 root root  4096 Aug 29 23:36 ..
drwxr-xr-x 2 1001 users 4096 Aug 23 02:53 .
-rw-r--r-- 1 1001 users    4 Aug 23 02:53 test2.txt
-rw-r--r-- 1 1001 users    4 Aug 23 02:52 test.txt

ホストとコンテナでディレクトリを共有する

コンテナを作成するときに、コンテナのディレクトリをホストと共有することが出来るそうです。

コンテナに永続データを保存するのはオススメされていないらしいので、基本的にはホストとハードディスクを共有する形などを取る。

目次

  1. 概要
    1. データ・ボリューム (data volume)
    2. コンテナ削除時の注意
  2. 実行
    1. 場所を指定する
    2. 確認

概要

データ・ボリューム(data volume)

ホストのディスクと共有することをデータボリュームというらしい。

データ・ボリュームで作成されたボリュームはコンテナを削除をしたとしても残り続けるメリットがあるそうです。逆にボリュームを使わずにコンテナ内に作られたファイルはコンテナ削除時に一緒に消えてしまうので気を付ける(; ・`д・´)

そのため、MySQLのデータやソースコードなどはデータ・ボリュームで共有したディレクトリに配置させておいた方が良い。

下記は公式からの抜粋になります。

データ・ボリューム (data volume) とは、1つまたは複数のコンテナ内で、特別に設計されたディレクトリであり、 ユニオン・ファイルシステム (Union File System) をバイパス(迂回)するものです。データ・ボリュームは、データの保持や共有のために、複数の便利な機能を提供します。
ボリュームはコンテナ作成時に初期化されます。コンテナのベース・イメージ上で、特定のマウント・ポイント上のデータが指定されている場合、初期化されたボリューム上に既存のデータをコピーします。
データ・ボリュームはコンテナ間で共有・再利用できます。
データ・ボリュームに対する変更を直接行えます。
イメージを更新しても、データ・ボリューム上には影響ありません。
コンテナ自身を削除しても、データ・ボリュームは残り続けます。
データ・ボリュームは、データ保持のために設計されており、コンテナのライフサイクルとは独立しています。そのため、コンテナの削除時、Docker は 決して 自動的にボリュームを消さないだけでなく、コンテナから参照されなくなっても”後片付け”をせず、ボリュームはそのままです。

http://docs.docker.jp/v1.10/engine/userguide/containers/dockervolumes.html

コンテナ削除時の注意

コンテナ削除時、-v オプションでボリュームを消そうとしなくても、Docker は何ら警告を表示しません。コンテナを -v オプションに使わず削除してしまうと、最終的にボリュームは、どのコンテナからも参照されない “宙づり”(dangling) ボリュームになってしまいます。宙づりボリュームは除去が大変であり、多くのディスク容量を使用する場合もあります。このボリューム管理の改善については、現在 プルリクエスト#14214 において議論中です。

http://docs.docker.jp/v1.10/engine/userguide/containers/dockervolumes.html?highlight=%E6%B0%B8%E7%B6%9A

実行

データボリュームの場所を指定する

データボリュームを利用する場合には-vオプションを利用します。

-v ホストのパス:コンテナ内のパス

#作業ディレクトリ作成
mkdir -p /tmp/data-volume

#作業ディレクトリへ移動
cd /tmp/data-volume/

#マウントするディレクトリとファイルを作成
mkdir -p source
#空ファイル作成
touch source/test.txt

#コンテナ作成。データボリュームとして直下のディレクトリにホストの/tmp/と
#コンテナ内の/tmp/testをマウントする
sudo docker run -it -d \
--name centos7 \
-v /tmp/data-volume/source:/tmp/test \
centos:centos7

現在の位置にマウントする場合にはpwdコマンドを利用すると楽になる。
下記は同じ意味合いになる

sudo docker run -it -d \
--name centos7 \
-v `pwd`/source:/tmp/test \
centos:centos7

確認

作成したコンテナに正しくマウントされているか確認します。

#コンテナ起動の確認
sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e88d2d592450        centos:centos7      "/bin/bash"         7 minutes ago       Up 7 minutes                            centos7

#コンテナへ接続
sudo docker exec -it centos7 bash

#ホスト側で作成したファイルがあるか確認
ls -alt /tmp/test/
total 8
drwxrwxrwt 1 root root  4096 Aug 23 02:31 ..
drwxr-xr-x 2 1001 users 4096 Aug 23 02:30 .
-rw-r--r-- 1 1001 users    0 Aug 23 02:30 test.txt

キタ━━━━(゚∀゚)━━━━!!

当たり前ですがデータボリュームで指定されたディレクトリ内にファイルを作ったり、内容を変更したりするとリアルタイムでコンテナ内にも反映されています(´・∀・`)ヘー

#ファイルの中身を出力
cat source/test.txt

#aaaを書き込む
echo "aaa" > source/test.txt

#test2.txtファイルを作成してbbbを書き込む
echo "bbb" > source/test2.txt

#コンテナへ接続
sudo docker exec -it centos7 bash

#マウントされているディレクトリを確認
ls -alt /tmp/test/
total 16
drwxr-xr-x 2 1001 users 4096 Aug 23 02:53 .
-rw-r--r-- 1 1001 users    4 Aug 23 02:53 test2.txt
-rw-r--r-- 1 1001 users    4 Aug 23 02:52 test.txt
drwxrwxrwt 1 root root  4096 Aug 23 02:31 ..

#test.txtの中身を出力
cat /tmp/test/test.txt
aaa

#test2.txtの中身を出力
cat /tmp/test/test2.txt
bbb

CentOS7のコンテナ作成

Dockerを使ってCentOS7のコンテナをインストールしてみたいと思います+(0゚・∀・) + ワクテカ +

コンテナを作るためにまずコンテナのもととなるイメージが必要なります。 イメージはDocker Hubなどで提供されていたり、個人で作成されたイメージなどを利用する事が可能とのこと。

大雑把に行ってしまうとスナップショットみたいなものがあるからそれを使えばコンテナとして利用できる!みたいな?感じなのかな・・・(´ヘ`;)ウーム…

とりあえず今回はDocker HubにアップされているCentOSイメージを利用してコンテナの作成を行いたいと思います。

Dockerのインストールがまだ終わっていない方は下記記事を先に読んでください

Docker for Windows インストール

目次

  1. CentOSのイメージ取得・確認
    1. イメージの取得
    2. 取得イメージの確認
  2. コンテナの起動・停止
    1. 起動
    2. 起動確認
    3. 停止確認
  3. コンテナに接続
  4. コンテナ削除

CentOSのイメージ取得・確認

イメージの取得

Docker Hubリポジトリにあるcentosのcentos7というタグが付いてるイメージを取得する。

docker pull centos:centos7

取得イメージの確認

docker images

コンテナの起動・停止

起動

-it:コンテナのプロセスにttyを割り当てる。-tオプションと-i オプション をまとめたもの。

-t オプション

tty(擬似端末)が割り当てられない(ホストとコンテナのstdin, stdoutが接続されない)ので、コンテナに対する操作が不便になります。例えば、
入力で言うとホスト端末に設定されているキーバインド等が利用できません。
出力で言うとホスト端末に設定されている出力の色等が反映されません。

-iオプション

stdinをオープンしない(入力を受け付けない)ので、コンテナに対する操作ができなくなります。
逆に-iだけでコンテナに対する操作はできます(-tは必要ありません)。
-iと-tをセットで覚えている人がほとんどですが、-tがなくてもコンテナは入力を受け付けるのでviだってcpだってできます。

参考記事

docker runのオプションについて

docker run のtオプションについて

-d

コンテナをバックグラウンドで実行する。

-name

作成するコンテナに名前をつけるオプション。

docker run -it -d --name centos7 centos:centos7

起動確認

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
4c47a460beeb        centos:centos7      "/bin/bash"         About a minute ago   Up About a minute                       centos7

停止確認

docker stop centos7
centos7

停止を確認したら再度起動しておきます!

docker start centos7

コンテナに接続

キタ━━━━(゚∀゚)━━━━!!

これでローカル環境の中にCentOS7のコンテナに接続できました。あとはほぼいつも通りCentOSを利用する事が可能です!!スゲ━━━━━━ヽ(゚Д゚)ノ━━━━━━!!!!

docker exec -it centos7 /bin/bash
[[email protected] /]# uname -a
Linux 4c47a460beeb 3.10.0-862.3.3.el7.x86_64 #1 SMP Fri Jun 15 04:15:27 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

コンテナ削除

必要無くなったらコンテナは下記で削除できます。

docker rm centos7

これでCentOS作りたい放題_|\○_ヒャッ ε=\_○ノ ホーウ!!

Docker for Windows インストール

最後かもしれないだろ。だから全部話しておきたいんだ Dockerについてキタ━━━━(゚∀゚)━━━━!!

って、 全部というか最初の一歩ですがwww

私用でサーバーを50台近く管理しているせいもありもっと効率よく管理したいな~と日々思っているのですが、Dockerを触ってみて世界が変わりますた。

例えるならドラクエ3がFF3になった感じ( ´∀`)bグッ!

(´・ω`・)エッ?

もはや世界観が全然違うじゃん!!って思った人はまさにその通りですm9( ゚Д゚) ドーン!

Dockerを知ってるか知らないかで今後のあなたの人生を大きく変えるに違いありません(゚д゚)(。_。)(゚д゚)(。_。) ウンウン

Dockerを知れば毎日10分の仕事で誰でも月収100万も可能!!!Σ(゚◇゚;)マジデッ!?

では、まずはインストール前にWindows上でDockerを動かすにはhyper-vという機能が有効になっていないと利用できませんので有効化を行います。

目次

  1. Hyper-vの有効化
    1. Windowsのバージョン確認
    2. 有効化
  2. Dockerのインストール
    1. 公式サイトからダウンロード
    2. PowerShellを起動してDockerバージョン確認

Hyper-Vの有効化

Windowsのバージョン確認

hyper-vは Windows10 Pro、Windows Server でしか有効にできないため、それ以外のWindows Homeなどを利用している方は下記の手順ではDockerを利用できませんのご注意を!

Hyper-Vが動かない方は、Hyper-Vの代わりにOracle Virtual Boxを利用することでDocker Toolboxを利用する事ができるようです。

有効化

スタートからコントロールパネルを開きます。

もしくは「ファイル名を指定して実行」で control を入力してコントロールパネルを開く。

コントロールパネルが開いたらプログラムを選択します。

Windowsの機能の有効化または無効化を選択する

一覧にあるHyper-Vにチェックを入れて有効にする。

Dockerのインストール

公式サイトからダウンロード

次のURLからダウンロードで行います。ダウンロードするにはDockerのアカウントが必要になりますので持っていない方はまずはアカウントを作成してください。

ダウンロード
https://docs.docker.com/docker-for-windows/install/

アカウントを作成してログインしたらダウンロードが行えるようになっています。

ダウンロードしたファイルを実行する。

Use Windows containers instead of Linux containers はWindowsはwindowsコンテナを利用するか(インストール後に変更可能) になります。

特に必要無ければチェックを付けずにインストールしてください。

インストールが無事に終わるとデスクトップに下記通知が表示されます。

PowerShellを起動してDockerバージョン確認

PowerShell でdocker -v を入力してバージョンを確認する

Windows 10 Home を Pro に変更する

Docker 使いたい!!ってことでWindowsにインストールしようかと思ったんですが、Windowsで動かすには

Docker for Windowsでは、Hyper-Vが有効化されている必要があります

( ´_ゝ`)フーン

Hyper-Vは、32bit環境、Windows 7、Windows 10 Homeなどはサポートされていないことに注意してください。サポートされていないWindows環境をお使いの場合、可能であれば、64bitのWindows 10 Proへのアップグレードをご検討ください。

Σ(゚◇゚;)マジデッ!?

た、たたたしか、Pro版だったような・・・(; ・`д・´)

|д゚)チラッ

Homeキタ━━━━(゚∀゚)━━━━!!

ということで、まずはWindowsのアップデートからやることになりますた。

その手順がこちら!m9( ゚Д゚) ドーン!

目次

  1. Windows のバージョン確認
  2. Windows Store で購入
  3. アップグレード

Windows のバージョン確認

設定画面を開く

変更とセキュリティをクリック

左メニューにあるラインセンス認証をクリックして

Windowsのバージョンを確認する。

ここWindows 10 Pro と書かれていればアップグレードの必要はありません。

Windows 10 Home の場合にはHyper-Vが使えないためアップグレードが必要となります。

Microsoft Store に移動をクリックする

Windows Store で購入

購入を押す。金額は13,824円φ(゚Д゚ )フムフム…

Microsoft アカウントにログインする

必要であれば自動ログインを有効にする

年齢認証

クレジットカードが既に登録されていた場合には選択画面が表示されるので選択する。

アップグレード

購入手続きが終わると先ほどの画面に戻って、購入ボタンがインストールに変わっているのでクリックしてインストール。

再起動が発生するので、作業途中のファイルなどがある場合には保存しておくこと!!

アップグレード開始キタ━━━━(゚∀゚)━━━━!!

アップグレードは2、3分ほどで完了しました。

 

設定→ライセンス認証画面でアップグレードされたか確認する!|д゚)チラッ

キタ━━━━(゚∀゚)━━━━!!

次はDockerのインストールだ!!m9( ゚Д゚) ドーン!