10分でDockerを使ったマイクロサービスのデプロイ方法を学ぶ

10分でDockerを使ったマイクロサービスのデプロイ方法を学ぶ

Docker は 2013 年のリリース以来、広く注目され、ソフトウェア業界を変える可能性を秘めていると考えられてきました。

しかし、Docker とは何か、Docker がどのような問題を解決するのか、そしてその利点は何かを明確に理解していない人が多くいます。今日は、理解を深めるために詳しく説明するとともに、日常の開発やマイクロサービスのデプロイにそれを使用する方法をわかりやすい例で説明します。

1. Dockerの紹介

Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテナ エンジンです。 Docker はアプリケーション層とインフラストラクチャ層を分離し、インフラストラクチャをプログラムのように管理します。 Docker を使用すると、アプリケーションのパッケージ化、テスト、デプロイをより迅速に実行でき、コードの作成からデプロイ、実行までのサイクルを短縮できます。

Docker の利点は次のとおりです。

1. プロセスを簡素化する

Docker を使用すると、開発者はアプリケーションと依存パッケージをポータブル コンテナーにパッケージ化し、それを一般的な Linux マシンに公開して仮想化を実現できます。 Docker は仮想化の方法を変え、開発者が自分の結果を直接 Docker に入れて管理できるようになりました。利便性とスピードはすでに Docker の最大の利点です。以前は数日、あるいは数週間かかっていたタスクも、Docker コンテナを使用すれば数秒で完了できます。

2. 選択の恐怖を避ける

選択をすることに恐怖を感じるなら、あなたはベテラン患者です。 Docker はエンタングルメントのパッケージ化に役立ちます。たとえば、Docker イメージにはオペレーティング環境と構成が含まれているため、Docker を使用すると複数のアプリケーション インスタンスの展開を簡素化できます。たとえば、Web アプリケーション、バックエンド アプリケーション、データベース アプリケーション、Hadoop クラスターなどのビッグ データ アプリケーション、メッセージ キューなどをすべてミラー イメージにパッケージ化して展開できます。

3. お金を節約する

一方では、クラウド コンピューティング時代の到来により、開発者は成果を追求するために高価なハードウェアを構成する必要がなくなりました。Docker は、高いパフォーマンスには高いコストがかかるという考え方を変えました。 Docker とクラウドを組み合わせることで、クラウドスペースをより有効に活用できるようになります。ハードウェア管理の問題を解決するだけでなく、仮想化の方法も変わります。

2. Dockerアーキテクチャ

Dockerデーモン

Docker デーモンは、ホスト マシン (DOCKER-HOST) 上で実行されるバックグラウンド プロセスです。 Docker クライアントを介して通信できます。

クライアント

Docker クライアントは Docker のユーザー インターフェイスであり、ユーザー コマンドと構成フラグを受け入れ、Docker デーモンと通信できます。図中のdocker buildなどはすべてDocker関連のコマンドです。

画像

Docker イメージは、Docker コンテナを作成するための手順が含まれた読み取り専用テンプレートです。これはシステム インストール CD に少し似ています。システム インストール CD を使用してシステムをインストールできます。同様に、Docker イメージを使用して Docker イメージ内のプログラムを実行できます。

容器

コンテナはイメージの実行可能なインスタンスです。イメージとコンテナの関係は、オブジェクト指向プログラミングにおけるクラスとオブジェクトの関係に多少似ています。コンテナは、Docker API または CLI コマンドを使用して起動、停止、移動、削除できます。

レジストリ

Docker Registry は、イメージを集中的に保存および配布するためのサービスです。 Docker イメージをビルドしたら、現在のホスト上で実行できます。ただし、このイメージを他のマシンで実行する場合は、手動でコピーする必要があります。現時点では、Docker Registry を使用すると、イメージを手動でコピーする必要がなくなります。

