こんにちは。バックエンドエンジニアのヤスタカです。
みなさん、Docker(ドッカー)って使ってますか?
Docker は使いこなせれば、開発環境を他の作業者全員でシェアすることができたり、開発環境とまったく同じ環境で本番環境も構築できたりと、とても便利に使うことができます。その一方で、導入するまでの学習コストという点では、他の仮想環境を構築するツール Vagrant(ベイグラント)などと比較すると、やや敷居が高い気がします。
LIG でも開発フローに Docker を導入しはじめたので普段から Docker を使ってはいるのですが、なんとなくコマンドだけ覚えて使っている感が否めません。なので、これを機に Docker を超初歩の初歩からゆっくり学習していけるような内容の記事を書いていきたいと思います。
初回の Docker 入門では「まず Docker とはなんなのか」についてさらっと触れ、イメージを掴んでいただたうえで Docker のインストールを実施。そして Docker を起動して仮想環境内で” Hello, world “の実行までいけたらと思います。
それではいってみましょう〜!
Dockerとはなんなのか?
まずはここから。仮想環境を構築できるツールということはなんとなくわかっていると思いますが、じゃあ「 Vagrant などとどこが違うの?」、「どんな利点があるの?」といったとこですよね、知りたいのは。
- Dockerとは?
- Docker はソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。 Linux カーネルにおける「 libcontainer 」と呼ばれる Linux コンテナ技術[3]と aufs のような特殊なファイルシステムを利用してコンテナ型の仮想化を行う[4]。VMware 製品などの完全仮想化を行うハイパーバイザー型製品と比べて、ディスク使用量は少なく、インスタンス作成やインスタンス起動は速く、性能劣化がほとんどないという利点を持つ。Dockerfile と呼ばれる設定ファイルからコンテナイメージファイルを作成可能という特性を持つ。一方で、コンテナ OS としてはホスト OS と同じ Linux カーネルしか動作しない。(参照元 wikipedia)
やめましょう……。いきなりこれを読んでもなんのことだかさっぱりだと思います。安心してください。私もです。ある程度他の仮想化技術に詳しい人ならまだしも、ほんとに入門編を探している初心者の方からすると「 Docker とは?」でまず混乱してしまいそうです。なので、これだけ覚えておいてください。
Docker は早い! 軽い! そして柔軟である。
コンテナ型だの、ハイパーバイザー型だのは Docker の操作にひと一通り慣れた後に、もう一度立ち戻って理解できるようになればよいでしょう。
次に、Docker を使ううえで絶対に概念を理解しておく必要があるものが 3 つあります。
コンテナとイメージとプロセス。
この 3 つを理解することはすごく重要です。
- コンテナとは
- ホスト OS( Docker を動かしている基盤となっている OS )とは隔離されたプログラムの実行環境。ホスト OS や他のコンテナにはアクセスできない。コンテナを作成するとコンテナ ID というものが振られる。
- イメージとは
- コンテナを作成する元となるもの。Dockerfile もしくはコンテナから作成できる。このイメージを配布することにより、各ユーザー間で共通の環境が構築できる。
- プロセスとは
- 起動中のコンテナ内で実行状態にあるプログラムのこと。コンテナ内でプログラムを実行し、プロセスとして稼働させる。
Dockerをインストールしてみる
Mac 上で Docker をいじるのに、以前まではまず Vagrant をインストールして、そこで立ち上げた仮想環境のなかで Docker を起動して仮想環境を構築する……というわけのわからない感じになっていたのですが、Docker for Mac ( Windows は Docker for Windows )というツールが提供されました。そのへんのことはすべてこのツールが自動的にやってくれるようになったので、こちらをとりあえずインストールします。
こちらの公式サイトの Get Docker for Mac ( Stable )というところからダウンロードしましょう。インストールが終わったら Docker for Mac を起動してみます。
Docker を起動すると、Mac の右上のメニューバーに Docker のアイコンが表示されるようになります。
次にターミナルを開いて、下記コマンドを実行してみてください。
docker run ubuntu echo 'Hello, world'
初めて Docker を起動した場合、このような結果が出力されると思います。
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
d54efb8db41d: Pull complete
f8b845f45a87: Pull complete
e8db7bf7c39f: Pull complete
9654c40e9079: Pull complete
6d9ef359eaaa: Pull complete
Digest: sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535
Status: Downloaded newer image for ubuntu:latest
Hello, world //最後にHello, worldが表示される。
このコマンドは ubuntu というもので、Docker イメージを取得がローカル環境にあるか確認しましょう。もしなければ、Docker リポジトリという場所からイメージをダウンロードし、イメージからコンテナを起動して、コンテナ内の LinuxOS で echo ‘Hello, world’ が実行されます。
- Dockerリポジトリとは
- クラウド上で Docker のイメージを管理できるもの。ここにイメージをアップしておけば、誰でもイメージを取得、コンテナを起動できる。
- DockerHubというDocker公式のリポジトリサービスがある。
- >> https://hub.docker.com/
初回は Docker リポジトリからイメージを取得するという作業が発生しますが、2 回目以降はローカルにダウンロードしたイメージを使用するため、実行も早くなります。
% docker run ubuntu echo 'Hello, world'
Hello, world
コマンドの実行結果を見ても、初回とは違い、すぐに Hello, world が表示されていますね。
まとめ
とりあえず本日はここまで。Docker を使ってコマンドを実行するところまでいけましたね。Docker とはどんなものか? という触りがなんとなくイメージできれば OK です。
次回は Docker の基本コマンドをいろいろと紹介していきます。今日覚えたコンテナやイメージの状態を確認したり、起動したり、削除したりできるようになりますよ!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。