Docker入門してみた

こんにちは、@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を使う案件は増えてきているようですね。


なりたい自分になれる
スキルアップならUdemy

私も利用し、高収入エンジニアになったのよ。未経験から機械学習、データサイエンティスト、アプリ開発エンジニアを目指せるコンテンツが多数あります。優秀な講師が多数!割引を利用すれば1,200円〜から動画購入可能です。!

ABOUTこの記事をかいた人

大学卒業して、キラキラしていたのでIT業界にはいりましたが、中身はブラックでした!!だから、投資技術を磨いて早くリタイヤしたいです。株価、Python、機械学習をもうもう勉強中です。経済的自由を手に入れて農家やりたい!