Docker レジストリには複数の Docker リポジトリを含めることができ、各リポジトリには複数のイメージ タグを含めることができ、各タグは Docker イメージに対応します。これは、Maven のウェアハウスに多少似ています。Docker Registry を Maven のウェアハウスと比較すると、Docker ウェアハウスは jar パッケージのパスとして理解でき、イメージ タグは jar パッケージのバージョン番号として理解できます。

3. Dockerのインストール

Docker はオープンソースの商用製品で、Community Edition (CE) と Enterprise Edition (EE) の 2 つのバージョンがあります。エンタープライズ バージョンには、通常は個々の開発者が使用しない有料サービスがいくつか含まれています。以下の紹介はコミュニティ版のものです。

Docker CE のインストールについては、公式ドキュメントを参照してください。以下に、さまざまなオペレーティングシステムのインストール方法を示します。

  • マック
  • インドウズ
  • ウブントゥ
  • デビアン
  • セントOS
  • フェドーラ
  • その他のLinuxディストリビューション

ここでは CentOS を例に挙げます。

1. Docker を使用するには、CentOS システムのカーネル バージョンが 3.10 以降である必要があります。このページの前提条件をチェックして、お使いの CentOS バージョンが Docker をサポートしているかどうかを確認してください。

uname -rコマンドで現在のカーネルバージョンを確認します。

# uname -r

2. root権限でCentOSにログインします。 yum パッケージが最新バージョンに更新されていることを確認してください。

# yum -y アップデート

3. 古いバージョンをアンインストールします(古いバージョンがインストールされている場合)

# yum 削除 docker docker-common docker-selinux docker-engine

4. 必要なソフトウェア パッケージをインストールします。yum-util は yum-config-manager 機能を提供します。他の 2 つは devicemapper ドライバーの依存関係です。

# yum install -y yum-utils デバイスマッパー永続データ lvm2

5. yumソースを設定する

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6. すべてのリポジトリのすべてのDockerバージョンを表示し、インストールする特定のバージョンを選択できます。

# yum list docker-ce --showduplicates | sort -r

7. Dockerをインストールする

# sudo yum install -y docker-ce #リポジトリでは安定リポジトリのみがデフォルトで有効になっているため、最新の安定バージョン 18.03.1 がここにインストールされます

8. ブートを開始して参加する

# systemctl dockerを起動します

# systemctl ドッカーを有効にする

9. インストールが成功したかどうかを確認します (クライアントとサービス部分が存在する場合、Docker のインストールと起動が成功したことを示します)

# docker バージョン

10. Dockerをアンインストールする

# yum -y docker-engineを削除します

4. 一般的なDockerコマンド

(I) .Mirror関連コマンド

1. 画像を検索する

docker search コマンドを使用して、Docker Hub (これは、Maven の中央倉庫に似た、すべての Docker イメージ ソフトウェアを保存するために Docker によって提供される公式の場所です) に保存されているイメージを検索できます。このコマンドを実行すると、Docker は Docker Hub でキーワード java を含むイメージ リポジトリを検索します。

# docker 検索 java

上記のリストには 5 つの列が含まれており、それぞれの意味は次のとおりです。

  • NAME: イメージ リポジトリの名前。
  • 説明: イメージ リポジトリの説明。
  • STARS: ミラーリポジトリのコレクションの数。GitHub の stars0 と同様に、ミラーリポジトリの人気度を示します。
  • OFFICAL: 公式リポジトリであるかどうかを示します。この列に [0K] とマークされているイメージは、各ソフトウェアの公式プロジェクトチームによって作成および管理されています。
  • AUTOMATED: 自動的に構築されたイメージ リポジトリであるかどうかを示します。

注: dockerを使用してイメージを検索またはダウンロードするとタイムアウトする可能性があるため、docker用の国内イメージアクセラレータを構成する必要があります。

