【入門】Dockerとは?使い方やコンテナについてもわかりやすく解説
コンテナ単位で仮想的に複数のシステムを立ち上げられるDockerは様々な特徴や仮想マシンにはないメリットがあります。この記事ではDockerの基本的な概念やDocker Hub、導入する上で注意すべきこと、dockerの代表的なコマンド例や、簡易インタフェースのDocker Desktopを使うインストール手順、コンテナの実行の仕方等について基礎から実際の利用まで詳しく解説しています。
-
Contents
Dockerとは
OS環境をいわゆるコンテナと呼ばれるパッケージにして管理する、仮想化ソフトの一つです。
2013年にGo言語で開発されたオープンソースソフトウェアとして世に出てから管理性や手軽さから広く使われるようになりました。CPUの世代やOSのバージョンなど条件を満たしていればLinux環境・Windows環境・macOS環境で動作します。
-
そもそもコンテナとは
コンテナは入れ物で、中身としてOSやミドルウェア等のソフトと設定ファイルがパッケージ化されたものです。使用感としてはサーバーやアプリケーションに似ています。
例えば、Webサーバーやデータベースサーバーなど汎用的なもの、自社開発のアプリケーションソフトなどをコンテナに入れられます。
コンテナは互いに干渉しないようになっていますが、特定のコンテナ同士がやりとりできるよう設定できるため、パーツを組み合わせて様々なサーバー・アプリケーションソフト環境を組み立てることができます。
-
仮想マシンとの違い
仮想マシンも似た技術要素を持っていますが、大きな違いはパーツの大きさです。
仮想マシンは名前の通とおりマシン、つまりパソコンのハードウェア全体を丸ごと(必要なソフトや設定も含むだけでなくディスクやメモリ、ビデオカードなども含めて)パッケージとして扱う技術です。
同じ構成のマシンを複数立ち上げるなど物理マシンと比べて柔軟な運用ができますが、コンテナ技術よりも一つのパーツが大きく柔軟性に欠けたり、必要とするコンピュータ資源(メモリ容量や性能など)が大きいことがあります。
-
Dockerを構成する要素
Dockerは様々なコンポーネントから構成されています。ここで代表的な物を見ていきましょう。
-
Dockerイメージ
Dockerイメージはコンテナを作成する元となる、ひな形です。コンテナは書き込みができず一度作ると内容が変わることはありません。イメージは名前とタグで区別します。
-
Dockerコンテナ
コンテナはソフトを実行する環境であり仮想化されたOSともいえます。Dockerイメージを組み合わせて構築することが多いです。コンテナには名前を任意に指定したり、指定しなければDockerエンジンがコンテナ作成時に自動で名前を付けてくれます。
-
Docker Hub
Docker Hubはクラウドにある保管庫で、Dockerイメージの集積所です。Dockerエンジン既定のイメージリポジトリ(Dockerイメージの置き場所)として使用されます。
Webからもイメージの概要を閲覧できます。 https://hub.docker.com
多くのOSやアプリケーションソフトのDockerイメージが収録されているので、インターネットを通じて各種OSやアプリケーションソフトのイメージを取得し、手元のパソコンやサーバーでコンテナに使用できます。OSやアプリケーションソフト開発元が公式イメージを配布しているだけでなく、第三者が作成したイメージも多数利用できます。
-
Docker file
コンテナを作成するためのレシピとなる構成設定が独自の簡潔な構文で書けます。
拡張子無しのDockerfileという名のファイルです。テキストエディタで読み書きできます。
-
Dockerの特徴
Dockerはコンピュータの資源が比較的少なく済むため気軽に導入でき、複数人でコンテナを管理するのにも向いています。
-
動作が軽い
マシン単位でまるごと仮想化し実行する仮想マシンと比べると、軽量なコンテナを組み合わせて動作させるDockerはCPUやメモリへの負荷が比較的少ないです。
Dockerは複数のコンテナが一つのOS(ホストOS)に乗っかり動作しますが、仮想マシンは一つ一つの仮想マシン毎にOSが含まれているなど重くなりがちです。
-
環境構築が容易におこなえる
一般的な用途ならDocker Hubにある豊富なイメージを組み合わせるだけでコンテナを構築できるので、いろいろなコンテナを使うのが簡単です。
イメージによっては様々な設定オプションで動作をカスタマイズできます。
-
複数人で開発しやすい
コンテナをやりとりするにも軽量なテキストファイルとしてDockerfileをやりとりでき、仮想マシンと比べてDockerは複数人が同じ構成の仮想環境を用意がしやすく、構成が変わったときなども対応しやすいです。
-
Dockerを導入するメリット
Dockerを導入する5つのメリットを解説します。
-
普遍的に環境構築ができるためストレスが少ない
コンテナにはOSが含まれているので、一人がWindowsを使っていてもう一人がmacOSを使っていたとしても、両者で同じコンテナ環境を作ることができます。
例えば、両者で同じOSとWebサーバーを立ち上げてWeb開発に利用でき、ホストOSの違いによる動作の違いを気にすることなく環境を揃えて利用できます。
現在では、クラウドコンピューティング環境のAWSやGCPなどでもコンテナを立ち上げることができるので、開発時と同じ環境を商用利用することもできます。
-
資源コストの削減ができる
従来の開発では、専用のサーバーマシンを用意し、OSをインストールしたり、仮想マシンを立ち上げて使ったり、いずれも時間や労力を要することが多々ありました。
コンテナ環境は使い始めるのも不要になったときに破棄するのも比較的容易にでき管理コストなども減らせます。
-
システムの共有ができる
レシピとなる Dockerfileをやりとりし、Docker Hubと組み合わせて使うことで遠く離れていても同じコンテナ環境を立ち上げることができるため、複数人でシステムを共有して開発や運用に使うことができます。
-
スクラップ&ビルドが簡単にできる
資源の箇所でも触れましたが、コンテナは立ち上げもシャットダウンも丸ごとの仮想マシンよりも少ないメモリ容量と短時間ででき、ディスク容量も節約できるので、試しにコンテナを立ち上げてみる、やっぱり要らないので消す、というトライアルがおこないやすく一つの環境に執着しないストレスフリーな環境が構築可能です。
-
便利な関連ツールが充実してる
Dockerは関連ツールが多く出ているため単純なコンテナ管理の他にも様々な使い方ができます。
Docker Composeは複数のコンテナを組み合わせたアプリケーションを作成できます。一つの設定ファイルでアプリケーションを構成する複数のサービスを設定し、起動手順を指定できます。
Docker Swarmはコンテナを複数のコンピュータで動作させる技術で、Dockerバージョン1.12からはDockerエンジン本体に統合されました。Swarmモードを使用することで複数台のコンピュータを使い、一つのコンピュータが何らかの理由でダウンしても適切に切り離して全体としてサービスを継続することができます。
Docker Volumeは外付けハードディスクのように一つのコンテナ環境が終了しても、別個にデータを残せます。コンテナを削除してもまた別のコンテナからデータにアクセス出来ます。
-
Docker導入の注意点
Dockerのコア機能(Docker Engine)やGUIのDocker Desktopを導入する上でホストOSの条件や利用を検討する際の注意点をご紹介します。
-
対応ホストの種類が少ない
Windows、macOS、LinuxをDockerのホストOSとしてコンテナ環境を作成・利用できますが、サポートされるOSのバージョン(エディション)等に条件があるため、注意が必要です。またホストOSの他にもハードウェアの条件もあるので事前に確認をおすすめします。
-
OS違いの検証に手間がかかる
Docker はホストOS(DockerエンジンをインストールしたパソコンのOS)にコンテナ環境を作成するので、複数のコンテナが共通のホストOS内で動作します。OSをそれぞれ別個に備えている仮想マシンに比べ軽量ですが、ホストOSの違いについて検証するには別のホストOSを用意する必要があります。
-
学習難易度が高い
Dockerをインストール後、実際にコンテナ環境を使うにはコマンドラインの知識が必要になります。
Dockerfileなど設定ファイルはテキスト形式ではあるものの、コンテナを本格的に使うにはファイルシステムやネットワークのポート、場合によってはLinuxコマンドなどの知識が必要な場合もあります。
-
Dockerでよく使用するコマンド
ここではDockerのコマンドラインで使用する基本的なコマンドをご紹介します(どのホストOSを使っているかにより一部ファイルパス名の表記が異なる場合があります)。
以下、コマンドラインの文中にあります角括弧[~]はコマンドの中で省略可能な部分です。省略せずにコマンドを入れるとコマンドの動作をカスタマイズできます。また[~…]は0個以上指定できることを、|はいずれかを指定できることを表わします。また、CONTAINER、TAG、DIGEST等には実際のコンテナ名・タグ・ダイジェスト値を指定してください。
-
start
docker start [オプション] コンテナ名 [コンテナ名…] |
docker startコマンドは指定した停止中のコンテナを起動します。
-
stop
docker stop [オプション] コンテナ名 [コンテナ名…] |
docker stopは実行中のコンテナを停止します。
-
logs
docker logs [オプション] コンテナ名 |
docker logsコマンドは現時点のログをまとめて出力します。オプションで、ログの取得範囲や出力形式を指定できます。
2秒前まで遡ってログを出力する例:
docker logs -f –until=2s test |
-
rm
docker rm [オプション] コンテナ名 [コンテナ名…] |
docker rmは指定したコンテナを削除します。
-
cp
docker cp [オプション] コンテナ名:コピー元ファイルパス コピー先ファイルパス|- |
docker cpはコンテナ内とホストOSの間でファイル・フォルダをコピーします。
ホスト側のファイルsome_fileをコンテナの/workにコピーする例:
docker cp ./some_file CONTAINER:/work |
コンテナの/var/logs/にあるファイルをホスト側/tmp/app_logsへコピーする例:
docker cp CONTAINER:/var/logs/ /tmp/app_logs |
-
version
docker version |
docker versionはホストにインストールされているDocker関連コンポーネントのバージョン情報を表示します。
-
ps
docker ps [オプション] |
docker psはコンテナの一覧を表示します。
停止中のコンテナも含め一覧する場合は、オプション –all を指定します。
docker ps –all |
-
images
docker images [オプション] [REPOSITORY[:TAG]] |
docker imagesはイメージの一覧を表示します。一覧にはタグやID、いつ作成されたか、合計サイズ、リポジトリ名などが表示されます。
REPOSITORY、:TAGの部分にリポジトリ名やタグを指定すると該当するイメージのみを一覧できます。
-
pull
docker pull [オプション] NAME[:TAG|@DIGEST] |
Docker Hubにあるイメージを取得(ダウンロード)します。:TAG部分を省略すると最新版を示すタグ:latestが自動で選択されます。例えば、最新版 Debian(Linux OSの基本部分)を取得するには
docker image pull debian |
とします。もし最新版ではなく特定バージョンを取得したい場合は
docker image pull debian:bullseye |
のようにタグを指定します。
-
run
docker run [オプション] イメージ名 [指定コマンド] [指定コマンドの引数…] |
runコマンドは、新しく作成したコンテナで指定のコマンドを実行します。
debianコンテナを立ち上げ、端末をコンテナ環境のシェルに接続する例:
docker run –name test -it debian root@d6c0fe130dba:/# exit |
-
build
docker build [オプション] PATH | URL | – |
buildコマンドはDockerfileに基づいてDockerイメージを作成します。
Dockerfileの場所は、ローカルフォルダはもちろんgitリポジトリのURLなども指定できます。指定された場所により決まるコンテキストからDockerfileが探されます。-を指定すると標準入力からDockerfileを読み込みます。
-
Dockerの基本的な使い方
Dockerのインストール手順と基本的な使い方について解説します。
-
インストール
Dockerをインストールするにはお持ちのパソコンのハードウェアやOSバージョンに条件があるのでご注意ください。
ホストOSがWindowsの場合は(以下、2023年1月調べ)
- WSL2の機能をマイクロソフトの手順を参考に有効化した下記の環境
- 64ビット版Windows 11 Home・Pro バージョン21H2以降、またはエンタープライズ版・エデュケーショナル版21H2以降
- 64ビット版Windows 10 Home・Pro 21H1 (ビルド19043)、またはエンタープライズ版・エデュケーショナル版20H2 (ビルド 19042)以降
- ハードウェアの必要条件
- 64ビットかつIntel EPT・AMD RVIなどのSLATが有効なCPU
- 4ギガバイト以上のシステムメモリ
- BIOSでハードウェアによる仮想化サポートが有効になっている
- Linux カーネル更新プログラム パッケージをダウンロードしインストールしていること
- Hyper-Vと Windowsコンテナ機能を有効化した場合
- 64ビット版Windows 11 Pro バージョン21H2以降 または エンタープライズ版・エデュケーショナル版21H2以降
- 64ビット版Windows 10 Pro 21H1 (ビルド19043) またはエンタープライズ版・エデュケーショナル版20H2 (ビルド 19042)以降
- ハードウェアの必要条件は上記WSL2と同じ
ホストOSがmacOSの場合は(以下、同)
- インテルchip版
- macOSバージョン 11 (Big Sur) 以降。最新の13 (Ventura)推奨
- 4ギガバイト以上のRAM
- バージョン 4.3.30 以前のVirtualBoxがインストールされていないこと。インストールされていると互換性の問題が起きます。
- アップルシリコン版
- Rosetta 2インストールを強く推奨
softwareupdate –install-rosetta
- Rosetta 2インストールを強く推奨
ホストOSがLinuxの場合は
- サポートするディストリビューションは、Ubuntu Debian Fedora
- 64ビットカーネル、仮想化サポートのあるCPU
- KVM仮想化サポートが有効になっていること
- QEMUバージョン 5.2 以降が必要
- systemd初期化プロセス
- デスクトップ環境は、 Gnome KDE Mate
- 多くのGnomeはトレイアイコンをサポートしないためGnome拡張をインストールする必要があります
- 4ギガバイト以上のRAM
- ユーザー名前空間でのIDマッピングの設定を有効にする
ここから、実際の導入手順をホストOSが64ビット版Windows 11 Homeエディション(バージョン 22H2)WSL2の例でご紹介します。
はじめにhttps://docs.docker.com/desktop/install/windows-install/にアクセスします。
図の青いDocker Desktop for Windowsボタンを押してインストーラーをダウンロードします。
ダウンロードしたDocker Desktop Installer.exeをダブルクリックして、インストーラを実行します。
WSL2とHyper-Vの両方が有効になっている場合は、どちらのテクノロジーを使用するか選択してください。お使いのシステムが2つのテクノロジーの片方しかサポートしていない場合、使用するバックエンドを選択することはできません。
今回はWSL2のみの環境ですので、インストール時にどちらを使用するかの選択肢は表示されません。
OKボタンを押してインストールが進行するのを待ちます。
インストールに成功したら、再起動が必要です。Close and restartをクリックして、パソコンを再起動すればインストール作業は完了です。
コンピューターを再起動し、Windowsのプロフェッショナル版以上のエディションを使用している場合、下記の設定をおこなうことで任意のユーザーでDockerを使用できます。Windowsホーム版の場合は、コンピュータの管理者でログオンする必要があります。
- Windows 10/11のプロフェッショナル版以上のエディションを使用していて管理者アカウントとDockerを使うユーザーアカウントが異なる場合、ユーザーを docker-users グループに追加する必要があります。コンピュータ管理を管理者として実行し、「ローカルユーザーとグループ」 > 「グループ」 > 「docker-users」に移動します。右クリックして、ユーザーをグループに追加します。ログアウトし、ログインしなおすと変更が有効になります。
適切なアカウントでログオンすると、初回起動時に利用条件への同意が求められます。 ここではAcceptボタンを押します。
-
Docker Desktopの起動
初期状態ではログオンすると自動でDocker Desktopが起動します。しばらく待っても起動しない場合は、スタートメニューからDocker Desktopを起動してください。
チュートリアルが始まりますが今回はSkip tutorialを押してスキップします。
Docker Desktopが起動しました。 まだコンテナが一つもない状態のため、Containersは初期の表示になっています。
今回は、サンプルとしてシンプルなコンテナを起動してみましょう。コマンドライン(コマンドプロンプト、端末)を開いてコマンドを入力してください。
docker run hello-world
以下のようなテキストが出力されればDockerエンジンが正常に動作しています。
こうしてコンテナを一度実行すると、次のようにコンテナ一覧が更新されたことが分かります(表中のNameは例です。環境により名前は異なります)
-
まとめ
Dockerの基本的な概念、構成要素、仮想マシンとの違いや利用シーン、よく使われる dockerコマンドなどを見てきました。
Dockerは複数人で同じ環境でアプリを実行する場合や、既成のイメージを組み合わせてコンテナ環境を構築できる有用性など、従来の手間の掛かるサーバー構築と比べ少ない労力で様々な実行環境、サーバー環境を作成できるため、開発から運用まで幅広いケースで役立ちます。
開発者からサーバ管理者、気軽にサーバーを使ってみたいユーザーにも幅広く使える技術です。貴方もこの機会にコンテナ環境の構築にトライしてみてはいかがでしょうか。