- 新卒ブログとは?
- 2024年4月に新卒入社したLIGメンバーが、日々の学びや気づきを綴るブログです。彼らがふだんどんなことを学んでいるのか、気軽にのぞいてみてください。
こんにちは、テクニカルディレクターのチェです!
今回は、私が入社してから今までアサインされてきた案件で使っているDockerについて、概念や基本用語、メリット・デメリットを紹介します。
Dockerは環境構築を簡単にしたり、リソースを効率よく使いながら高速に起動させることができるなど、多くのメリットがあります。そのため、最近はDockerの利用が広がっているんですよね。
今回は皆さんの勉強にもなればと思い、私がDockerを学んでいく過程で得た知識をまとめました。
ぜひ、最後まで読んでいってください!
目次
Dockerとは?
Dockerとは、コンテナ仮想化技術を利用して、アプリケーションの開発・実行できる環境を一つのコンテナにまとめて配置、実行、移動できるツールのことです。
Dockerを利用することで、チームメンバーに簡単に開発・実行環境を配布することができ、開発・本番環境の違いによるエラーを減らすことができます。
Dockerの基本用語
Dockerについて説明していく前に、まずは基本的な用語を紹介します。
コンテナ
コンテナとは、アプリケーションとその依存関係を一つにパッケージ化した実行環境です。
コンテナは仮想化技術を使って効率よく隔離されているため、異なる環境での一貫性を保ち、高速で動作させることができます。
Dockerfile
Dockerfileとは、イメージを作成するための設定ファイルです。
Dockerfileを使うことで、必要なツールやライブラリなどをどのようにインストールしてコンテナを作成するのかの定義をすることができます。
イメージ
イメージとは、コンテナに必要なソフトウェアや環境変数、設定というものが入っているものです。つまり、コンテナを作成するためのテンプレートのようなものになります。
ボリューム
ボリュームとは、コンテナにおける永続的なデータを保つための仕組みです。
コンテナは一時的な環境であり、コンテナを停止・削除するとデータが消えてしまいます。しかし、ボリュームという仕組みを利用することで、永続的にデータを保持することが可能になります。
Docker Compose
Docker Composeとは、複数のコンテナを管理・構成するためのツールです。一つのアプリケーションを起動させるには複数のコンテナを起動させる必要があります。
Docker Composeを利用することで、複数のコンテナを簡単に管理・構成することができます。
そのため、アプリケーションを起動させたり、停止などの操作を実行すると、Docker Composeの定義を参照し、該当コンテナを起動・停止させるようになります。
Dockerのメリット
開発環境・本番環境を統一できる
開発をするにあたって、開発環境と本番環境が異なることが一般的です。
開発環境は開発者のPCやローカル環境で動作しており、そこでアプリケーションの開発が行われるからです。
一方、本番環境は実際にユーザーが利用するサーバーやクラウド上の環境で動いているため、設定や依存するソフトウェアが異なる場合があります。
このような事情により、開発環境では動作していたアプリケーションが本番環境では動かなくなる問題が発生する場合があります。
しかし、Dockerを利用して仮想環境内で実行環境を作成し、開発環境と本番環境を統一させることで、このような問題を減らすことができます。
環境構築を単純化できる
環境構築に必要なプログラミング言語・データベース・ミドルウェア・ライブラリなどを手動でインストールしていると、時間がかかり設定ミスのリスクがあります。
しかしこれらをDockerfileに記述し、まとめて一度構築をすれば、何度でも簡単にその環境の再現ができるようになります。
また、ネット上に様々なDockerfileが公開されているため、それをダウンロードしてそのまま利用することもできます。
DockerfileについてはDocker Hubという公式サイトに公開されているので、興味のある方は確認してみてください。
軽量かつ高速
Dockerを利用することで、少ないリソース(CPUやメモリ)で動作させることができるようになり、一つのPCで複数のコンテナを動かせることができます。
アプリケーションを動かせるためにコンピュータにOSが必要ですが、通常の仮想化技術だとOS全体を仮想化するため、たくさんのリソースが必要になります。
しかしDockerはコンテナという仕組みを使っており、OS全体を仮想化するのではなく必要な部分だけを利用して動かしているため、少ないメモリで動作させることができるようになります。
また、仮想マシンは新しいアプリケーションを立ち上げるためにOSの起動や設定の必要があり時間がかかってしまいましたが、Dockerのコンテナは数秒で起動させることができます。
さらに軽量という特徴があるため、一つのPCで複数のアプリケーションを同時に立ち上げることができるようになります。
高い移植性
Dockerコンテナ内では、アプリケーションの必要な環境をパッケージ化して管理できます。
また、DockerはホストOSのカーネルを共有しながらアプリケーションが動作する環境を独立させるため、異なるOSでも同じように動作します。
これにより、開発から本番、さらには異なるPCやクラウド環境への移行が容易になり、環境依存の問題を減らすことができます。
Dockerのデメリット
上記にDockerについてたくさんのメリットを紹介しましたが、それによるデメリットも存在します。
学習コストが発生する
Dockerを使うことで効率的に環境を構築したり起動させることが可能になりますが、その分最初は学習コストが発生します。
Dockerの概念の理解やコマンドの使い方などの学習が必要になるため、初心者の方にはハードルが高く感じられるかもしれません。
永続データの管理が複雑
Dockerではコンテナを使って簡単にアプリケーションを起動したり、停止や削除をすることが可能ですが、コンテナは一時的な環境のため一回停止や削除されたりすると、コンテナ内に保存されていたデータが消えてしまいます。
この問題を防ぐために永続データというものを管理する必要があり、ボリュームという仕組みを利用する必要があります。
このボリュームはコンテナが停止・削除されてもデータを保持するために使用されていますが、その管理・設定方法が複雑なため、操作に慣れていないとこのような機能の使い方がわかりづらく感じるかもしれません。
Docker Desktopのインストール方法
Dockerを利用するには、まずインストールをする必要があります。
Dockerはコマンドでの操作もできますが、Docker DesktopというGUIのツールを利用も可能です。
高度な操作や詳細な設定はCLIでの操作が必要になりますが、視覚化することで利用が便利になるので初心者の方にはオススメです。
また、Docker DesktopをインストールするとCLIの実行ができるように設定されます。
- Docker公式サイトからダウンロード
- インストーラーを実行する(詳細は公式サイトで)
- Dockerのインストールを確認する
インストールが終わったら、以下のコマンドのどれかを実行して確認してみましょう。docker -v
上記のコマンドを実行後、Dockerのバージョンが表示されると、インストール完了です。docker
上記のコマンドを実行後、Dockerの使い方が表示されると、インストール完了です。
docker-composeの基本コマンド
Dockerについてなんとなく伝わりましたか?
ここではdocker-compose関連のコマンドについて解説していきます。
docker-composeコマンドはdocker-compose.ymlファイルがプロジェクトディレクトリに存在している前提で操作するコマンドになります。
コンテナの起動
docker-compose up
docker-compose.ymlに定義されているすべてのサービスが起動され、それをもとにコンテナがない場合は作成され、その後起動されます。
docker-compose up -d
上記の-dオプションをつけることで、バックグラウンドでコンテナを起動させることができるようになります。
つまり、コンテナを起動させたあとターミナルが続けて使用できるようになります。
ちなみに私はこの-dオプションを使うのが楽なので、いつもつけています。ターミナルを続けて使用できるので、ぜひ試してみてください。
docker-compose up <サービス名>
docker-compose.ymlに定義されている特定のサービスだけを起動します。
コンテナの停止
docker-compose stop
docker-compose.ymlに定義されているすべてのサービスが停止され、コンテナは削除されません。
docker-compose stop <サービス名>
docker-compose.ymlに定義されている特定のサービスだけを停止させます。
docker-compose down
docker-compose.ymlに定義されているすべてのサービスが停止され、コンテナやネットワーク・ボリュームなど、関連するリソースもすべて削除するコマンドです。
コンテナの再起動
docker-compose restart
docker-compose.ymlに定義されているすべてのサービスを再起動します。
起動しているコンテナのリスト表示
docker-compose ps
docker-compose.ymlに定義されているサービスの中で、起動中のコンテナのリストやステータスを表示します。
起動しているコンテナのログの表示
docker-compose logs
docker-compose.ymlに定義されているサービスの中で、起動中のすべてのサービスのログを表示します。
docker-compose logs <サービス名>
docker-compose.ymlに定義されているサービスの中で、特定のサービスのログを表示します。
停止しているコンテナの削除
docker-compose rm
docker-compose.ymlに定義されているサービスの中で、停止しているサービスのコンテナを削除します。
構文や設定のチェック
docker-compose config
docker-compose.ymlの構文や設定をチェックします。
ビルド
docker-compose build
Dockerfileをもとにイメージをビルドします。
まとめ
最後まで読んでいただき、Dockerについて理解を深めることができましたか?
今回の記事ではDockerの概念やメリット・デメリット、Docker-Composeが操作できる最も基礎となるコマンドについて解説してみました。
次回の記事では実際にイメージをビルドし、docker-compose.ymlを使ってアプリケーション環境を立ち上げる手順を詳しく解説します。
- 日本・フィリピン・ベトナムでの活躍チャンス
- 最先端技術と多言語環境での成長
- 有識者による月1回の勉強会
現在、海外拠点(フィリピン、ベトナム)に関われるエンジニアを募集しています。日本だけじゃなく世界で活躍することに興味のある方は、以下よりぜひご応募ください!