Docker入門ガイド|フリーランスエンジニアが知っておくべき基礎知識

三浦 健太
三浦 健太
Docker入門ガイド|フリーランスエンジニアが知っておくべき基礎知識

この記事のポイント

  • Docker入門をフリーランスエンジニア向けに解説
  • コンテナの概念からインストール
  • Dockerfile作成

Dockerわかります?」と聞かれて「もちろん」と答えたものの、内心は冷や汗だった。2年前、フリーランスになって最初の面談でのこと。前職のWeb制作会社ではサーバーに直接デプロイする古いやり方しか知らなくて、Dockerは名前だけ聞いたことがある程度だった。

案件を逃したくなかったので、面談後の週末に猛勉強した。金曜の夜から日曜まで、公式ドキュメントとYouTubeとQiitaを行き来して、なんとか翌週のチーム参加に間に合わせた。今思えば、Dockerの基本概念は2〜3日あれば十分理解できる。難しそうに見えて、核心はシンプルだ。

この記事では、あの週末に自分が学んだことを体系的にまとめる。

Dockerとは何か

ひとことで言うと、アプリケーションの実行環境をまるごとパッケージにして、どこでも同じように動かせるツール

開発で「自分のPCでは動くのに、本番サーバーで動かない」という問題にぶつかったことはないだろうか。原因のほとんどは、OSのバージョン、ライブラリのバージョン、環境変数の設定が環境ごとに違うこと。Dockerはこの「環境差異」の問題を根本的に解決する。

仮想マシンとの違い

「環境をまるごとパッケージにする」という意味では、VirtualBoxやVMwareなどの仮想マシン(VM)と似ている。でも決定的な違いがある。

項目 仮想マシン Docker
OS ゲストOS丸ごと ホストOSのカーネルを共有
起動時間 数分 数秒
ディスク使用量 数GB〜数十GB 数十MB〜数百MB
パフォーマンス オーバーヘッド大 ほぼネイティブ

Dockerは仮想マシンと比べて圧倒的に軽い。1台のPCで10〜20個のコンテナを同時に動かすことも珍しくない。

基本用語を整理する

Dockerの学習で最初に混乱するのが用語。これだけ押さえれば会話についていける。

イメージ(Image) アプリケーションの実行に必要なすべて(OS、ライブラリ、アプリのコード、設定)をまとめた「テンプレート」。読み取り専用。

コンテナ(Container) イメージを実行した「インスタンス」。イメージが設計図なら、コンテナは設計図から建てた建物。

Dockerfile イメージの作り方を記述したファイル。「Ubuntuをベースにして、Node.jsをインストールして、アプリのコードをコピーして…」という手順書。

Docker Hub イメージの公開リポジトリ。Node.js、Python、PostgreSQLなど、公式イメージが揃っている。GitHubのDocker版と考えるとわかりやすい。

docker-compose 複数のコンテナをまとめて管理するツール。Webアプリ + データベース + キャッシュ のような構成を、1つのファイルで定義して一括起動できる。

インストール

Mac / Windows

Docker Desktop(公式のGUIアプリ)をインストールするのが一番簡単。docker.comからダウンロードして、インストーラを実行するだけ。

Docker Desktopには、Dockerエンジン、docker-compose、GUIダッシュボードがすべて含まれている。

確認

docker --version
docker compose version

バージョンが表示されれば準備完了。

最初の一歩:コンテナを動かす

まずは公式のnginxイメージを使って、Webサーバーを立ち上げてみよう。

docker run -d -p 8080:80 nginx

ブラウザで http://localhost:8080 にアクセスすると、nginxのウェルカムページが表示される。たった1コマンドでWebサーバーが動いた。

コマンドの意味:

  • docker run: コンテナを起動
  • -d: バックグラウンド実行
  • -p 8080:80: ホストの8080ポートをコンテナの80ポートに接続
  • nginx: 使用するイメージ名

Dockerfileを書いてみる

Node.jsアプリケーションをコンテナ化する例。

FROM node:20-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000

CMD ["node", "index.js"]

