2025年版 Dockerイメージを効率的に管理するDockerコンテナの作成方法

複数のオペレーティングシステム上で動作するアプリケーションやサービスを開発している場合、Dockerを使うことでデプロイプロセスを簡略化できます。
Dockerコンテナを作成すれば、仮想専用サーバー(VPS)ホスティングや専用マシンなどの環境で、複数のアプリケーションやサービスを手軽に起動できます。Dockerは軽量で、デプロイが容易なうえ、仮想マシンよりも優れたパフォーマンスを発揮します。
Dockerコンテナにはアプリケーションを実行するために必要な依存関係がすべて含まれているため、互換性の問題を解消できます。オープンソースソフトウェアであるDockerを使ってアプリケーションをデプロイする開発プロジェクトでは、ゼロからDockerコンテナを作成することが重要です。
本チュートリアルでは、Dockerコンテナの作成方法をステップごとに解説し、ソフトウェア開発における利点と重要なベストプラクティスも紹介します。
Dockerコンテナとは
Dockerコンテナは、特定のアプリケーションを異なるオペレーティングシステム上で実行するために必要な依存関係をすべて備えた自己完結型のソフトウェアパッケージです。Dockerイメージには、コンテナを起動または停止するためのすべての設定手順が含まれています。ユーザーがイメージを実行するたびに、新しいコンテナが作成されます。
Dockerコンテナを使う理由
Dockerコンテナは、現代の開発者にとって画期的な存在です。コンテナの分離機能により、同じオペレーティングシステム上でアプリを実行しながら、他のOSやコンテナとは独立した状態を維持できます。この機能によって、開発環境やステージング環境において一貫したパフォーマンスが保証されます。
企業にとって、Dockerコンテナはデプロイの速度を向上させ、システムリソースの利用効率を最大化します。リソース面では、Dockerコンテナのデプロイは仮想マシンに比べて必要なメモリが大幅に少なくて済みます。さらに、可搬性が高いため、既存アプリケーションの移行やスケーリングも可能になります。
まとめると、Dockerコンテナは開発プロセスを最適化し、貴重な時間を節約するとともに、アプリケーション開発プロジェクトのコスト効率の高い成功に貢献します。
Dockerコンテナの作成方法
このチュートリアルでは、Ubuntu 22.04オペレーティングシステムを搭載した仮想専用サーバー(VPS)を使用しますが、それ以降のバージョンでも動作するはずです。まずは、お使いのサーバーにDockerがインストールされていることを確認してください。
HostingerのVPSをご利用のお客様は、Dockerを自動インストールできる「Ubuntu with Docker」テンプレートをご活用いただけます。このテンプレートを使用するには、VPSのダッシュボードにログインし、「OS & Panel(OSとパネル)」→「Operating System(オペレーティングシステム)」に進みます。
「Applications(アプリケーション)」のドロップダウンメニューから「Ubuntu 22.04 64bit with Docker」を選択し、「Change OS(OSを変更)」をクリックします。インストールが完了するまでお待ちください。

このテンプレートの詳細や他との違いについては、当社の「Docker VPSホスティング」専用ページをご覧ください。

インストールが完了したら、以下のDockerコンテナ化の手順に従って、アプリケーションを分離された環境内で実行します。
1. Dockerイメージを作成する
Dockerイメージは、コンテナの設計図です。アプリケーションの実行に必要なコード、ライブラリ、依存関係がすべて含まれています。Docker Hubなどのプラットフォームで公開されているものや、個人で管理しているDockerイメージを実行すると、それがDockerコンテナに変換されます。
新しいDockerイメージを一から作成することも可能ですが、Docker Hubにはすぐに利用できる多数のベースイメージが用意されているため、それを基に構築するほうが実用的です。
まずはPuTTYなどのSSHクライアントを使ってVPSにログインします。次に、以下のLinuxコマンドを実行して、システム上のすべてのDockerイメージを一覧表示します:
sudo docker images
既存のDockerイメージに関する詳細情報を確認するには、次のコマンドを実行します:
sudo docker images --help
コマンドプロンプトで-qオプションを使用すると、システム上で利用可能なイメージの数値IDのみを一覧表示できます:
sudo docker images -q
新しいコンテナによってタグ付けや参照がされていない、非ダングリングのイメージをすべて一覧表示するには、次のコマンドを使用します:
sudo docker images -f dangling=false
リアルでは、MySQLをベースにしたイメージを取得します。各イメージのページにアクセスすると、追加情報を確認できます。

