1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker超入門 part1 ~DevContainerでの開発環境構築に向けて~

Posted at

DevContainerでの開発環境構築が自分ですんなりできるよう、Dockerの学習から始めた初学者です!
前回DevContainerで開発環境を構築する為に必要な前提知識として、DockerDevContainerの学習をしていくことにしました。

本記事では超基本的なDocker入門について学んだことでも備忘録がてら書いていきます!
初学者の自分でもわかるようにかなり簡潔(雑になりそう)にまとめていきます。

Dockerとは?

まず、Dockerとはなんでしょうか?

Dockerとは「アプリケーションを「コンテナ」と呼ばれる独立した環境にパッケージ化するためのツール」です。

簡単に例に例えると、引越しの段ボール箱のようなものです。

1.必要なものを全て箱に詰める

  • アプリケーションのコード
  • 実行に必要なソフトウェア
  • 設定ファイル
  • ライブラリなど

2.その箱があれば、どのコンピュータでも同じように動く

  • 開発環境
  • テスト環境
  • 本番環境

3.他の箱(コンテナ)と干渉せず、独立して動作する

そのため、「自分のPCでは動いたのに、本番環境では動かん!」という問題を防ぐことができます。

イメージとは?

Dockerのイメージとは、「アプリと実行に必要な全ての依存関係を含む不変のテンプレート」です。
設計図みたいなものです!

イメージの基本構成

イメージの基本構成は、以下のようなものになっています(詳しめに書きます)

  • ベースイメージ
    • OS層(Ubuntu,Alpine,Linux,CentOS)
    • 最小限の機能を持つ軽量OSを選択することが推奨される
FROM alpine:3.14  # 軽量なLinuxディストリビューション
# or
FROM node:16-slim  # 言語特化型の軽量イメージ
  • アプリーケーションの実行環境(OS、ランタイム)
    • プログラミング言語のランタイム(Node.js, Python, Java等)
    • ミドルウェア(Nginx, Apache等)
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    postgresql-client
  • 依存ライブラリ
    • アプリケーションが必要とするパッケージ
    • バージョン管理ファイル(package.json, requirements.txt等)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
  • 設定ファイル群
    • 環境変数設定
    • アプリケーション設定ファイル
    • サーバー設定ファイル
COPY nginx.conf /etc/nginx/nginx.conf
ENV APP_ENV=production
ENV DB_HOST=localhost

イメージの主な特徴

イメージの主な特徴は

  1. 不変性
  2. レイヤー化されたファイルシステム
  3. ポータビリティ
  4. バージョン管理

です!一つづつかなり簡潔に見ていきます。

不変性

不変性とは簡単にいうと変更不可という意味です。

一度作成されたイメージは変更不可でReadOnlyになります!

レイヤー化されたファイルシステム

レイヤー化されているため、各レイヤーは差分のみを保持します。
そのためストレージ効率が良く、キャッシュメカニズムにより高速なビルドが可能です。

ポータビリティ

どの環境でも同じように動作します!
環境依存性を排除し、簡単な移植性を有しています。

バージョン管理

タグによってバージョンを管理することができます。
また、ロールバックも容易で、イメージの履歴追跡が可能です!

レイヤーの基本概念

レイヤーとは、「重ねられた層」のようなものです。ケーキを例に考えると、

  1. スポンジ(ベースレイヤー)
  2. クリーム(第2レイヤー)
  3. フルーツ(第3レイヤー)
  4. デコレーション(最終レイヤー)

のような感じでしょうか?Dockerでも同じように、1つ1つの命令が新しい層となって重なっていきます

# 1層目:ベースとなるOS
FROM ubuntu:20.04

# 2層目:パッケージリストの更新
RUN apt-get update

# 3層目:Nginxのインストール
RUN apt-get install -y nginx

# 4層目:アプリケーションファイルのコピー
COPY ./app /var/www/html/

# 5層目:設定ファイルの配置
COPY nginx.conf /etc/nginx/conf.d/

# 6層目:起動コマンドの設定
CMD ["nginx", "-g", "daemon off;"]

レイヤーは読み取り専用なので、一度作成されたレイヤーは変更できません。変更が必要な場合は新しいレイヤーを重ねます。

また、差分を管理しているので、各レイヤーは前のレイヤーからの変更点のみを保存し、ストレージの効率的な使用が可能です!

To be continue

次回は、dockerの重要な概念の一つである「コンテナ」について書いていきます!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?