ホームページ  >  記事  >  運用・保守  >  Dockerコアテクノロジーを最も体系的に習得(概要の共有)

Dockerコアテクノロジーを最も体系的に習得(概要の共有)

WBOY
WBOY転載
2022-02-04 07:00:312327ブラウズ

この記事では、Docker コア技術のコンテナー操作、Dockerfile の詳細な説明など、関連する質問をいくつか紹介します。お役に立てれば幸いです。

Dockerコアテクノロジーを最も体系的に習得(概要の共有)

1. Docker

1. はじめに

  • Linux の Cgroup、Namespace、Union FS テクノロジに基づくカーネル、プロセスのカプセル化と分離は、オペレーティング システム レベルの仮想テクノロジです。分離されたプロセスはホストや他の分離されたプロセスから独立しているため、コンテナと呼ばれます。
  • 最初の実装は LXC に基づいていました。 LXCは0.7以降は削除されます 自社開発のLibcontainerに切り替えます 1.11からはrunCとContainerdを使用するようにさらに進化しました
  • Dockerはさらにファイルシステムからコンテナベースでカプセル化しました、プロセス分離へのネットワーク相互接続などにより、コンテナの作成とメンテナンスが大幅に簡素化され、Docker テクノロジが仮想マシン テクノロジよりも軽量かつ高速になります

2. Docker の利点

  • より効率的に使用する システム リソース
  • 起動時間の短縮
  • 一貫した動作環境
  • 継続的な配信と展開
  • 移行の容易化
  • より簡単な保守と拡張
##3. Docker と仮想マシンの比較

##2. Docker のインストール

参考記事のインストール: Ubuntu に Docker Engine をインストールする | Docker ドキュメント

3. コンテナ操作

##開始:

    ##docker run:
  • # -IT インタラクション

    -d 実行中
--P ポート マッピング

--V ディスク ハング

終了したコンテナを開始します

    ##docker start

コンテナの停止

    docker stop

コンテナプロセスの表示

#docker ps
  • ##コンテナの詳細の表示

##docker Inspection

  • ## ファイルをコンテナーにコピーします

docker cp file1 :/file_to_path

  • docker はコンテナを閉じずにコンテナを終了します: ctrl q p

#docker はコンテナを終了し、コンテナを閉じます: exit

    ##すべての docker イメージをクエリ
  • #docker イメージ

  • ##Docker イメージ ウェアハウス

  • #Docker ハブ: https://hub.docker.com

    プライベート イメージ ウェアハウスの作成: docker run -d -p 5000:5000 registry
4. Dockerfile の詳細な説明

Dockerfile は通常、イメージの基本情報、メンテナンス情報、イメージの操作指示、コンテナーの起動操作指示の 4 つの部分に分かれています。

    共通コマンド
  • From: 基本的なミラー イメージを指定します。最初の指示である必要があります

: 形式:

From & LT; Image & GT FROM : <タグ>

From & LT; Image & GT;@& LT; Digest & GT;

## 例:

## Ubuntu

#AINTAINER: メンテナンス情報

# この #形式:

MAINTAINER

MAINTAINER リボン

RUN: コマンドイメージのビルド時に実行

形式:

シェル実行: RUN

