以前からずっと気になっていたDockerを導入して、はじめの一歩までを解説してみようと思います。
まずDockerとは何かについて簡単におさらいしておくと
Dockerとは、Linux上で独立した別のLinuxシステムを起動することができる、コンテナ型の仮想化ソフトウェアの一つ。Docker社(旧dotCloud社)が開発を創始したもので、オープンソースとして公開されている。
出典:IT用語辞典
これだけではDockerを利用するメリットが分かりにくいので、もう少し詳しく触れようと思います。
Dockerのメリット
軽量で軽快
他の仮想化技術(仮想マシンなど)に比べてOS上の仮想化となるため、メモリやCPUのリソースをそれほど食いません。加えて起動も一瞬です。
設定のコード化
設定をコード化できます。具体的にはDockerfileなどのファイルにて設定を明示できます。
アプリ側の人間からすると、勉強にもなってかなり良いと思います。
アプリケーションの運用効率向上
アプリケーションのデプロイや実行が簡単かつ素早く行えます。
環境の再利用
設定含めた環境周りをDockerイメージとして保存し、再利用が容易にできます。
Dockerの導入
それではまずDockerをインストールしてみましょう。Docker for MacやDocker for Windowsなどもありますが、今回はCentOSにDockerを導入します。
epelリポジトリからyumでインストールします。
1 2 3 | $ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 $ sudo yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm $ sudo yum -y install docker-io |
上記はCentOS7を想定していますので、環境が違ってくる場合は、それぞれの環境に合わせて書き換えてください。
dockerが無事インストールできました。
念のため、docker がきちんとインストールされたか、バージョンを確認してみます。
1 | $ docker version |
では、早速dockerのサービスを動かしてみましょう。
1 2 | $ service docker start $ chkconfig docker on |
無事サービスが起動できたら、以下のような画面になります。
それでは次にコンテナにOSをセットアップです。
CentOSのイメージをDocker社が提供してくれていますので、そこから引っ張ってきます。
1 | $ docker pull centos |
CentOSのイメージが問題なくセットアップされました。
ここまででひとまずDockerの事前準備が一通り終わりました。
コンテナを動かしてみる
上記の設定が一通り問題なく終わったら、次はコンテナを動かしてみましょう。ちなみにコンテナは子サーバとも呼びます。
1 | $ docker run -i -t centos /bin/bash |
docker runというコマンドでDockerコンテナが一発起動されます。
コンテナが起動すると、コンテナのターミナルに接続され、操作が可能となります。
コンテナはexitで終了できます。
1 | $ exit |
コンテナへの接続後は仮想OSで操作するのと同様にコンテナに対して操作することができます。上記の場合だとCentOSなので、もちろんyumを利用したパッケージのインストールなども行えます。
ただし、コンテナをコミットせずに終了された場合は、変更がイメージに反映されないため、注意が必要です。
Dockerの基本コマンド
最後にdockerの基本コマンドを記載しておきます。
イメージ管理
・イメージの取得
1 | $ docker pull レポジトリ名(タグ名) |
・取得済みイメージの一覧を表示
1 | $ docker images |
・コンテナの変更をコミット
1 | $ docker commit コンテナID |
・イメージの削除
1 | $ docker rmi イメージ名 |
コンテナ管理
・イメージからコンテナを起動
1 | $ docker run -it コンテナID /bin/bash |
・実行中のコンテナに接続
1 | $ docker attach コンテナID |
・コンテナからデタッチ
Ctrl+P, Ctrl-Q
・コンテナの起動
1 | $ docker start コンテナID |
・コンテナの停止
1 | $ docker stop コンテナID |
・コンテナの削除
1 | $ docker rm コンテナID |