次のコマンドを実行して、新しいイメージを現在のディレクトリにインポートします。<image name or image id>は、選択したイメージの名前またはIDに置き換えてください:
docker pull <image name or image id>

Dockerイメージを作成するもう1つの方法として、Easypanelを使用する方法があります。このツールはグラフィカルユーザーインターフェースを提供し、コマンドライン操作に不慣れな方でもDockerイメージの管理を簡単に行えるようにします。EasyPanelは、Node.js、Ruby、Python、PHP、Go、Javaなど、さまざまなプログラミング言語で作成されたアプリケーション向けにDockerイメージを作成できるツールです。環境構築や依存関係設定に関わる多くのプロセスを自動化します。
HostingerのVPSホスティングプランでは、「Ubuntu 22.04 64bit with EasyPanel」テンプレートが提供されており、VPSダッシュボードの「Operating System(オペレーティングシステム)」メニューからインストールできます。
DockerベースのテンプレートとEasyPanel搭載のテンプレート、どちらを使用するかはお客様次第です。細かい制御が必要であればDockerを、操作のしやすさを重視する場合はEasyPanelを選ぶなど、ご自身のスキルやプロジェクト要件に合わせて選択してください。
2. Dockerfileを作成する
Dockerfileは、Dockerに対して「どのようにイメージをビルドするか」を指示するテキストファイルです。コンテナイメージを構築するために必要なDockerコマンドがすべて記載されています。Dockerfileを使用することで、毎回同じ手順でイメージをビルドでき、作業の一貫性と管理のしやすさが向上します。
以下は、シンプルなDockerfileテンプレートの例です:
FROM ubuntu:latest
WORKDIR /app
COPY . .
RUN apt-get update && apt-get install -y curl
CMD ["curl", "https://www.example.com"]
Dockerfileでは、各コマンドがDockerイメージ内の新しいレイヤーを作成します。例を使って仕組みを説明します:
- FROM ubuntu:latest ‒ 最新のUbuntu親イメージを取得し、ベースレイヤーとして設定します。この上に後続のレイヤーが積み重なります。
- WORKDIR /app ‒ コンテナの作業ディレクトリを設定し、以降のコマンドの実行コンテキストとなる新しいレイヤーを作成します。
- COPY . . ‒ ローカルファイルをコンテナ内の同じフォルダにコピーし、プロジェクトファイルを含む追加レイヤーを作成します。
- RUN apt-get update && apt-get install -y curl ‒ Docker runコマンドは、コンテナ内でcURLをインストールし、更新されたパッケージリストとインストール済みのcURLパッケージを含む新しいレイヤーを追加します。
- CMD [“curl”, “https://www.domain.com”] ‒ コンテナ起動時に実行されるデフォルトコマンドを設定します。
ファイルの追加や編集など、コンテナの実行中に行った変更はそれぞれの書き込み可能レイヤーに保存されます。この仕組みにより、ベースイメージに影響を与えることなく、一時的な調整を加えることが可能です。
ポイント
Docker Hubの事前構築済みイメージを使用する場合、Dockerfileは必須ではありません。ただし、それらをカスタマイズしたり拡張したりする場合には必要になります。
3. Dockerコンテナをビルドする
新しいDockerfileを用意したら、そのファイルがあるディレクトリに移動し、次のDocker buildコマンドを実行して新しいイメージのビルドプロセスを開始します。<image name or image id>の部分はタグ名に置き換えてください。
docker build -t <image name or image id> .
先ほどビルドしたイメージから、新しいコンテナをDocker runコマンドで起動します:
docker run <image name or image id>
それ以外の場合は、Docker Hubからインポートした事前構築済みイメージを実行します。ここでは、先ほどpull(取得)したMySQLイメージを使用します:
docker run mysql

効率的なイメージレイヤーの構築は、ビルド時間やリソース使用を最適化するうえで非常に重要です。Dockerfile内の各コマンドは新しいレイヤーを作成し、Dockerはそれをキャッシュします。イメージを再ビルドする際、変更がないレイヤーは再利用されるため、ビルド時間を短縮できます。
さらに、レイヤーを効率的に構成することでイメージサイズを削減でき、pull、push、デプロイの速度が向上します。特に、競争力を維持するために迅速なデプロイが求められる企業にとって、この手法は不可欠です。
4. コンテナを実行・管理する
コンテナイメージを作成したら、Docker runコマンドを使ってコンテナを起動します。<container name>の部分は任意のコンテナ名に置き換えてください。ここでは mysql bashが、実行するコンテナを示しています。
docker run --name <container name> -it mysql bash
Docker psコマンドに-aオプションを付けて実行すると、システムの実行中のコンテナを一覧表示できます。root権限で実行する場合は、コマンドの先頭にsudoを付けます。
docker ps -a
次のDockerコマンドを使用すると、コンテナのトッププロセスを確認できます:
docker top MyContainer

ホストとコンテナ間でポートをマッピングするには、docker runコマンドと一緒に-pオプションを使用します:
docker run -p host_port:container_port <image name>
ポートマッピングを行うことで、コンテナ内のアプリケーションを外部に公開し、ホストマシンからアクセスできるようになります。このプロセスは、Webサーバーやデータベース、外部システムと接続するアプリケーションにとって重要です。
永続的なストレージを確保するには、-vオプションを使ってボリュームをコンテナにアタッチします:
docker run -v host_directory:container_directory <image name>
ボリューム(Dockerのデータ保存機能)をアタッチすることで、コンテナ環境はより堅牢になり、管理が容易になり、パフォーマンスも向上します。Dockerコンテナ環境を停止、削除、更新してもデータは保持されます。さらに、ボリュームは複数のコンテナ間で共有できるため、マルチコンテナ環境でのデータ管理が簡単になります。
ポイント
Docker CLIコマンドやDocker APIを使用して、ボリュームを管理できます。
–cpusと–memoryオプションを使うことで、CPUやメモリなどのリソースを制限できます。次の例では、コンテナを最大0.5CPUと500MBのRAMに制限しています。
docker run --cpus=0.5 --memory=500m <image name>
実行中のコンテナを停止するには、次のコマンドを実行します:
docker stop MyContainer
コンテナID、CPU使用率、メモリ使用量などの追加情報を表示するには、次のコマンドを実行します:
docker stats

Dockerコンテナを終了するには、コマンドラインで次のコマンドを入力します:
docker kill MyContainer
Dockerコンテナの活用方法
効率的なDockerコンテナ化プロセスを実現するための推奨手法を以下にまとめます。
Kodeeを活用する
コンテナ作成において効率性は重要です。Hostingerをご利用のお客様は、VPS管理の各種作業を簡素化できるAIアシスタント「Kodee」を活用できます。インストール手順の案内から適切なコマンドの提案まで対応します。
この機能はVPSダッシュボードにある左側のパネルから利用できます。例えば、次のような質問を入力できます。「How to dynamically update the container when the base image changes?(ベースイメージが変更されたときにコンテナを動的に更新するにはどうすればいいですか?)」
Kodeeは、関連するコマンドやスクリプトを含む包括的な回答を返します。

コンテナのステータスについて質問することもできます。例えば、サーバー上で稼働中のすべてのコンテナ一覧をリクエストします。

コンテナを軽量に保つ
コンテナが小さいほど、高速かつ効率的でセキュリティ面でも優れています。デプロイが迅速になり、使用するリソースも少なく、ハードウェアの利用効率が最大化されます。構成要素が少ないことで攻撃対象領域が減り、全体的なセキュリティが向上します。
軽量なコンテナを作成するためのヒントは以下の通りです:
- 軽量なベースイメージを選択する ‒ 複数の類似イメージがある場合は、共通コンポーネントを含むベースイメージを作成し、それを基にカスタムDockerイメージを作成します。
- マルチステージビルドを活用する ‒ 最終イメージには、成果物や必要な実行環境など最小限のコンポーネントのみを含めます。
- 不要なファイルを削除する ‒ パッケージインストール後に未使用のDockerイメージ、キャッシュ、一時ファイルを削除し、アプリケーションのパフォーマンスを最適化します。
- コマンドを具体的に記述する ‒ コマンドは1行にまとめて実行し、イメージレイヤーを減らします。また、必須でない推奨パッケージやオプションパッケージはインストールしないようにします。
公式イメージを使用する
Docker Hubにある公式イメージを使ってDockerイメージを構築することで、安全性・最適化・信頼性が確保された基盤をコンテナに提供できます。公式イメージは特定のユースケースに合わせて調整されていることが多く、堅牢かつ効率的なアプリケーションを開発するための効率的な出発点となります。
セキュリティ面では、公式イメージは徹底したセキュリティチェックを受け、脆弱性に対するパッチも迅速に適用されます。さらに広く利用されているため、テストが十分に行われており、さまざまな構成やプラットフォームとの互換性も高いのが特徴です。
コンテナの権限を制限する
不要な特権を付与してコンテナを実行すると、セキュリティリスクが高まります。コンテナがrootユーザーで実行されている状態で侵入を許してしまうと、攻撃者がシステム全体を制御できてしまう可能性があります。
システムの安全性を維持するためには、コンテナには必要最小限の権限のみを付与しましょう。アプリケーションをコンテナ内で実行する際には、root以外のユーザーを作成して利用することを推奨します。また、コンテナを読み取り専用モードに設定することで、不必要な変更を防ぐことも可能です。
機密情報を保護する
Dockerコンテナ起動時には、コンテナ内で動作するアプリケーションやサービスに応じて環境変数を設定できます。一般的な例としては、データベースの認証情報、アプリケーションの設定、認証用のシークレット値などがあります。
環境変数を利用すれば、機密データをコードやイメージ本体から分離できるため、これら両方にアクセス権を持つ人からも情報を隠すことが可能です。また、Dockerfileを変更したりイメージを再ビルドしたりすることなく、環境変数の値を変更するだけで設定を切り替えられるため、セットアップの柔軟性も向上します。
コンテナオーケストレーションを活用する
Docker ComposeやKubernetesといったコンテナオーケストレーションツールを使えば、複数コンテナで構成されるアプリケーションの管理を簡素化できます。1つのコマンドで複数のコンテナを同時に起動できるため、デプロイ作業が効率化されます。
例えば、Docker ComposeでWordPressをインストールし、Webサーバーやデータベースなど必要なコンポーネントをまとめて構築できます。
また、オーケストレーションツールはスケーリングも自動で行い、アクセス数の増加に応じてサービスを調整します。さらに、受信したネットワークトラフィックを複数のコンテナに分散させることで、パフォーマンスと信頼性の向上にもつながります。
まとめ
Dockerは、現代の開発者や企業にとって欠かせないツールであり、一貫した環境の提供、デプロイの効率化、リソース利用の最適化を実現します。コンテナの作成方法を理解することで、開発サイクルをより効率的かつ安全に進めることができます。
本記事では、イメージからDockerコンテナを作成するステップと、その過程でよく使われるDockerコマンドを紹介しました。また、Ubuntu 22.04仮想専用サーバー(VPS)上で効率的にDockerコンテナを管理するためのポイントについても解説しました。
Dockerコンテナの作成について質問がある場合は、下のコメント欄にぜひお寄せください。
Dockerコンテナの作成方法に関するよくある質問
このセクションでは、Dockerコンテナの作成に関してよくある質問を取り上げます。
Dockerイメージとコンテナの違いとは?
Dockerイメージは、コンテナを作成するための設計図であり、アプリケーションのコード、ライブラリ、依存関係をすべて含んでいます。一方、Dockerコンテナは、そのイメージを基に実行されるインスタンスです。イメージからコンテナを起動すると、アプリケーションが動作し、相互作用できるライブ環境がシステム上に作成されます。
1つのDockerイメージから複数のコンテナを作成できる?
はい、1つのDockerイメージから複数のコンテナを作成できます。各コンテナは独立して実行され、それぞれが独自のリソースと設定を持ちます。この方法を使えば、毎回Dockerイメージを作り直さずに、さまざまな環境でアプリケーションをスケーリングしたり稼働させたりでき、時間とリソースを節約できます。
Dockerイメージは編集できる?
Dockerイメージは読み取り専用のレイヤーで構成されているため、直接編集することはできません。変更を加えるには、Dockerfileやソースファイルを更新し、Docker buildコマンドで新しいイメージをビルドする必要があります。既存のコンテナは自動的に更新されないため、古いコンテナを停止し、新しく作成したイメージから新しいコンテナを作成する必要があります。