Docker

Dockerコンテナデプロイの基礎とEC2への実践ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Dockerコンテナデプロイの基礎と目的

Dockerコンテナは、アプリケーションの依存関係や環境設定をパッケージ化し、一貫性のある実行環境を作成する技術です。開発・本番環境共通で導入することで、「環境ごとの不一致による障害」を大幅に減らすことができます。この記事では、Dockerコンテナのデプロイ手順とベストプラクティスをステップバイステップで解説し、EC2やクラウド環境への実践的な導線を提供します。


Dockerfileとdocker-compose.ymlの基本構成

アプリケーションのビルドと運用を安定させるには、Dockerfileとdocker-compose.ymlの適切な記述が不可欠です。両ファイルのベストプラクティスを押さえれば、開発環境から本番環境への移行もスムーズになります。

Dockerfileにおけるベストプラクティス

Dockerfileはイメージを作成するためのレシピと考えてください。以下のようなポイントに注意すると、効率的なビルドが可能になります。

  • ベースイメージの指定: FROMで安定した公式イメージ(例: nginx:latest)を明記し、バージョン管理を確立

    ベースイメージは定期的に更新されるため、固定タグ(例: nginx:1.23を使用するべきです。

  • 多段階ビルドの活用: 環境構築に不要な中間ファイルを排除し、イメージサイズを削減
    Dockerfile
    # ビルド用ステージ
    FROM golang:1.20 as builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp

# 実行用ステージ(最小限のベースイメージ)
FROM alpine:3.18
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]

  • ENVで環境変数を定義: テスト環境と本番環境で差異を管理
    Dockerfile
    ENV NODE_ENV=development

docker-compose.ymlで定義すべき要素

複数コンテナの運用にはdocker-composeが効果的です。サービス・ネットワーク・ボリュームなどの構成を統一することで、開発と本番環境で同じ設定を共有できます。

項目 必須/任意 内容例
services 必須 各コンテナの定義(イメージやポート指定など)
volumes 任意 ボリュームのマウント設定
networks 任意 コンテナ間通信のネットワーク構成

:


ローカルからAWS EC2へのデプロイフロー

ローカル環境で動作確認したコンテナを、本番環境(例: AWS EC2)に移行するには、以下のようなフローを実装します。

EC2インスタンスの準備手順

  1. EC2インスタンスの起動: Amazon Linux 2やUbuntuなどのOSを選択し、セキュリティグループで必要なポート(例: 80, 443)を開く
  2. Docker Engineのインストール: AWS CLIやSSH経由でインスタンスにアクセスし、以下のように導入します。

Amazon Linux用コマンド:

Ubuntu用コマンド:

コンテナイメージのビルド・プッシュ

ローカルで以下のようにイメージを構築し、AWS ECR(Elastic Container Registry)などにプッシュします。

リモートでのコンテナ起動

EC2インスタンス上で以下のコマンドでイメージを実行します。


バージョン管理と環境別設定ファイルの分離

CI/CDとの連携を円滑にするには、バージョン管理と環境ごとの設定の分離が重要です。

Dockerイメージタグの命名規則

リリース時や環境違いに応じて一意なタグ名をつけましょう。以下の例は一般的な命名方法です。

環境 タグ名 説明
開発 my-app:dev 開発用に限定したバージョン
本番 my-app:latest 最新ステージの本番リリース
テスト my-app:test-20260718 日付つきでバージョン管理

注意: 本番環境では固定タグ(例: v1.0.0)を使用すると、誤って最新の開発版をデプロイしてしまうリスクを防げます。

環境変数ファイルの管理方法

各環境で異なる設定値を持つ場合は、.envファイルまたはDocker Secretsを使用します。

セキュリティ対策: 本番環境では.envファイルをリポジトリ外に管理し、Docker SecretsやAWS SSM Parameter Storeで安全に取得しましょう。


CI/CD連携時の注意点とデプロイ自動化

CI/CDにより効率的な自動デプロイが可能ですが、手動操作との境界線を明確にすることが重要です。

GitHub ActionsでのDockerビルド例

以下はGitHub ActionsでDockerイメージをビルドし、AWS ECRへプッシュするワークフローの抜粋です。

手動デプロイとの境界線

自動化の範囲は慎重に決めましょう。例えば、以下のようなケースでは手動操作を保留するべきです。

  • 本番環境へのリリース前:テスト環境で動作確認後、DevOpsが最終的に「Deploy」ボタンを押す
  • 重大な設定変更時: データベースの構造変更やセキュリティ設定変更では、リーダー承認が必要

自動化によるエラーは手動で検出・修正が可能になるため、バランスを取りながら導入してください。


セキュリティ設定と運用時のベストプラクティス

本番環境におけるセキュリティリスクを最小限にするには、コンテナの実行権限やポート開放などを厳格に管理する必要があります。

ポート開放の最小限化

「使わないポートは絶対開けない」というルールを定めましょう。以下のようにEXPOSE指令で公開するポートを明示すると、セキュリティポリシーにも合致します。

注意: セキュリティグループの設定も忘れずに。AWS EC2では最小限のポートだけを開くことを推奨します。

非rootユーザーでのコンテナ実行

root権限で動くコンテナは、脆弱性が発見された際にシステム全体に影響を及ぼすリスクがあります。USER指令で非rootユーザーを作成し、実行許可を与える方法です。

実践例: Ubuntuのイメージではmyuserとしてコンテナを起動し、スクリプトやファイル操作は非rootで行います。さらにEC2上での実行時に以下のように権限設定を行う必要があります。


Dockerデプロイチェックリスト

本記事の要点をまとめると以下の通りです:

  • Dockerfileとdocker-compose.ymlの最適な記述方法
  • EC2などのクラウド環境へのデプロイフロー
  • バージョン管理と環境変数ファイルの分離技術
  • CI/CDとの連携と自動化の境界線
  • セキュリティ設定(ポート制限・非root実行)

Dockerの導入・運用をスムーズに進めるために、以下のチェックリストを作成しました。
「Dockerデプロイチェックリスト」をダウンロードして、実践導入をサポートしてください。


スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Docker