DUICUO

プロジェクトのための Docker オーケストレーションとデプロイメントをゼロから実装する

Dockerオーケストレーションについて詳しく説明する前に、まずはDockerテクノロジーそのものを理解しましょう。Dockerは、開発者がアプリケーションのデプロイ、スケーリング、管理を自動化できるように設計されたオープンソースプラットフォームです。2013年のリリース以来、Dockerは急速に進化し、現代のソフトウェア開発と運用に欠かせないツールとなっています。

Dockerはコンテナ技術を用いてアプリケーションとその依存関係をカプセル化し、異なる環境間で一貫した動作を保証します。仮想マシンなどの従来の仮想化技術と比較して、Dockerコンテナは軽量で起動時間が大幅に短縮されます。この利点により、開発者はアプリケーションをより効率的に開発およびテストすることができ、特に迅速なイテレーションと頻繁なリリースが求められるシナリオにおいてその効果を発揮します。

DevOpsの台頭に伴い、開発と運用の境界線はますます曖昧になってきており、Dockerはこの変革を強力にサポートする技術を提供しています。しかし、プロジェクトの規模と複雑さが増すにつれて、Dockerコンテナの数も増加し、Dockerオーケストレーションの需要が高まっています。

Dockerオーケストレーションとは、複数のDockerコンテナを管理および調整するために用いられるツールと技術を指します。その主な目的は、コンテナのデプロイ、スケーリング、管理を簡素化することです。オーケストレーションにより、ユーザーは複雑なアプリケーションアーキテクチャをより容易に管理し、様々なコンポーネントが効率的に連携することを保証できます。

したがって、この記事では、Docker オーケストレーション プロジェクトを最初から導入するための実践的なガイドを提供し、この重要なテクノロジーを習得し、アプリケーション管理の効率と柔軟性を向上させるのに役立ちます。

プロジェクト準備

このセクションでは、既にマイクロサービスアーキテクチャプロジェクトをお持ちであることを前提に、Javaプロジェクトを例として説明します。プロジェクト全体の構造は次のようになります。

写真

次に、これを実現するための一連の体系的な手順に従って、Docker コンテナの構築を段階的に開始します。

コアコンセプト

まず、Dockerfile、Dockerビルドコマンド、docker-compose.ymlファイルといった基本的な概念を詳しく説明します。これらの概念を理解した後、実践的な演習に進み、これらのツールの理解を深めていきます。

Dockerファイル

Dockerfileは、Dockerイメージの構築に必要な一連の指示が記述されたテキストファイルです。これらの指示は、イメージの基本環境を定義するだけでなく、アプリケーションのインストール手順、必要な依存関係、設定された環境変数、その他の必要な設定も詳細に記述します。例えば、

 # 使用一个基础镜像FROM maven:3.8.3-openjdk-17 AS builder # 设置工作目录WORKDIR /app # 复制pom.xml 和源代码COPY pom.xml . COPY src ./src # 构建项目RUN mvn clean package # 使用一个轻量级的基础镜像运行应用FROM openjdk:17-jdk-slim # 设置工作目录WORKDIR /app # 从构建阶段复制JAR 文件COPY --from=builder /app/target/demo-0.0.1-SNAPSHOT.jar ./myapp.jar # 设置容器启动时执行的命令ENTRYPOINT ["java", "-jar", "myapp.jar"]

次に、この設定をプロジェクトに適用する必要があります。デモ用に、プロジェクトの開始時にカスタムファイル名を使用しました。これにより、各ステップの具体的なプロセスが明確に示されています。もちろん、よりシンプルで直接的なデフォルトのファイル名を使用することもできます。どちらの方法を選択しても、最終的な結果は同じです。下の画像をご覧ください。

写真

ビルドコマンド

`docker build` は、Docker イメージをビルドするためのコアコマンドです。Dockerfile で定義された命令を実行可能なイメージに変換します。このコマンドを実行する際には、様々なオプションパラメータを使用してビルドプロセスをより細かくカスタマイズできます。

docker build [オプション] パス | URL | -

PATH: Dockerfile を含むコンテキストパスを指定します。通常は現在のディレクトリ (.) または特定のディレクトリパスです。

URL: これは、Docker が Dockerfile を取得する Git リポジトリの URL になります。

-: Dockerfile が標準入力から読み取られることを示します。

よく使用されるオプションは次のとおりです。

  • -t, --tag: イメージの名前とタグを指定します。例: -t myapp:latest。
  • -f, --file: Dockerfile へのパスを指定します。
  • --no-cache: ビルド プロセス中にキャッシュを使用せず、各ステップが最初から実行されるようにします。
  • --target: Dockerfile でマルチステージ ビルドが定義されている場合、このオプションを使用してビルドするターゲット ステージを指定できます。

docker-compose.yml ファイル

