1. Dockerの存在意義と使う意味
Dockerとは
Dockerはオープンソースのコンテナ技術です。コンテナは軽量で移植可能なソフトウェアのパッケージで、開発者がアプリケーションとその依存関係をシステムから切り離して、コードを一貫性を持って実行できるようにするものです。
Dockerの利点
-
環境統一: Dockerを使うと、開発者は自分のローカルマシンで動作するものと同じアプリケーションを他のマシンやサーバーでも動作させることができます。
-
依存関係の管理: アプリケーションの依存関係をDockerfileという設定ファイルに記述することで、それぞれのアプリケーションが必要とするライブラリやツールを明確にすることができます。
-
隔離: Dockerコンテナは互いに隔離されているため、アプリケーションがシステム全体に影響を与えることはありません。これにより、異なるアプリケーションやプロジェクト間での環境の競合を防ぐことができます。
Dockerイメージとコンテナの関係性
Dockerでは、イメージとコンテナは2つの主要な概念です。
Dockerイメージは、コンテナを実行するために必要なすべての情報を含む静的なスナップショットです。具体的には、コンテナで実行するアプリケーションとその依存関係、環境変数、ファイルシステムなどを含みます。Dockerイメージは、Dockerfile
というテキストファイルを元に作成されます。
Dockerコンテナは、Dockerイメージから生成され、実際にアプリケーションを実行するためのランタイム環境です。イメージは読み取り専用で、コンテナはそのイメージの実行可能なインスタンスで、書き込み可能な層を持ちます。
Dockerイメージとコンテナの関係は、クラスとインスタンスの関係に似ています。イメージはクラスのように、どのような状態や振る舞いを持つべきかを定義しています。一方、コンテナはそのイメージ(クラス)から生成され、実際にその定義に従って動作するインスタンスです。
2. Dockerのコマンドの意味を理解し、使いこなせる
ここでは基本的なDockerコマンドについて説明します:
-
docker container run
: 新しいコンテナを作成して実行します。docker container run <image>
でイメージ名を指定します。
ここでは、docker container run hello-world
をterminalで叩いてみましょう。その前に必ずDocker desktop をインストールし、サインアップして、立ち上げておいてください。
そうすると下のようなものが出てきます。
Hello from Docker
とありますね。
-
docker image pull ubuntu
を実行して、Ubuntuのイメージをpullしてみましょう。
docker image ls
で確認しよう。
-
docker rm
: このコマンドを使ってさきほどpullしたUbuntoを削除します。docker rm <container id>
でコンテナIDを指定します。
-
docker ps
: 現在稼働中のコンテナのリストを表示します。-a
オプションを使うと、稼働中でないコンテナも表示されます。 -
docker stop
: 稼働中のコンテナを停止します。docker stop <container id>
でコンテナIDを指定します。 -
docker images
: ローカルに保存されているイメージのリストを表示します。 -
docker container rm <image id>
: イメージを削除します。`でイメージIDを指定します。 -
docker image pull
: Docker Hubからイメージをダウンロードします。docker image pull
でイメージ名を指定します。 -
docker image build
: Dockerfileからイメージをビルドします。docker image build -t <tag> .
でタグ名を指定し、.
はDockerfileがあるディレクトリを指定します。
3. Docker composeで複数のコンテナを効率的に扱える
Docker Composeは、複数のDockerコンテナを一括で管理するためのツールです。YAMLファイルでアプリケーションのサービスを定義し、一つのコマンドでこれらのサービスを一緒に作成、開始、停止することができます。
docker-compose.yml
ファイルは以下のような形式で記述します:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
この例では、2つのサービス、webとredisを定義しています。webサービスは現在のディレクトリのDockerfileからビルドし、ポート5000を外部に公開します。redisサービスはDocker Hubのredis:alpine
イメージを使用します。
主なDocker Composeのコマンドは以下のとおりです:
-
docker-compose up
: Docker Composeファイルに定義されたすべてのサービスを起動します。 -
docker-compose down
: Docker Composeファイルに定義されたすべてのサービスを停止し、ネットワークとボリュームも削除します。 -
docker-compose ps
: Docker Composeで管理されている現在稼働中のサービスを一覧表示します。 -
docker-compose build
: Docker Composeファイルに定義されたすべてのサービスをビルドします。
4. 実ソフトウェア開発にDockerを導入して、活用できる
Dockerをソフトウェア開発に活用するための一般的な方法は次のとおりです:
-
開発環境の統一: チームメンバー全員が同じDockerイメージを使うことで、"私のマシンでは動く"という問題を解決できます。
-
本番環境のシミュレーション: Dockerを使えば、本番環境とほぼ同じ条件でアプリケーションをテストすることができます。
-
CI/CDパイプライン: Dockerを使うと、ビルドからテスト、デプロイまでのプロセスを一貫して行うことができます。
-
マイクロサービスアーキテクチャ: Dockerはマイクロサービスの開発とデプロイにも適しています。
各サービスを個別のコンテナで実行し、それらをDocker ComposeやKubernetesなどで管理することが可能です。