実行: RUN ["executable", "param1", "param2" "]

例:

RUN apk update

RUN ["/etc/execfile", "arg1", "arg2"]

RUN apt-get update && apt 2 つのコマンド -get install は常に && で接続されます。そうでない場合、apt-get update ビルド層がキャッシュされ、新しいパッケージのインストールに失敗します

ADD: ローカル ファイルをコンテナに追加します。tar

などのタイプは自動的に解凍され、wget と同様にネットワーク リソースにアクセスできます。形式:

ADD < ;src> ...

例:

ADD bin/amd64/httpserver /httpserver

COPY: この関数は ADD と似ています。ただし、ファイルは解凍されず、ネットワーク リソースにアクセスできません

Dockerfile でマルチステージを使用する: Dockerfile でマルチステージ (マルチステージ ビルド) - spakerdev - Blog Park

Format :

COPY ...

例:

COPYbin/amd64/httpserver /httpserver

CMD:コンテナーの構築後に呼び出されます。つまり、コンテナーの開始時にのみ呼び出されます。

Format:

CMD ["executable","param1","param2"] (実行可能ファイルを実行、優先順位)

CMD ["param1","param2"] (ENTRYPOINT が設定されている場合は、ENTRYPOINT を直接呼び出してパラメータを追加します)

CMD コマンド param1 param2 (シェル内部コマンドの実行)

例:

["ethtool", "--help"]

CMD echo "1111"

ENTRTPOINT: コンテナを実行可能にするように構成します

形式:

ENTRYPOINT ["executable", "param1", "param2"] (実行ファイル、優先度)

ENTRYPOINT コマンド param1 param2 (シェル内部コマンド)


例:

ENTRYPOINT /httpserver

CMD [-c]

LABAL: ソース データを画像に追加するために使用されます

#形式:

ラベル = = = ...

例:

LABEL multi.label1="value1" multi.label2="value2" other="value3"

ENV: 環境変数を設定します

形式:

ENV

例:

ENV MY_SERVICE_PORT=80 UDP_PORT=90

EXPOSE: 外部インタラクションを指定しますポート

形式:

EXPOSE [...]

例:

EXPOSE 80

EXPOSE 80/tcp

EXPOSE 80 90

VOLUME: 永続化ディレクトリの指定に使用されます

形式:

VOLUME []

例:

VOLUME ["/data", "/usr1/jenkins"]

USER: 実行を指定しますコンテナのユーザー名または UID、およびその後の RUN でも、指定されたユーザーが使用されます。

形式: USER ユーザー

USER ユーザー:グループ

USER uid
USER uid:gid
USER ユーザー:gid
USER uid:group

例:
USER www


ARG: ビルド ランタイムに渡される変数を指定するために使用されます

形式: ARG [=]

例:

ARG build_user=ribbon


#

5. Linux NameSpace の詳細な説明

  • NamesSpace の詳細な説明:

Linux NameSpace_Frank_Abagnale のブログ - CSDN ブログ この記事では、詳細について説明します。この記事を参照してください。

  • NameSpace の一般的な操作

  • 現在のシステムの名前空間を表示します:

lsns -t

  • プロセスの名前空間を表示します:

ls -la /proc//ns/

    # コマンドを実行している名前空間を表示します

nsenter -t -n

6. Linux Cgroups の詳細説明

  • Cgroups の詳細な説明

Container Core: cgroups - Brief Book 詳細については、この記事を参照してください。

  • Cgroup をシミュレートして制御するCPU リソース

リソースを制御する Cgroup の効果をよく理解するためにシミュレーションを実行します。最初に cpudemo フォルダーを作成します。

トップを実行します。ビジーループが 2 つの CPU リソースを消費していることがわかります

cgroup プロセス構成グループにプロセスを追加します

# Set cpuquota

成功が 200% を占めることがわかります。CPU リソースは 1% に減少します。

    シミュレーション中メモリ リソースの制限を超え、OOM によって強制終了される Cgroups
  • メモリを消費するプログラムを実行し、watch を使用してメモリ使用量をクエリします

プロセスを cgroups 構成グループに構成します

最大メモリ サイズを設定します。

# OOM によってプログラムが強制終了されるのを待機しています。dmesg は強制終了情報を確認できます。

注: 自己作成した cgroup フォルダーを削除するには、cgroup-tools

# を使用する必要があります。

#7. Union FS

Docker で使用されているテクノロジーはすべて Linux テクノロジーから派生したものであり、革新的なものはなく、Docker の革新的な点はファイル システムです。

1. 概念:

  • 同じ仮想ファイル システムの下に異なるディレクトリをマウントするファイル システム
  • メンバー ディレクトリごとに読み取り専用、読み取り書き込み、およびなしの設定をサポートします
  • ファイル システムの階層化、読み取り専用権限を持つディレクトリは論理的に変更できます。ここでの変更は増分であり、読み取り専用部分には影響しません。
  • 通常の Union FS の使用: 複数のディスクが同じディレクトリにマウントされます。もう 1 つは、読み取り専用部分と書き込み可能なディレクトリを組み合わせる方法です。

2. Union FS

の図 Docker イメージの設計には、レイヤーの概念が導入されています。つまり、ユーザーのイメージ作成操作の各ステップでレイヤー、つまり増分 rootfs (ディレクトリ) が生成され、アプリケーション A とアプリケーション B が配置されているコンテナーが同じ ubuntu オペレーティング システム レイヤーとGolang 環境層 (読み取り専用層) には、それぞれ独自のアプリケーション層と書き込み可能層があります。コンテナーを起動するときに、コンテナーのルート ファイル システムとして UnionFS を介して関連するレイヤーをディレクトリにマウントします。

#3. コンテナ ストレージ ドライバー

4. Union FS をシミュレートして、効果


現在のバージョンの docker は overlayFS ストレージ ドライバーを使用しているため、

overlay マウント方法 を使用して実験を行います。overlayfs は 3 つのディレクトリを通過します。上位ディレクトリと作業ディレクトリが実装されています。下位ディレクトリは複数存在できます。作業ディレクトリは基本的な作業ディレクトリです。マウント後、内容はクリアされ、使用中にその内容はユーザーには表示されません。最後に、ジョイントユーザーに表示される統合されたビューは、マージされたディレクトリと呼ばれます。

次のコマンドを実行します:

mkdir upper lower merged work
echo "lower" > lower/in_lower.txt
echo "from lower" > lower/in_both.txt
echo "from upper" > upper/in_both.txt
echo "upper" > upper/in_upper.txt
path=$(pwd)
mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged

## オーバーレイ ストレージ ドライバー ファイルが次のコマンドを使用してマウントされていることがわかります。効果。実験終了後、環境を復元するには、まずマージされたディレクトリをアンマウントし、次に 4 つのディレクトリを削除する必要があります。他のディレクトリを先に削除すると、rm: 'merged/' を削除できません: Device or resource Busy が表示される場合があります。そのため、マージされたディレクトリは削除されません。

8. Docker ネットワーク

1. インストール ツール

Centos システム:

$ yum install Bridge-utils

Ubuntu システム:

$ apt-get install Bridge-utils

2. Docker ネットワーク モード

    ビルドされたin docker ネットワーク モード

docker run 実行するネットワーク モードを選択します
  • 1) ホストモード: --net=host で指定します。一連のネットをホストと共有します

## 2) なしモード: --net=none を使用します。指定された。ネットワーク構成は自分で構成する必要があります

3) ブリッジ モード: --net=bridge を使用して指定します (デフォルト設定)。 。

Docker ネットワーク論理図ブリッジと NAT

4) コンテナ モード: --net=container:NAME_or_ID を使用して指定します。他のコンテナのネットワーク構成を利用する

# ネットワークモード図はおおよそ以下のとおりです

3. Docker の動作をシミュレートしてネットワーク ブリッジを開始します

  • --net=none nginx を作成します

  • ネットワーク名前空間の作成

    ## ネットワーク名前空間の作成リンク

  • ## ネットワーク # を構成するための veth ペア

  • を作成します

  • B ネットワークを構成する

nginx Docker で eth0 ネットワーク デバイスを生成する

  • eth0 の IP ゲートウェイを構成します

# nginx はアクセスできます

  • Windows も ip 経由でアクセスできるように nat を構成します。

#使用後に指定された nat ルールを削除します

推奨される学習: 「
    docker ビデオ チュートリアル

以上がDockerコアテクノロジーを最も体系的に習得(概要の共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。