こんにちは、@Yoshimiです。
仕事でDockerに触れることになりました。そもそもインフラとか苦手なのですが、これを機に克服していきたいと思っています。
Dockerって何?
Docker(ドッカー)とはDocker Inc.(旧DotCloud社)によって開発されたコンテナ仮想化ツールのことです。
仮想化といえば、1台のサーバー上に、複数のサーバーとして利用できる仕組みを構築する方法ですね。Dockerはその仮想化をコンテナ型として実行・配布をしています。
港にあるコンテナをイメージしていただけると導入・運用の理解も早いと思います。
メリット
Dockerは、Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較されます。
今まで?良く使われていたVirtualBoxなどの仮想マシンでは、ホストOS上にそれぞれ個別のOSを呼び出し仮想環境を立ち上げます。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどをコンテナに隔離する(パッケージのようにする)ことで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能となるわけです。
メリットを3つに集約すると下記3点です。
- 起動・処理が速い
- プログラムサイズ、移動のしやすさが軽い
- 開発環境と本番環境への移行がスムーズ
DockerにはImageというのがあり、コンテナを生成する元のようなモノなのですが、これがまた素晴らしくいわゆるテンプレートなのですが、imageを渡すことで、その人も全く同じコンテナを作成することが可能になるのです。開発環境を整えるのはとにかくエラーがつきものです。ですので、DockerのImageがあれば開発環境準備の短縮化にもなります。
デメリット
Dockerにはメリットばかりでもないのです。意識する程度でも良いですが、やはり注意するところはあります。
「同一のOSから複数のコンテナを作成するため、OS違いの検証は別のマシンまたは仮想マシンを使用しなければならない」というのがあります。
しかし、Dockerのコンテナは軽さ・早さが売りです。コンテナ一つ一つに必要なリソースが少ないため、よほどのことがない限りは気にすることはないと思います。
Dockerの使い方
インストール・流れ
小難しい設定な抜きにします。環境はmacOS:Catalinaです。
1.インストール
公式サイト(https://www.docker.com/)のメニュー「Get Started」からダウンロードします。
macOSの場合、案内に従って「Docker CE for Mac」をインストールします。
Dockerのアカウントを作っていなかったら作ってください。
Docker Hub(https://hub.docker.com/)のアカウントも作ってください。使い慣れてきたらのことですが、imageを保管したりGitHubと連携するのに使います。
2.imageを元にコンテナを生成します。
コンテナが仮想環境となり、そこで作業を行います。
基本的なコマンドは後述。
3.仮想環境の終了
コンテナをストップします。
ちなみに、CEとはCommunity Editionのことです。無料版ですが有料版と遜色なく利用できるので十分です。
dockerを使用する際は、アプリケーションから「Docker」を起動すると、ターミナルから使用することができます。
よく使う基本的なコマンド
・コンテナの元となるイメージを取得
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f68d6e55e065 9 months ago 109MB ubuntu latest 4c108a37151f 10 months ago 64.2MB hello-world latest fce289e99eb9 15 months ago 1.84kB
・コンテナ一覧を表示
docker ps -a
-a
はオプションで、稼働していないコンテナまで表示させます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e90ee5b8f618 hello-world "/hello" 11 hours ago Exited (0) 11 hours ago nice_tereshkova 486749803b12 nginx "nginx -g 'daemon of…" 8 days ago Created first-nginx 56186527dedf 35b7610f5ebb "/bin/sh -c '/usr/ga…" 8 days ago Exited (0) 8 days ago epic_swirles
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e90ee5b8f618 hello-world "/hello" 11 hours ago Exited (0) 11 hours ago nice_tereshkova 486749803b12 nginx "nginx -g 'daemon of…" 8 days ago Created first-nginx 56186527dedf 35b7610f5ebb "/bin/sh -c '/usr/ga…" 8 days ago Exited (0) 8 days ago epic_swirles
・コンテナの停止、再起動
docker stop コンテナ名(ID) docker start コンテナ名(ID)
コンテナIDの確認はdocker ps -a
で可能です。
・コンテナを削除する
docker rm コンテナID
コンテナの削除はSTOP
してから実行します。
コンテナの削除は複数まとめて可能です。その場合は、docker rm コンテナID コンテナID コンテナID
と続けて記述します。
・イメージを削除する
docker rmi イメージID
最後に
今回は、超入門として、そして、私の復習もかねて、基本的な内容をご紹介しました。
最近は、Dockerの記事も多くなってきているので「仮想環境とDockerどっちを勉強した方が良いの?」と思うと思います。機械学習のスクールでお話を伺った際、「どちらかということでなくDockerは使えると良い。」という回答だったので、どちらも使えることがエンジニアとしての価値をあげるのだと思います。
しかし、友人からも聞きましたがDockerを使う案件は増えてきているようですね。