各行の意味:

  • FROM: ベースイメージを指定。Node.js 20のAlpine Linux版(軽量)
  • WORKDIR: コンテナ内の作業ディレクトリ
  • COPY package*.json ./: まずpackage.jsonだけコピー(キャッシュ効率のため)
  • RUN npm install: 依存関係をインストール
  • COPY . .: アプリのコードをコピー
  • EXPOSE: 使用するポートを宣言
  • CMD: コンテナ起動時に実行するコマンド

このDockerfileからイメージをビルドしてコンテナを起動する流れはこう。

docker build -t my-app .
docker run -d -p 3000:3000 my-app

-t my-app はイメージに名前(タグ)をつけるオプション。

docker-composeで複数コンテナを管理する

実際のWebアプリケーションは、アプリサーバーだけでは動かない。データベースやキャッシュサーバーが必要になる。docker-composeを使えば、これらを1つの設定ファイルで管理できる。

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

この設定で docker compose up -d を実行すると、アプリとPostgreSQLが同時に立ち上がる。docker compose down で全コンテナを停止。

volumes(データ永続化)

上の例で db-data というボリュームを定義している。これがないと、コンテナを停止するたびにデータベースの中身が消える。ボリュームを使えば、コンテナを再作成してもデータは保持される。

この「コンテナとデータは別管理」という概念は、Docker運用で最も重要なポイントの一つ。

フリーランス案件でのDocker活用パターン

パターン1:開発環境の統一

チーム開発の案件で一番多い使い方。docker-compose.yml をリポジトリに含めておけば、新しいメンバーが git clonedocker compose up だけで開発環境が整う。

「README.mdに20行の環境構築手順を書いて、それでも動かないと言われる」という悲劇がなくなる。

パターン2:本番環境のデプロイ

DockerイメージをAWS ECR(Elastic Container Registry)やGitHub Container Registryにpushして、本番環境でpullして動かすパターン。ECS、Cloud Run、Kubernetes上での運用が一般的。

パターン3:CI/CDパイプライン

GitHub ActionsやGitLab CI上でDockerコンテナを使ってテストを実行する。テスト環境を毎回クリーンな状態で作れるので、「テスト環境が汚れてテストが通らない」という問題がなくなる。

パターン4:マイクロサービス

複数のサービス(API、管理画面、バッチ処理等)をそれぞれ独立したコンテナとして管理する。サービスごとに技術スタックを変えることも可能。

よく使うコマンド一覧

コマンド 用途
docker ps 実行中のコンテナを一覧表示
docker ps -a 停止中のコンテナも含めて一覧表示
docker logs コンテナ名 コンテナのログを表示
docker exec -it コンテナ名 bash 実行中コンテナの中に入る
docker images ローカルのイメージ一覧
docker stop コンテナ名 コンテナを停止
docker compose up -d compose設定でコンテナ群を起動
docker compose down compose設定でコンテナ群を停止
docker compose logs -f compose全コンテナのログをリアルタイム表示

自分は docker psdocker logs を1日に何十回も打っている。この2つだけでも覚えておくと、トラブルシューティングが格段に楽になる。

Docker学習のロードマップ

Week 1: 基本概念の理解、Docker Desktopのインストール、公式イメージの起動

Week 2: Dockerfileの作成、自作アプリのコンテナ化

Week 3: docker-composeの学習、アプリ+DB構成の構築

Week 4: マルチステージビルド、ネットワーク設定、ボリューム管理

1ヶ月あれば、フリーランスの案件で困らないレベルには到達する。

教育訓練給付金制度の対象講座にはDockerを含むクラウドインフラ系のカリキュラムもある。@SOHOの教育訓練ガイドでは、受講費用の最大70%(上限56万円)が支給される専門実践教育訓練の対象講座を紹介している。体系的に学びたい方は検討してみるといい。

教育訓練給付金の対象講座を探す

おすすめ学習リソース

  • Docker公式ドキュメント(docs.docker.com): 英語だが最も正確で網羅的。Getting Startedから始めよう
  • Play with Docker: ブラウザ上でDockerを操作できる無料環境。インストール不要で試せる
  • Docker公式のDockerfile ベストプラクティス: Dockerfileの書き方の模範。中級者になったら必読

よくある質問