Alibaba Cloud の画像アクセラレータを使用して Alibaba Cloud にログインできます (https://cr.console.aliyun.com/#/accelerator)

ミラー アクセラレーション アドレスは次のように表示されます。

# cd /etc/docker

daemon.json があるかどうかを確認します。これはデフォルトの Docker 構成ファイルです。

そうでない場合は新しいものを作成し、そうである場合は変更します。

# vimデーモン.json 
{
  "レジストリミラー": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}

保存して終了し、Dockerサービスを再起動します。

# サービス docker を再起動

2. 画像をダウンロードする

docker pull コマンドを使用して、Docker レジストリからイメージをダウンロードします。コマンドを実行すると、Docker は Docker Hub の Java リポジトリから最新バージョンの Java イメージをダウンロードします。特定のバージョンをダウンロードしたい場合は、java の後にコロンを追加してバージョンを指定します。例: docker pull java:8

# docker pull java:8

3. 画像を一覧表示する

docker imagesコマンドを使用してダウンロードしたイメージを一覧表示します。

# Docker イメージ

上記のリストは以下の意味を持ちます。

  • リポジトリ: イメージが属するリポジトリの名前。
  • TAG: 画像タグ。デフォルトは latest で、これは最新を意味します。
  • 画像 ID: 画像の一意の識別子を示す画像 ID。
  • CREATED: イメージの作成時刻。
  • サイズ: 画像サイズ。

4. ローカルイメージを削除する

docker rmiコマンドを使用して、指定したイメージを削除します。

# docker rmi java

(II) コンテナ関連コマンド

1. コンテナを作成して起動する

コンテナを作成して起動するには、次の docker run <イメージ名> コマンドを使用します。このコマンドは最もよく使用されるコマンドであり、多くのオプションがあります。よく使用されるオプションの一部を以下に示します。

# docker run -d -p 91:80 nginx

これにより、Nginx コンテナが起動します。この例では、次の意味を持つ 2 つのパラメータが docker run に追加されます。

  • -d バックグラウンドで実行
  • -p ホストポート:コンテナポート #コンテナポートをホストポートに開く

http://Docker host IP:91/ にアクセスすると、次のように nginx のメイン インターフェイスが表示されます。

docker run コマンドを使用してコンテナを作成する場合、最初に指定されたイメージがローカルに存在するかどうかが確認されることに注意してください。この名前のイメージがローカルに存在しない場合、Docker は Docker Hub からイメージを自動的にダウンロードし、Docker コンテナを起動します。

このコマンドには、以下に示すようにネットワーク構成パラメータもあります。

  • --net オプション: ネットワーク モードを指定します。このオプションには、次のオプション パラメータがあります。
  • --net=bridge: デフォルトのオプションは、デフォルトのブリッジに接続することを意味します。
  • --net=host: コンテナはホストのネットワークを使用します。
  • --net=container:NAME-or-ID: 新しく作成されたコンテナに既存のコンテナのネットワーク構成を使用するように Docker に指示します。
  • --net=none: このコンテナのネットワークを構成しません。ユーザーはネットワーク構成をカスタマイズできます。

2. コンテナの一覧

実行中のコンテナを一覧表示するには、docker psコマンドを使用します。

# ドッカーps

すべてのコンテナ(停止したものも含む)を一覧表示するには、-a パラメータを使用します。リストには7つの列があり、意味は次のとおりです。

  • CONTAINER_ID: コンテナ ID を示します。
  • IMAGE: 画像名を示します。
  • COMMAND: コンテナを起動するときに実行するコマンドを示します。
  • CREATED: コンテナの作成時刻を示します。
  • STATUS: コンテナの実行ステータスを示します。 UP は実行中であることを意味し、Exited は停止していることを意味します。
  • PORTS: コンテナの外部ポート番号を示します。
  • NAMES: コンテナ名を示します。名前はデフォルトで Docker によって自動的に生成されますが、docker run コマンドの --name オプションを使用して自分で指定することもできます。

3. コンテナを停止する

コンテナを停止するには、docker stop <コンテナ ID> コマンドを使用します。

# docker stop f0b1c8ab3633

f0b1c8ab3633 はコンテナ ID です。docker stop を使用して、指定したコンテナを停止することもできます。

4. コンテナを強制停止する

docker kill <コンテナID>コマンドを使用してSIGKILLシグナルを送信し、コンテナを強制的に停止することができます。

# ドッカーキル f0b1c8ab3633

5. 停止したコンテナを起動する

docker run コマンドを使用してコンテナを作成して起動します。停止したコンテナの場合は、docker start <コンテナID>コマンドを使用して起動できます。

# docker を起動します f0b1c8ab3633

6. すべてのコンテナ情報を表示する

コマンドdockerinspect <コンテナID>を使用します。

# docker 検査 f0b1c8ab3633

7. コンテナログを表示する

コマンドdocker container logs <コンテナID>を使用します。

# docker コンテナ ログ f0b1c8ab3633

8. コンテナ内のプロセスを表示する

コマンドdocker top <コンテナID>を使用します。

# ドッカートップ f0b1c8ab3633

9. コンテナに入る

実行中の Docker コンテナに入るには、docker container exec -it <container id> /bin/bash コマンドを使用します。 docker run コマンドでコンテナを実行するときに -it パラメータが使用されていない場合は、このコマンドを使用してコンテナに入る必要があります。コンテナ内に入ると、コンテナのシェルでコマンドを実行できます。

# docker コンテナ exec -it f0b1c8ab3633 /bin/bash

10. コンテナを削除する

指定したコンテナを削除するにはdocker rmコマンドを使用します。

# docker rm f0b1c8ab3633

このコマンドは停止したコンテナのみを削除できます。実行中のコンテナを削除するには、-f パラメータを使用します。

(III) 独自のDockerイメージを構築する

Dockerfileを使用して独自のDockerイメージを構築する

Dockerfile は、イメージの構築の詳細を説明するいくつかの命令を含むテキスト ファイルです。

まずは最もシンプルな Dockerfile を書いてみます。前回の記事でダウンロードした Nginx イメージを例に、Nginx イメージのホームページを変更する Dockerfile を書いてみます。

1. 新しいフォルダー /app を作成し、app ディレクトリに Dockerfile という名前の新しいファイルを作成し、次のコンテンツを追加します。

FROM nginx # ローカルイメージリポジトリから ngxin の docker イメージを取得します RUN echo 'This is QingFeng Nginx!!!' > /usr/share/nginx/html/index.html # ngxin の docker イメージのホームページコンテンツを変更します

Dockerfile は非常にシンプルで、FORM と RUN はどちらも Dockerfile の命令です。 FROM 命令はベースイメージを指定するために使用され、RUN 命令はコマンドを実行するために使用されます。

2. Dockerfile が配置されているパスで次のコマンドを実行して、独自の ngxin イメージをビルドします。ビルド後、docker images コマンドを使用して、イメージ ngxin:tuling が生成されたかどうかを確認できます。

nginx をビルドします。

このうち、-t はイメージ名を指定し、コマンド末尾のドット (.) は Dockerfile ファイルが配置されているパスを示します。

3. 以下のコマンドを実行して、このイメージを使用してDockerコンテナを起動します。

# docker run -d -p 92:80 nginx:qingfeng

4. http://Docker host IP:92/ にアクセスすると、下図のようなインターフェースが表示されます。

Dockerfileファイルの書き込みには、次のような共通の指示もあります。

注: RUN コマンドはイメージ ファイルの構築フェーズ中に実行され、実行結果がイメージ ファイルにパッケージ化されます。CMD コマンドはコンテナーの起動後に実行されます。さらに、Dockerfile には複数の RUN コマンドを含めることができますが、CMD コマンドは 1 つだけ含めることができます。

注意: CMD コマンドを指定した後、docker コンテナ実行コマンドにコマンド (前のコマンドの /bin/bash など) を追加することはできません。追加すると、CMD コマンドが上書きされます。

(IV) Dockerfileを使用してマイクロサービスイメージを構築する

Spring Boot プロジェクト ms-eureka-server (ソースコードは最後にあります) を例に挙げます。このプロジェクトは Spring Cloud Eureka マイクロサービス プロジェクトです。このプロジェクトは実行可能な jar パッケージにパッケージ化でき、次の図に示すように Spring Boot Maven プラグインを通じて実行できます。

プロジェクトの実行可能 jar パッケージを Docker イメージにビルドします。

1. jar パッケージを Linux サーバーの /app/eureka ディレクトリにアップロードし、jar パッケージが配置されているディレクトリに Dockerfile という名前のファイルを作成します。

2. Dockerfileに次の内容を追加します。

# 基于哪個鏡像

java:8より

# 復制文件到容器

microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar を追加します。

# 聲明需要暴露的端口

EXPOSE 8761 #マイクロサービスプロジェクトの起動ポート

# 配置容器啟動后執行的命令

エントリポイント ["java","-jar","/app.jar"]

3. docker buildコマンドを使用してイメージをビルドします。

ビルドは docker によって実行されます。

# 格式: docker build -t 鏡像名稱:標簽Dockerfile的相對位置

ここでは、-t オプションを使用してイメージ タグを指定します。このコマンドを実行すると、ターミナルには次のように出力されます。

4. イメージを起動し、バックグラウンドで起動するには -d を追加します。

# docker run -p 8761:8761 マイクロサービス・エウレカ・サーバー:0.0.1

5. http://Docker ホスト IP:8761/ にアクセスすると、マイクロサービス Eureka Server のホームページが正常に表示されます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker マイクロサービス用の ETCD クラスターの構築に関する詳細なチュートリアル
  • Dapr を使用してマイクロサービスをゼロから簡素化する例

<<:  MySQL sql_mode の分析と設定の説明

>>:  JavaScript の遅延読み込み属性パターンを理解する

推薦する

Vue のすべてのカプセル化方法の簡単な概要

目次1. カプセル化API 2. グローバルツールコンポーネントを登録する3. グローバル関数をカプ...

要素テーブルからヘッダーを削除する方法

show-header属性を使用したドキュメントのヒントshow-header <el-テーブ...

mysqlパラメータsql_safe_updatesを使用して更新/削除範囲を制限する方法の詳細な説明

序文皆さんご存知のとおり、MySQL の運用・保守において、更新/削除条件が誤っているためにデータが...

Dockerのインストール方法とDockerの4つのネットワークモードの詳細説明

1. Dockerをインストールするyum -y install docker-ioインストールが完...

Dockerfileを使用してApacheイメージを作成する方法

目次1. Dockerイメージ2. 既存のイメージに基づいてインスタンスを作成する3. ローカルテン...

MySql 5.6.35 winx64 インストール詳細チュートリアル

注: データベースのバージョンの問題により、プロジェクトの起動時にエラーは発生しませんでしたが、デー...

Vue+ElementUI Treeの使い方

Vue+ElementUI Treeの使い方は参考までに。具体的な内容は以下のとおりです。 フロント...

htmlハイパーリンクaのクリックイベントの後、hrefで指定されたアドレスにジャンプします。

場合によっては、ジャンプを完了するために href の代わりにハイパーリンク <a> を...

Dockerはローカルイメージとコンテナの保存場所を設定します

指定したサイズより大きいファイルを検索するには、find コマンドを使用します。 検索 / -typ...

React の調整アルゴリズム Diffing アルゴリズム戦略の詳細な説明

目次アルゴリズム戦略単一ノードの差分配列ノードの差分キー値の使用要件アルゴリズム戦略React の調...

ウェブデザインの発展と西洋建築の類似点は何でしょうか?

歴史は常に驚くほどうまく繰り返される。西洋建築とウェブデザインは、どちらも工学と芸術の組み合わせです...

MySQL交換パーティションの詳細な例

MySQL交換パーティションの詳細な例序文exchange パーティションを紹介する前に、まず my...

フロートをクリアするための CSS メソッドの概要

フロートはWebページのレイアウトでよく使用されますが、フローティングブロックレベル要素は標準のドキ...

H5ウェイクアップアプリの実装方法と注意点のまとめ

目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...