序章
在宅をしていると、たまに暇な時間が出来ますよね。
そんな時間は、新スキルを身に付けるのに有効です。
ということで、Linuxネタですが、Dockerでも勉強します。
基本
Dockerとは、説明するのが面倒なので、詳しいことは、ググって調べて下さい。
簡単に説明すると、仮想マシンほどではないけど、お手軽に仮想化を実現するLinuxです。
kvmのように仮想ハードウェア定義をする程でもないけど、各アプリの依存関係は隔離して使いたいなっていう場合に理想的なツールとなり得ます。
Dockerは、イメージとコンテナという概念があるようで、イメージというのが、コンテナの元で、イメージを元に実行しているのがコンテナで良いと思います。
イメージというのは、仮想ファイルシステムといった考えでも良いと思います。
例えば、Ubuntuイメージからコンテナを作成起動(bash等を起動)して、このコンテナにアプリ(apt install ..)を追加します。
で、bashから抜けるとコンテナが停止します。
停止した後は、起動の仕方で動作が変わるのですが、変更した記録を破棄するような起動の場合、元のイメージに戻ってしまいます。
変更した記録を残しておく起動の場合、変更差分を記録して停止します。
で、この変更差分を永続化したい場合、コミットすることで、新たなイメージとすることが出来ます。
この作成起動とコミット作業を繰り返すこで、理想のイメージに近づき、出来上がったイメージからコンテナを起動して、実現したいことがすぐに使えるような環境を構築することが可能となります。
使い方
まー、御託を書いても読んでくれないでしょうから、実技に行きましょう。
dockerのインストールは、よそのサイトを参考にしてセットアップを完了させて下さい。
それでは、みんな大好きUbuntuでも作成してみましょう。
docker run -it --name testbox ubuntu bash
これは、ubuntuイメージをDockerハブから取ってきて、testboxという名前のコンテナを作成して、bashを起動しろと書いていますよ。
-itは、ホストの標準入出力とくっ付けろということです。これを指定しないと、bashに何も出来なくなりますよ。
実行すると、rootプロンプトが表示されるはずです。
root@hogehoge:/#
この状態が、ubuntuコンテナ内でbashを実行している状態です。
uname -a とかやると、何buntuかわかるはずです。
とりあえず、定番のupdate & upgrade でもやってみて下さい。
ifconfig等がインストールされていないので、
apt install net-tools
を実行してインストールしておきましょう。
飽きたら exitしてしまいましょう。
bashが終了することで、コンテナは、停止することになります。
色々やったコンテナをもう一回使いたいからって、docker run させても出来ませんよ。
docker run は、コンテナ作成のコマンドなので、別のコンテナを作ってしまいます。
コンテナを起動するには、docker start を使います。
docker start testbox
とやっても、さっきのrootプロンプトが出て来ませんよね。
実は、起動はしているのですが、ホストの標準入出力とくっついていない状態なのです。
コンテナの起動状態は、以下のコマンドで確認します。
docker ps
STATUSに Up となっていることがわかると思います。
停止しているコンテナも見たい場合、-a を付けることで見れますよ。
では、改めて以下のコマンドを実行します。
docker attach testbox
すると、今度は、rootプロンプトが出て来ますよね。
ということで、基本操作はこんなもんです。
ちなみに、以下のコマンドで、startとattachを一気に出来るので、普段使いは、こちらを使いましょう。
docker start -i testbox
さて、こうやって作っていったコンテナを永続化したい時がやって来ると思います。
永続化することで、イメージとなってくれるので、このイメージから色々なコンテナをさらに作成することが出来るようになるからですね。
docker commit testbox ubuntubox
このコマンドは、testboxコンテナをubuntubox:latestイメージとして構築しろということです。
構築出来たのでしょうが、よくわかりませんよね。
以下のコマンドで確認が出来ますよ。
docker image ls
すると、REPOSITORYにubuntuboxが存在しているはずです。
で、testboxは、どうなったかというと、別にどうにもなっておらず、単に停止しているだけです。
もし、お役御免で、必要無いなら消してしまいましょう。
docker rm testbox
これで、消えました。
作成したubuntuboxイメージから、新たにコンテナを作って色々なアプリをインストールしたくなりましたよね。
では、早速
docker run -it --name testbox2 ubuntubox bash
さぁ、どうでしょうか
rootプロンプトが表示されましたよね。
testboxの子孫としてtestbox2が生まれ変わってくれました。
Dockerって、このようにイメージからコンテナを作成して、コンテナで色々やった結果をイメージにして、さらにコンテナを作る。
この繰り返しで、必要な環境を構築していくわけです。