Q. 自動テストの環境構築が難しいのですが、どうすれば良いですか?

最初はすべてを自動化しようとせず、ログイン機能や決済機能など、最も重要な1つのシナリオを自動化することから始めてください。それができれば、他のシナリオもコピー&ペーストの要領で広げていけます。小さく始めるのが成功の秘訣です。

Q. AWSエンジニアは、プログラミングもできないとダメですか?

最近は「Infrastructure as Code(IaC)」と言って、インフラをプログラム(コード)で管理するのが主流です。PythonやGoなどの言語を少しでも知っていると、単価が大幅に上がります。興味がある方は、Webマーケターのフリーランスの始め方 (/blog/web-marketer-hajimekata)などの記事を参考に、周辺領域の知識も少しずつ吸収してみてください。

Q. AWSの学習にはどれくらいの期間が必要ですか?

未経験からSAA(アソシエイト)の取得まで、およそ200〜300時間の学習が必要と言われています。毎日2時間の学習で、3〜5ヶ月程度ですね。子育て中の方は、隙間時間を活用して細切れに学習を積み上げるのが長続きのコツですよ。

Q. バックエンドエンジニアにおすすめの資格はありますか?

WS Solutions Architect Associateが最もコスパが良い資格です。取得にかかる学習時間は2〜3ヶ月程度ですが、月額3〜5万円の単価上乗せが見込めます。年間で36〜60万円のリターンがあると考えれば、十分に投資価値があります。

@SOHOでキャリアを加速させよう

@SOHOなら、あなたのスキルを求めているクライアントと手数料無料で直接つながれます。

@SOHOで関連情報をチェック

お仕事ガイド

年収データベース

資格ガイド

三浦 健太

この記事を書いた人

三浦 健太

フリーランスCADオペレーター・建築系コンサル

一級建築士事務所で設計を担当した後、フリーランスのCADオペレーターに。建築・不動産・施工管理系の実務経験を活かした記事を執筆しています。

@SOHOで仕事を探してみませんか?

手数料0%・登録無料のクラウドソーシング。フリーランスの方も企業の方も、今すぐ始められます。

関連記事

カテゴリから探す

クラウドソーシング入門

クラウドソーシング入門

クラウドソーシングの基礎知識・始め方・サイト比較

職種別ガイド

職種別ガイド

職種・スキル別の案件獲得方法と単価相場

副業・在宅ワーク

副業・在宅ワーク

副業・在宅ワークの始め方と対象者別ガイド

フリーランス

フリーランス

フリーランスの独立・営業・実務ノウハウ

お金・税金

お金・税金

確定申告・節税・経費・ローンなどお金の知識

比較・ランキング

比較・ランキング

サービス比較・おすすめランキング

最新トレンド

最新トレンド

市場動向・法改正・AIなど最新情報

発注者向けガイド

発注者向けガイド

クラウドソーシングで外注・人材探しをする企業・個人向け

転職・キャリア

転職・キャリア

転職エージェント・転職サイト比較・キャリアチェンジ

看護師

看護師

看護師の転職・副業・フリーランス・キャリアガイド

薬剤師

薬剤師

薬剤師の転職・副業・キャリアパスガイド

保険

保険

生命保険・医療保険・フリーランスの保険設計

採用・求人

採用・求人

無料求人掲載・採用コスト削減・人材募集の方法

オフィス・ワークスペース

オフィス・ワークスペース

バーチャルオフィス・コワーキング・レンタルオフィス

法律・士業

法律・士業

契約トラブル・士業独立開業・フリーランス新法

シニア・50代

シニア・50代

シニア世代のキャリアチェンジ・副業・年金

セキュリティ

セキュリティ

サイバーセキュリティ・脆弱性対策・情報保護

金融・フィンテック

金融・フィンテック

暗号資産・決済・ブロックチェーン・金融テクノロジー

経営・ビジネス

経営・ビジネス

経営戦略・ガバナンス・事業承継・知財

ガジェット・機材

ガジェット・機材

フリーランスに役立つPC・デバイス・周辺機器

子育て×働き方

子育て×働き方

子育てと在宅ワークの両立・保育園・時間管理