自分はフロントエンドチーム所属の一年目ですが最近新しいプロジェクトでちょこちょこインフラ周りや開発環境の構築に触れる機会がありました。
その中で出てくる「Docker」なのですが、使いながら
「あれ?これどういう意味だっけ」
「とりあえずコピペで動いたけど、これ理解できてるのかな?」
みたいなことが何度もあり、きちんと自分の中で整理したいと思いました。
というわけで今回は、自分の学びをアウトプットする形で
「Dockerとは何か?」
「よく出てくる用語」
「基本的な使い方」
について大まかにまとめてみました。
そもそもDockerとはなんだい
Dockerとは簡単に言うと、アプリを動かすための環境をまるごとパッケージ化できるツールです。
・どんなOSでも動いて
・どんなバージョンのライブラリが必要でも
・自分のPCでも他人のPCでも
同じように動くようにできる、それがDockerのいいところです。
なので「なんで動かないの?」という環境差のトラブルを解消してくれます。
更に噛み砕いて説明すると
たとえば、ゲームをするのに「このゲームは○○というゲーム機でしか動きません!」と言われたら不便ですよね?
パソコンでも、アプリを作るときに「この設定じゃないと動きません」ということがよくあります。
そこで出てくるのが「Docker」です
Dockerは、アプリを動かすための箱(はこ)みたいなもので、その中に必要なもの(ゲーム機とか電池とか全部セット)を詰め込んで動かすことができます。
つまり、「この箱を使えば、どこでもアプリが同じように動くよ」という魔法の箱を作るための道具がDockerです。
よく出てくるDocker用語
用語 | 説明 |
---|---|
Dockerfile | どんな環境を作るかを書く設計図 |
イメージ | Dockerfileをもとに作った環境の“型” |
コンテナ | イメージから実際に動かす実体 |
docker-compose.yml | 複数のコンテナ(DBとかWebアプリとか)をまとめて管理できる設定ファイル |
つまり、
Dockerfileで「これを作ってくれ」と書いて、
それをもとにイメージ作って、
更にそのイメージから
docker-compose.ymlで「全部まとめていっぺんに動かそう」って感じです。
この辺の理解はよく料理のレシピに例えられたりします。例えば↓みたいな感じでしょうか..
Docker用語 | 料理でたとえると | 説明 |
---|---|---|
Dockerfile | レシピ | どんな材料を使って、どうやって料理するかを書いた設計図 |
イメージ | 仕込み済みの食品 | レシピをもとにあらかじめ準備された“完成直前”の状態 |
コンテナ | 出来上がった料理(お皿に盛られて提供されてる状態) | 実際に出された料理=アプリがちゃんと使える状態 |
docker-compose.yml | セットメニューの注文票 | 複数の料理(=コンテナ)をまとめていっぺんに準備・提供するための指示書🍱 |
Dockerfileって何を書くの?(例)
これは「箱(コンテナ)」の中に何を入れて、どう動かすか」を書く紙とでも思ってください
例えばこんな感じです↓
FROM node:22
WORKDIR /src/app
COPY . .
RUN npm install
CMD ["npm", "start"]
この内容を簡単に説明すると…
・FROM node:22 → Node.jsというエンジンが入っている土台を使う
・WORKDIR /src/app → 箱(コンテナ)の中の[/src/app]フォルダで作業して
・COPY . . → 今のフォルダの中身を箱(コンテナ)の中にコピーする
・RUN npm install → アプリを動かすための準備(パッケージやライブラリのインストール)
・CMD [“npm”, “start”] → アプリをスタートさせる
これだけ書けば、あとは「このdockerfileを使って箱(コンテナ)をつくって」と指示を出せば環境が完成します。
docker-compose.ymlとは
複数の環境(Webサーバー+DB)を一括管理したいときは docker-compose.yml を使います
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
この内容を簡単に説明すると…
・services の中に複数のサービス(appとかdbとか)を定義できる
・app は自分でビルドしたイメージ
・db はMySQLの既成イメージを使用
これを使うと、docker-compose up と一発打つだけで環境が全部起動してくれます。
まとめ Dockerとは
・Dockerは「アプリをどこでも同じように動かせる」ための箱(コンテナ)を作るツール
・「自分のPCでは動くけど、あの人のPCでは動かない」というトラブルを防いでくれる。
・開発環境ごとの違いを吸収してくれる環境構築の救世主的存在
