Docker(ドッカー)は、アプリケーションを開発する際、1台のサーバーにさまざまなアプリケーションの実行環境を構築するための仮想化技術です。
仮想化技術とは1台のサーバーで複数のOSを動かす技術のこと。限られたリソースを有効活用するための技術として、主にインフラ関係やDevOps関連から注目されています。
ここでは、Dockerがどのような技術かといった基本から、構成する要素や学習方法、簡単な基本コマンドなどを初心者にもわかりやすく解説します。
Dockerは、カリフォルニアのDocker社が開発している仮想化技術のプラットフォームです。Dockerを利用することで、1つのサーバー上でさまざまなアプリケーションを仮想化・実行できるようになります。
「PaaS(Platform as a Service)」と呼ばれるものの一種で、アプリケーション開発などに必要なプラットフォームを、クラウド上で利用できるサービスに分類されます。
Dockerの特徴は、Linuxの技術を使った「コンテナ型」と呼ばれる仮想化技術であることです。他の仮想化技術では必須となる「ゲストOS」が不要となり、それに伴ってCPUやメモリ、ストレージなどのリソースを必要としません。
Dockerは従来の仮想マシンよりも軽量に動作し環境構築がスムーズに行えます。主なメリットを紹介します。
Dockerがよく比較されるものとして仮想マシンがあります。
Dockerも仮想マシンの一種ですが、ホストマシン上でゲストOSを動かした上でミドルウェアを動かすホスト型やハイパーバイザー型と違い、「コンテナ型」と呼ばれる仮想化技術を使っていることが特徴です。
コンテナ型のDockerはホストマシンのカーネルを利用します。これにより、別のマシンが動いているような挙動を実現し、軽量かつ高速な動作を可能としています。
Dockerは、IaC(Infrastracture as Code)と呼ばれる技術で、環境設定やミドルウェアのインストールをコード化して管理します。これにより、どこでも同じ環境が作れます。
例えば、開発工程からDockerを使うことで、Windowsで開発していたアプリケーションがLinuxで動かないといったケースを防ぎやすくなるでしょう。開発環境をそのまま本番環境に持って行くこともできるため、環境による影響を減らせることが特徴です。
Dockerで作った環境は、他の人に渡して使ってもらうこともできます。開発環境の準備にかかる時間を大幅に短縮し、各自の作業環境のバージョンのずれも防止できます。
さらに、起動するコンテナ名を変えるだけで複数のコンテナを起動できるため、クラスタ構成の構築が容易になり環境構築の手間が大幅に省けます。
各自の環境への依存度が減ることにより、新規メンバーへの説明にかかる時間や、環境の準備にかかる手間を削減できるため、規模が拡大してゆくチームでは特に役立つでしょう。
Dockerを構成する主な要素である「コンテナ」「Dockerイメージ」「Dockerfile」「Docker Hub」について詳細に解説します。
Dockerの中核となる「コンテナ」は、アプリケーションとその実行に必要なライブラリ、設定ファイルなどをひとまとめにした実行環境(仮想環境)です。Dockerでは専用のコマンドでコンテナを作成し、アプリケーションを動作させます。
Dockerコンテナは独立していて他のDockerコンテナに影響を与えません。また、ホストとなる環境にも依存しません。
Dockerイメージは、コンテナの動作環境についてまとめたテンプレートファイルで、アプリケーション実行用のコマンドやメタデータなどを含みます。”docker container run” というコマンドでイメージからコンテナを作成できます。
Dockerイメージはコンテナの設計図にあたるもので、複数のレイヤーからなります。Dockerを使う開発者の主な仕事はDockerイメージの作成といっても過言ではありません。
Dockerfileは、Dockerイメージを作るための設計図に当たるテキストファイルです。 ”docker image build”というコマンドを使い利用します。
DockerHubから各イメージのベースを引っ張ってこれるため、Dockerイメージを一から作る必要はありません。Dockerfileは、そのベースに乗せるライブラリのインストール設定を記述する作業などに用いられます。
Dockerレジストリは、Dockerイメージを保存・共有するための場所です。Dockerイメージを作る際はここから引っ張り出して使います。
DockerHubはDocker公式のレジストリで、さまざまなDockerイメージが公開されています。ユーザーはそれらを利用することで、Docker上で簡単に実行環境を構築できます。
画像出典:dockerdocs
Dockerを学習するには、公式ドキュメントの利用に加え、書籍で体系的に学習することがおすすめです。また、Linuxの知識が必須となります。
Dockerでは初心者から上級者まで役立つ情報を掲載した公式ドキュメントを用意しています。Dockerに関する最新かつ正確な情報が得られるため、他の学習方法と併用するのもおすすめです。
公式には日本語版がありませんが、有志による日本語翻訳サイトがあります。チュートリアルやコマンド解説も豊富で、基礎的な知識を学ぶために役立つでしょう。Dockerを学習するなら最初に活用を検討することをおすすめします。
出典:dockerdocs
Dockerは概念や全体像を理解するのがやや難しいため、専門書籍で体系的に学習することもおすすめです。初心者向けや中級者向けなどの書籍が発刊されているので、自分のスキルレベルに書籍を選びましょう。
DockerはLinuxのコンテナ技術を使っているため、操作にはLinuxのコマンド操作が必要になります。そのため、Dockerを使う上でLinuxの基礎知識は必須です。
Linuxの基本やコンポーネントに関する知識があればDockerの学習に役立ちます。最初にDockerで使用する機会の多いLinuxのコマンド操作を覚えるとよいでしょう。
画像出典:Docker Hub
Dockerを利用するには、公式サイトからダウンロードしてMac / PC にインストールし、DockerHubへの登録も必要です。
Dockerには無料版と有料版があります。
無料版は「Docker Community Edition(Docker CE)」、有料版は「Docker Enterprise Edition(Docker EE)」です。名前の通り法人向けは有料版のみとなっています。
個人向けとなる無料版の「Docker Community Edition」は、Mac版はこちらから、Windows版はこちらからダウンロードが可能です。
出典:Install Docker Desktop on Mac|dockerdocs
出典:Install Docker Desktop on Windows|dockerdocs
Dockerイメージを共有・管理するためには、Docker Hubへの登録が必要です。まずはDocker Hubにアクセスして、サービスに登録します。
アカウントを作成したら、Macならターミナル、Windowsならコマンドプロントで “docker login” を入力、実行します。ここで、先ほどDockerHubに登録した際の「username」と「パスワード」を入力し、ログインできれば完了です。
DockerのコマンドはLinuxのルールに基づいています。ここではDockerでよく使われる基本的なコマンドを紹介します。
目的 | コマンド名 | コマンド |
コンテナの起動 | start | docker container start コンテナ名 |
コンテナの停止 | stop | docker container stop コンテナ名 |
コンテナの強制停止 | kill | docker container kill コンテナ名 |
コンテナの削除 | rm | docker container rm コンテナ名 |
コンテナの再起動 | restart | docker container restart コンテナ名 |
コンテナの一覧表示 | ls | docker container ls -a |
目的 | コマンド名 | コマンド |
Dockerイメージを「DockerHub」からダウンロード | pull | docker image pull イメージ名 |
Dockerイメージを「DockerHub」へアップロード | push | docker image push イメージ名 |
Dockerイメージを一覧表示 | ls | docker image ls |
Dockerイメージを削除 | rm | docker image rm イメージ名 |
目的 | コマンド名 | コマンド |
Dockerのバージョン表示 | version | docker version |
Dockerイメージの検索 | search | docker search イメージ名 |
メリットの多いDockerですが注意点もあります。代表的なものはセキュリティと競合サービスの台頭です。
Dockerはハッカーなどの攻撃者に狙われる可能性が比較的高いと考えられています。攻撃者にとってユーザー数が多いことは大きな魅力となっており、Docker側に悪用しやすい部分があることも指摘されています。
セキュリティを確保するためには、定期的なDockerイメージのスキャン、サプライチェーンの監視などの対策が必要です。Docker社では見つかった脆弱性に対してパッチをリリースしているため、常に最新の状態を保つことも重要になります。
Dockerはコンテナ型の仮想環境を作成・配布・実行するプラットフォームの先駆者で、長らく覇権を握っていました。しかし、最近はOrbStackをはじめとした後発サービスが成長したほか、オープンソースのサービスも多数登場しています。
依然としてDockerのシェアは高いものの、今後はDocker一強ではなくなると考えられており、シェアが少しずつ低下していく可能性があります。
今回は、Dockerの構成要素やメリットなどの概要に加え、学習方法やインストール手順、基本的なコマンドについて紹介しました。
Dockerは、開発環境の構築と管理を効率化するツールです。ここでの内容を参考に、DockerのインストールとDocker Hubへの登録を行い、実際にコンテナの作成や操作を試してみることをおすすめします。
深く学びたい方は、公式ドキュメントや書籍を活用し、Linuxの知識も併せて学習することで、Dockerをより効果的に活用できるようになるでしょう。