`docker-compose.yml`ファイルは、複数のDockerコンテナを定義および実行するための設定ファイルです。これにより、アプリケーションのサービス、ネットワーク、ボリュームの管理がより簡単かつ効率的になります。このシンプルなYAMLファイルを使用すると、アプリケーションアーキテクチャ全体を統一された設定で記述できるため、コンテナの起動、シャットダウン、管理が明確かつ容易になります。サンプルアプリケーションでは、MySQLサービスが含まれています。

ローカルにはすでにスタンドアロンのMySQLインスタンスが存在しますが、複数のDockerコンテナを同時に実行する方法をより分かりやすく示すため、MySQLを単一のDockerコンテナとして起動することにしました。さらに、MySQLには既に公式にビルド済みのイメージが用意されているため、データベースの構築と設定に余分な手間をかける必要がなく、そのまま既製のイメージを使用できるという点も注目に値します。

さあ、このプロセスを始めましょう!

 version: '3.8' services: app: image: ccr.ccs.tencentyun.com/studiousxiaoyu/my-java-app:latest # 替换为你的Java 应用镜像ports: - "18080:18080" # 映射端口environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:13306/agent?useSSL=false&serverTimeznotallow=UTC&useUnicode=true&characterEncoding=utf-8 SPRING_DATASOURCE_USERNAME: user SPRING_DATASOURCE_PASSWORD: password db: image: mysql:5.7 # 使用MySQL 5.7 environment: MYSQL_ROOT_PASSWORD: root_password # 设置root 用户密码MYSQL_DATABASE: agent # 创建数据库MYSQL_USER: user # 创建新用户MYSQL_PASSWORD: password # 新用户密码ports: - "13306:13306" # 映射MySQL 端口volumes: - db_data:/var/lib/mysql # 数据持久化volumes: db_data: # 定义一个数据卷

docker-compose up コマンドを実行すると、docker-compose.yml ファイルで定義されているすべてのサービスを開始できます。

構築を開始する

リポジトリからサーバーへのコードプロジェクトのデプロイに成功したと仮定すると、サーバー上で直接操作できるようになります。Dockerをまだインストールしていない場合は、ご自身でインストールできます。手順は複雑ではありません。

インストール後、プロジェクトのルート ディレクトリに移動し、対応するコマンドを実行するだけで使用を開始できます。

docker build -t my-java-app -f demo.dockerfile 。

構築の具体的な手順とプロセスを図に示します。

写真

この時点でのプロセスは本番環境と非常に似ているため、次のステップが完了するまで辛抱強く待つことができます。その後は、最終的なビルドイメージをプライベートリポジトリにプッシュし、その後のデプロイと管理に役立てるだけです。

ミラーリポジトリ

もちろん、企業のプライベートリポジトリアドレスは不可欠です。ここでは、Tencent Cloudのコンテナイメージサービスを例に、イメージの保存と管理方法を説明します。

プライベートデータベースをプッシュ

プライベートリポジトリの作成手順については既に詳しく説明しましたので、ここでは繰り返しません。これで、ビルドしたイメージをリポジトリに直接プッシュして、後から使用したり管理したりできるようになりました。

写真

次に、イメージにタグを付けます。タグを付けたら、イメージをプライベートリポジトリにプッシュし、その後のデプロイと使用に備えます。

sudo docker tag my-java-app:latest ccr.ccs.tencentyun.com/studiousxiaoyu/my-java-app:latest

sudo docker push ccr.ccs.tencentyun.com/studiousxiaoyu/my-java-app:latest

最後のプッシュは次のように成功しました。

写真

写真

コンテナオーケストレーション

次に、オーケストレーションファイルを使用して必要なサービスを定義および管理します。そのためには、指定されたディレクトリに「docker-compose.yaml」というファイルを作成する必要があります。このファイルの内容は、先ほど示した設定と一致します。

ファイルを作成した後、起動コマンドを直接実行して、構成が正しいことを確認し、各サービスが正常に起動できるかどうかを確認します。

docker-compose -f spring-ai.yaml アップ -d

写真

最後にログを確認しましょう。プログラムが正常に起動しました。

写真

要約

この記事では、Dockerの中核概念とオーケストレーション技術の重要性について深く掘り下げます。Dockerの軽量コンテナアーキテクチャから最新のDevOps環境への応用まで、Dockerは開発とデプロイメントの効率を向上させるだけでなく、マルチコンテナ管理の効率化にも貢献します。Dockerfile、ビルドコマンド、docker-compose.ymlファイルの使い方を段階的に紹介し、読者がマイクロサービスアーキテクチャの構築と管理方法を習得できるよう支援します。

この実践的なデモでは、Javaプロジェクトを例に、ローカル環境でDockerコンテナを構築およびデプロイする方法を示しました。プロジェクトの規模が大きくなるにつれて、Dockerオーケストレーションを習得することはますます重要になります。コンテナ管理を簡素化するだけでなく、アプリケーションの柔軟性とスケーラビリティを向上させるからです。このガイドがお役に立てば幸いです。