Docker コンテナーとして Ubuntu を実行する方法

Docker は、Stack Overflow の 2022 年と 2023 年の開発者調査によると、最も愛されているプログラミング ツールです。IT で広く使用されており、アプリケーションをデプロイする方法に革命をもたらしました。

Docker コンテナーは仮想マシンに似ていますが、軽量で、オペレーティング システムに必要な基本的な要素のみが詰め込まれています。Docker コンテナーがいかに最小限であるかを理解するために、Docker で Ubuntu を実行する方法を見てみましょう。

ステップ 1: Ubuntu Docker イメージを取得する

Docker がインストールされていない場合は、Ubuntu に Docker をインストールするガイドに従ってください。もちろん、macOS や Windows に Docker をインストールすることもできます。

Docker Hub は、公式で一般に検証された Docker イメージを入手するための推奨リポジトリです。Docker Hub を使用して、プライベート Docker イメージを管理および作成することもできます。

Azure や AWS などのクラウド プロバイダーは、カスタム Docker イメージをホストして管理できる Docker リポジトリも提供しています。

次のコマンドを使用して、最新の Ubuntu Docker イメージをダウンロードできます。

sudo docker pull ubuntu

Docker は、まだローカルに保存されていない場合は、最新のイメージを PC にダウンロードします。

特定のバージョンに興味がある場合は、Docker Hub のイメージで使用可能なタグを見て、その特定のタグを使用してダウンロードします。たとえば、Ubuntu 20.04 をダウンロードするには、次のコマンドを実行します。

sudo docker pull ubuntu:20.04

sudo docker images コマンドを使用して、PC 上のすべての Docker イメージを一覧表示できます。

ステップ 2: Ubuntu Docker イメージを実行する

Docker イメージは、単にコンテナーを構築するための命令の青写真です。コンテナーは、Docker イメージの実行中のインスタンスです。ダウンロードしたばかりの Docker Ubuntu イメージを起動するには、次のコマンドを実行します。

sudo docker run -ti --rm ubuntu /bin/bash

このコマンドは、Docker に対して Docker Ubuntu コンテナーを対話型ターミナル モード (-ti) で実行するように指示します。/bin/bash 引数は、コンテナーに Bash シェル ターミナルを実行するように指示する方法です。最後に、--rm フラグは、Docker に対して、Ubuntu Docker コンテナーを停止した後に自動的に削除するように指示します。

シェルは root ユーザーとして起動し、ターミナルは一般的な Linux システムで得られるものと似ています。デフォルトでは、コンテナーにはランダムなホスト名が割り当てられます。

また、このイメージには GUI やその他の標準的なコマンドライン ツールが多数含まれていないことに気付くでしょう。Ubuntu Docker イメージは約 78MB のみで、非常に軽量です。

Ubuntu Docker で Linux コマンドを実行する

通常、lsb_release -a コマンドを使用して Linux の OS 情報を確認しますが、この場合、Docker Ubuntu イメージにはデフォルトで lsb-core パッケージがインストールされていないため、このコマンドは使用できません。Docker イメージにはコア要素のみが含まれており、それ以外のものは含まれていないことに注意してください。

幸い、Bash シェルの一部として提供されている cat コマンドを使用して、OS 情報を確認できます。

cat /etc/os-release

出力からわかるように、これは 2022 年にリリースされた LTS バージョンの Ubuntu です。Docker のパワーのおかげで、非常に最小限のシステム リソースを使用して Docker で Ubuntu を実行できます。

これは単に軽量 OS であるため、使い慣れた Ubuntu コマンドを使用して必要なアプリケーションをインストールできます。まず、パッケージ ソースを更新し、次のように入力して lsb-core をインストールします。

apt update && apt install lsb-core

Docker シェルに root ユーザーとしてログインしているので、sudo コマンドを使用する必要はありません。

インストールしたら、lsb_release -a コマンドを実行すると、今回は出力が得られます。

Docker コンテナーの状態を保存する

この段階で Docker コンテナーを停止すると、ソフトウェアの更新やインストールされたツールなど、行ったすべての変更が失われます。Docker コンテナーは、そのように設計されています。置き換え、停止、管理が簡単です。

ご存知かもしれませんが、Docker は汎用性の高いツールです。必要に応じてコンテナーの状態を保存できます。まず、次のコマンドを使用して Docker Ubuntu イメージのコンテナー ID を確認します。

sudo docker ps

前述のコマンドは、PC 上のすべての Docker コンテナーを一覧表示します。上記の出力にある Ubuntu イメージの ID は 524aa76baafb で、あなたのは別のものになります。

次のコマンドを実行して、コンテナーの状態を保存します。

docker commit -p container_id new_container_name

次のコマンドの container_id を正しいものに置き換えてください。また、Docker イメージ名は小文字のみを使用できます。

sudo docker commit -p 524aa76baafb myubuntu
前述のコマンドは、コンテナーを保存する前に一時停止し、myubuntu という名前の新しい Docker イメージを作成します。新しい Docker イメージには、コンテナーに加えたすべての変更が含まれます。これで、カスタム Ubuntu Docker イメージが作成されました。

sudo docker images コマンドを使用して Docker イメージを一覧表示すると、新しいカスタム イメージも一覧表示されます。

Ubuntu Docker コンテナーでデータを永続化

Docker のもう 1 つの強力な機能は、ホスト マシンとデータを永続化または共有する機能です。マウントされたボリュームまたは Docker ボリュームを使用するという 2 つの主要なオプションがあります。Docker は、マウントされたボリュームと比較して優れているため、後者を使用することを推奨しています。

PC の任意の場所に Docker ボリュームを作成できます。ホーム ディレクトリに作成して Docker_Share という名前を付けましょう。

sudo mkdir -p Docker_Share

次に、次のコマンドを使用して Ubuntu コンテナーを停止します。container_id を Ubuntu Docker コンテナーの実際の ID に置き換えます。

sudo docker stop container_id

最後に、次のコマンドを使用して Docker_Share ディレクトリを使用してデータを永続化するために Ubuntu Docker イメージを実行できます。または、docker-compose ファイルを作成して Docker イメージを簡単に起動することもできます。

sudo docker run -ti --rm -v ~/Docker_Share:/data ubuntu /bin/bash

このコマンドは Ubuntu イメージを起動し、Docker コンテナー内に /data ディレクトリを作成します。/data ディレクトリは、以前に作成した Docker_Share フォルダーにマップされます。

Docker_Share ディレクトリを使用して、コンテナーの /data ディレクトリで作成または変更されたファイルにアクセスできます。その逆も同様です。Docker は、Docker_Share ディレクトリのファイル変更をコンテナーの /data ディレクトリに複製します。

Docker は仮想マシンの優れた代替手段です

Docker は、安全で保護された環境でアプリケーションをデプロイして実行できる非常に強力なテクノロジーです。たとえば、幅広いタスクに使用でき、ほとんどの場合、仮想マシンを実行する代わりに軽量な Ubuntu Docker コンテナーを実行しても問題ありません。