GENIEE TechBlog
🐳

2025年度 新卒研修 仮想化技術とDocker基礎

に公開

はじめに

こんにちは!2024年新卒入社の平岩です。普段はデマンド開発部でバックエンドエンジニアとして働いています。

さて、今日のアプリケーション開発において、Dockerは避けては通れない重要な技術となっています。
普段の開発において「プログラムが手元のPCで動かない」ことや、チーム開発において「メンバー間で環境差異があってハマった」といった経験は、多くのエンジニアが一度は通る道だと思います。Dockerは、こうした問題を解決し、誰でも・どこでも同じ開発環境を素早く構築できる「コンテナ技術」を提供します。

株式会社ジーニーでは、入社2年目のエンジニアが講師となり、新卒社員向けに技術研修「bootcamp」を実施しています。この研修は、多様なバックグラウンドを持つ新卒社員の技術的な足並みを揃え、プロダクト開発へスムーズに参入できるようにすることを目的としています。

この記事は、私が講師を担当した「仮想技術とDocker 基礎」の研修内容を、ポイントごとにまとめたものです。Dockerに興味をお持ちの方が、学習を始めるきっかけとなれば幸いです。

なぜ今、Dockerを学ぶのか

本研修のゴールは、以下の通りです。

Dockerの基礎を理解して、自力で必要な開発環境を構築できる力を身に付ける

皆さんは、同じプログラムのはずなのに、実行する環境によって結果が変わってしまった経験はありませんか?ライブラリのバージョンやOS設定などの違いが、アプリケーションの挙動に影響を与えることは珍しくありません。

研修では、この問題を解決するものとして「仮想化技術」を紹介しました。

仮想化技術を使えば、アプリケーションごとに独立した実行環境をソフトウェアで再現できます。これにより、開発者の手元PCでも、本番サーバーでも、ほぼ同様の環境を構築でき、環境差異による問題を減らすことが可能です。

また、仮想化技術がなければ、機能同士が互いに干渉するのを防ぐために、機能ごとに物理サーバーを用意する必要があります。そのため、仮想化技術によってマシンリソースを効率的に活用できるというメリットがあります。

Dockerは、この仮想化を「コンテナ」という非常に軽量な単位で実現する技術です。そのため、手元で簡単に開発環境を再現することが可能であり、本来のアプリケーション開発に集中できるようになります。

Dockerの基本操作と設計思想

今回の講義で最も重要なポイントは、Dockerの基本的な考え方を理解することです。Dockerは単なるツールではなく、アプリケーションが動く環境を「コード」として扱うことで、開発から運用までのプロセスを効率化する点にあります。

Dockerfileからコンテナができるまで

Dockerでは、Dockerfileというテキストファイルに環境構築の手順を記述します。このDockerfileをbuildすることで、アプリケーションの実行に必要なものがすべて詰まったDockerイメージが作成されます。そして、このイメージをrunすることでコンテナが起動し、アプリケーションが実行されます。

この一連の流れを、研修では以下の図で説明しました。

Dockerfileには、ベースとなるOSイメージ(FROM)、コマンドの実行(RUN)、コンテナ起動時のデフォルトコマンド(CMD)などを記述します。これにより、環境構築の手順がコードとして明確化され、誰が実行しても同じ環境を再現できます。

Dockerの重要な原則

1コンテナ1プロセス

各コンテナは、単一の役割(例:Webサーバー、DBサーバーなど)に特化させるべき、という原則です。これにより、各コンポーネントの独立性が高まり、個別のスケールやアップデートが容易になります。

コンテナの使い捨て運用 (Immutable Infrastructure)

一度作成したコンテナの設定を後から変更するのではなく、問題が発生したり設定を変更したりしたい場合は、コンテナを破棄して新しいイメージから再作成します。これにより、環境が意図せず変更される「構成ドリフト」を防ぎ、常にクリーンな状態から環境をスタートできます。

これらの原則を理解することで、Dockerをより効果的に活用し、クリーンで管理しやすいアプリケーション基盤を設計できるようになります。

Dockerコンテナを動かす仕組み

講義では、基本的な内容に加えて、実際に手を動かしながらDockerの仕組みをより深く理解するためのトピックにも触れていきました。

例えば、Dockerを初めて学ぶ新卒社員がDocker操作に慣れることを目的として、「cowsayイメージを使ったコンテナの基本操作」や「nginxコンテナを起動してWebサーバーを構築する」といった演習を行いました。

そして、Dockerがどのようにしてコンテナの独立性を保っているのか、その裏側にも触れました。研修では、コンテナの分離を実現するLinuxカーネルのNamespace機能について、以下の図を用いて解説しました。

また、コンテナが使用するリソース(メモリなど)を制限するcgroupという仕組みについても、図を交えて解説し、実際にどのように制限が適用されるかを確認しました。

以上の内容を通じて、DockerのコンテナはLinuxカーネルを基盤とした技術であることを認識できたと思います。

講義スライド全体

おわりに

本記事では、ジーニーの新卒エンジニア研修「bootcamp」で行われたDocker基礎研修の内容をご紹介しました。Dockerは、今やアプリケーション開発に欠かせないツールです。この記事を通じて、その便利さや面白さが少しでも伝われば嬉しいです。

最後まで読んでいただき、ありがとうございました!

GENIEE TechBlog
GENIEE TechBlog

Discussion