Docker管理に関する断片的な知識のまとめ

Docker管理に関する断片的な知識のまとめ

1. 概要

この記事は、将来のレビューや参照のために、日常的な Docker 管理に関する知識の断片を要約して整理することを目的としています。

2. 応用例

2.1、Docker コンテナ分離名前空間

名前空間: コンテナ仮想化が依存する Linux の主要なコア テクノロジであり、コンテナを分離するために使用されます。これは主に次の6つの分離技術によって実現されます: 2つの疑似ファイルシステムがあります: /procと/sys/

UTS:各コンテナが独立したホスト名とドメイン名を持つことができるため、ホスト上のプロセスではなく、ネットワーク上の独立したノードとして扱うことができます。

IPC : コンテナ内のプロセス相互作用では、共通セマフォ、メッセージ キュー、共有メモリなど、Linux の一般的なプロセス間相互作用方法が引き続き使用されます。コンテナ プロセス間の相互作用は、実際にはホスト上の同じ PID を持つプロセス間の相互作用です。

● PID: 異なるユーザーのプロセスは pid 名前空間によって分離され、同じ pid が異なる名前空間に存在することができます。 docker 内のすべての LXC (Linux コンテナ) プロセスの親プロセスは docker プロセスであり、各 LXC プロセスには異なる名前空間があります。

● ネット:

● MNT: ファイルシステムのマウントポイント。

● USRE: 各コンテナは異なるユーザーとグループ ID を持つことができます。つまり、ホスト上のユーザーではなく、コンテナ内のユーザーを使用してコンテナ内でプログラムを実行できます。

2.2. Docker のフリー制限 cgroup

例1: docker run -it -m 200M --memory-swap 300M centos //-m または –memory: メモリ使用量制限を設定する、–memory-swap: スワップ (スワップ パーティション) 使用量制限を設定する

例 2: docker run -it --name containerB -c 512 centos //containerB、CPU の重み制限は 512 です。-c または –cpu-shares は、コンテナ実験の CPU の重みを設定します。設定されていない場合、デフォルトは1024です

例 3: docker run -it --name testA --device-write-bps /dev/sda:30MB centos //コンテナ testA はディスクへの書き込み量を 1 秒あたり 30 MB に制限します。

その他のパラメータ:

-bps: 1 秒あたりに読み書きされるデータの量。バイト/秒
-iops: 1 秒あたりの IO 操作の数。 io/秒

--device-read-bps: 読み取りデバイスのbpsを設定します
--device-write-bps: デバイスへの書き込みのbpsを設定します

--device-read-iops: 読み取りデバイスの iops を設定する
--device-write-iops: デバイスへの書き込みの iops を設定します

2.3. 実行中のコンテナのポートマッピングを設定する

コンテナを停止せずにコンテナ マッピング ポートを調整したい場合があります。では、コンテナの使用中に、コンテナ内のアプリケーションのサービス ポートをローカル ホスト マシンにマッピングするにはどうすればよいでしょうか。

コンテナ内でいくつかのネットワーク アプリケーションを実行し、これらのアプリケーションへの外部アクセスを許可する場合は、-P または -p パラメータを使用してポート マッピングを指定できます。 -P (大) パラメータを使用すると、Docker はホストのローカル ポートを内部コンテナのオープン ネットワーク ポートにランダムにマッピングします。-p (小) パラメータを使用すると、マッピングするポートを指定でき、指定したポートにバインドできるコンテナは 1 つだけです。サポートされている形式は次のとおりです:

IP:ホストポート:コンテナポート
IP:コンテナポート
ホストポート:コンテナポート

いくつかの例を見てみましょう:

例 1: docker run -d -P nginx //docker ps は、3**** ポートがローカル ホストにランダムに割り当てられ、コンテナーのポート 80 にマップされていることを示します。ローカル ブラウザーで http://localhost:3**** にアクセスすると、nginx のウェルカム ページが表示されます。

例2: docker run -d -p 8080:80 nginx //docker psを使用すると、ローカルホストのポート8080がコンテナのポート80にマッピングされていることがわかります。

検証: コマンド形式: docker port CONTAINER [PRIVATE_PORT[/PROTO]]

コンテナの特定の情報を取得するには、docker inspect + コンテナ ID を使用します。

例3: 実行中のコンテナにマッピングポートを追加する

docker examine \`container_name` | grep IPAddress // コンテナの IP アドレスを取得するには、container_name を実際の環境のコンテナ名に置き換えます。iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000 // コンテナのポート 8000 を docker ホストのポート 8001 にマップします。または:
docker commit container_id foo/live //実行中のコンテナをイメージとして送信 docker run -d -p 8000:80 foo/live /bin/bash //イメージを実行してポートマッピングを追加します。ホスト8000​​をコンテナ80に追加します。

2.4. 実行中のDockerコンテナの内容を変更する

Dockerでは、ホストとコンテナは相互にファイルをコピーして転送します。

docker cp mycontainer:/opt/testnew/file.txt /opt/test/ // コンテナからホストにファイルをコピーします。 docker cp /opt/test/file.txt mycontainer:/opt/testnew/ // ホストからコンテナにファイルをコピーします。 sudo docker commit -m "説明の内容" -a "作成者名" 32555789dd00 aipaper/devinz83:v2 //-m は、使用するバージョン管理ツールと同様に、提出の説明を指定するために使用されます。-a は、更新されたユーザー情報を指定できます。その後に、イメージの作成に使用したコンテナの ID が続き、最後に、対象イメージのウェアハウス名とタグ情報を指定します。作成が成功すると、イメージID情報が返されます。docker images //REPOSITORY TAGを確認します
aipaper/devinz83 v2

#コンテナ設定ファイルyamlを変更する
: docker-compose-resty-redis.yml を編集します。

docker stack deploy --compose-file=/opt/docker/yml/docker-compose-resty-redis.yml resty_redis //新しく変更したイメージを使用して docker アプリケーションをデプロイします

注意: docker cp はコンテナが起動されているかどうかに関係なく有効になります。完了したら、docker commit コマンドを使用して更新されたコピーをコミットします。

次に、コンテナの yml ファイルを更新し、イメージを新しいオブジェクトに更新します。

ここに画像の説明を挿入

2.5. Dockerコンテナを他のサーバーに移行する

ハードウェアのアップグレード、データセンターの変更、リソースの制限など、さまざまな理由により、現在の Docker コンテナを別のリソース プールまたはホストに移行する必要がある場合があります。

1) 輸出入コンテナ:

コンテナをエクスポートします。これにより、コンテナのファイル システムから圧縮ファイルが作成されます。エクスポートされたファイルは、「gzip」ファイルとして保存されます。圧縮ファイルは、scp や rsync などのファイル転送ツールを使用して新しいサーバーにコピーされます。新しいサーバーで、gzip ファイルを新しいコンテナーにインポートします。

docker export コンテナ名 | gzip > コンテナ名.gz

zcat コンテナ名.gz | docker import - コンテナ名

docker run -d container-name /bin/bash //「docker run」コマンドを使用して、新しいサーバーで作成された新しいコンテナにアクセスします

: コンテナのエクスポート ツールの欠点の 1 つは、コンテナのポートと変数がエクスポートされず、コンテナを含む基礎データもエクスポートされないことです。これにより、別のサーバーでコンテナをロードしようとするとエラーが発生する可能性があります。この点では、Docker イメージ移行を使用して、コンテナをあるサーバーから別のサーバーに移行することも検討できます。

2) コンテナイメージの移行:

つまり、コンテナに関連付けられたイメージを新しいリソース プールに移行します。これは、Docker コンテナを別のサーバーに移行する最も一般的な方法でもあります。移行するコンテナについては、まず「Docker commit」コマンドを使用して、その Docker イメージを圧縮ファイルに保存します。

docker commit container-id image-name //生成されたイメージは圧縮されます

その後、上記のイメージを新しいサーバーにアップロードし、新しいサーバーで「docker run」を使用して新しいコンテナを作成します。
この方法を使用すると、データ ボリュームは移行されませんが、コンテナー内に作成されたアプリケーション データは保持されます。

3) まず保存してから画像を読み込む

Docker イメージは、アプリケーションのコード、ライブラリ、構成ファイルなどのパッケージです。これらのイメージから Docker コンテナが作成されます。

「docker save」を使用してイメージを圧縮し、新しいサーバーに移行できます。次に、新しいサーバーで「docker load」を使用して、圧縮されたイメージ ファイルを使用して新しいイメージを作成します。

docker save イメージ名 > イメージ名.tar

cat イメージ名.tar | docker load

4) データボリュームを移行する:

Docker コンテナ内のデータ ボリュームは、コンテナ固有のデータが含まれる共有ディレクトリです。ボリューム内のデータは永続的であり、コンテナの再作成時に失われることはありません。

エクスポート ツールまたはコミット ツールを使用して Docker コンテナーまたはイメージをあるサーバーから別のサーバーに移行する場合、基礎となるデータ ボリュームは移行されません。この場合、データを含むディレクトリは手動で新しいサーバーに移行されます。次に、新しいサーバー上にコンテナを作成し、そのディレクトリをデータ ボリュームとして参照します。

もう 1 つの簡単な方法は、「docker run」コマンドに「-volumes from」パラメータを渡してデータ ボリュームをバックアップおよび復元することです。

docker run --rm --volumes-from データボリューム名 -v $(pwd):/backup イメージ名 tar cvf backup.tar /path-to-datavolume

docker run --rm --volumes-from データボリューム名 -v $(pwd):/backup イメージ名 bash -c "cd /path-to-datavolume && tar xvf /backup/backup.tar --strip 1"

上記のコマンドでは、datavolume-name は /path/to/volume です。このコマンドは、データ ボリュームのバックアップを提供します。作業ディレクトリを指定するには、-w/backup を指定することもできます。 /backup フォルダに生成されたバックアップは、scp または ftp ツールを使用して新しいサーバーにコピーできます。コピーされたバックアップは抽出され、新しいコンテナのデータ ボリュームに復元されます。

5) Docker コンテナ全体を移行します。

上記の方法は、単一のコンテナに対してのみ機能します。しかし、すべてのコンテナをあるサーバーから別のサーバーに移行する必要がある場合は、別のアプローチを採用します。この方法では、docker ディレクトリ全体 (「/var/lib/docker」) を新しいサーバーにコピーします。このアプローチを成功させるには、いくつかの重要なポイントを特定する必要があります。

1. フォルダーの権限と所有権を保持します。
2. 移行前に Docker サービスを停止します。
3. 2 つのサーバーの Docker バージョンに互換性があることを確認します。
4. 移行前と移行後にコンテナ リストと機能を確認します。
5. 環境変数およびその他の構成ファイルへのパス。
6. 何らかの障害によりこの方法が機能しない場合は、コンテナとイメージをあるサーバーから別のサーバーに移行するためのカスタム スクリプトを構成します。

2.6. Dockerイメージ内のファイルを表示する

docker attach ContainerID //対応するコンテナは停止状態ではなく実行中である必要があります##実行されていないコンテナの場合は、次の例に示すように、Dockerイメージ内のファイルをホストにコピーできます。udo docker cp nginx-ubuntu-container:/etc/apt/sources.list ~/Documents/  

2.7. コンテナの実行: docker run の共通オプション

構文: docker run [オプション] イメージ名 [起動コンテナに渡されるコマンド]

一般的なオプションパラメータの説明:

  • -iはコンテナを「インタラクティブモード」で実行することを意味します
  • -t は、コンテナが起動後にコマンドラインに入ることを意味します。これら 2 つのパラメータを追加すると、コンテナの作成後にコンテナにログインできるようになります。つまり、疑似端末を割り当てます。
  • --name 作成したコンテナに名前を付ける
  • -v はディレクトリのマッピング関係を示します (前者はホストディレクトリ、後者はホストにマッピングされたディレクトリ、つまりホストディレクトリ: コンテナ内のディレクトリ)。複数の -v を使用して、複数のディレクトリまたはファイルをマッピングできます。注: ディレクトリ マッピングを実行し、ホスト マシンで変更を加えてから、それをコンテナーに共有するのが最適です。
  • -d 実行後に -d パラメータを追加すると、保護されたコンテナが作成され、バックグラウンドで実行されます (この方法では、コンテナの作成後に自動的にログインすることはありません。 -i -t パラメータのみを追加すると、作成後にコンテナに自動的に入ります)。
  • -p はポート マッピングを意味します。前者はホスト ポート、後者はコンテナー内のマッピング ポートです。複数の -p を使用して複数のポートをマップできます。
  • -e はコンテナの環境変数を設定します
  • --network=hostはホストのネットワーク環境をコンテナにマッピングすることを意味し、コンテナのネットワークはホストのネットワークと同じです。

Docker管理に関する断片的な知識をまとめたこの記事はこれで終わりです。より関連性の高いDocker管理コンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerデータボリューム管理の詳細な説明
  • Dockerボリューム権限管理の詳細な説明
  • Dockerデータ管理の名前付きボリュームの詳細な説明
  • Dockerコンテナのネットワーク管理とネットワーク分離の実装
  • Dockerの基本について簡単に説明します: データ管理
  • 8つの基本的なDockerコンテナ管理コマンドを共有する

<<:  Typescriptの基本構文13個を共有する

>>:  int(3)とint(10)の値の範囲はmysqlで同じですか?

推薦する

HTMLエリアタグの詳しい説明

<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...

SMS送信のカウントダウンを実装するJavaScript

この記事では、SMS送信のカウントダウンを実装するためのJavaScriptの具体的なコードを参考ま...

JavaScript は単一のリンクリストプロセス分析を実装します

序文:複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点も...

MySQL Installer Community 5.7.16 インストール詳細チュートリアル

この記事では、MySQL インストールの詳細なチュートリアルを記録し、全員と共有します。 1. バー...

分散監視システムにおけるZabbixのアクティブ、パッシブ、Web監視のプロセスの詳細な説明

前回の記事では、Zabbix のネットワーク検出機能について学習し、アクションと組み合わせてホストの...

Javascript DOM、ノード、要素取得の紹介

目次DOMノード要素ノード:テキストノード:プロパティ ノード:要素を取得getElementByI...

ドメイン名を介してプロジェクトにアクセスするnginx + tomcatの例

ドメイン名を使ってプロジェクトにアクセスする方法が気になったのですが、自分でドメイン名を取得するのは...

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

UbuntuでGRUBの起動時間を変更する

grubの起動時間を変更するためのオンライン検索は基本的に/etc/default/grubを変更す...

Vuex でゲッターとアクションを使用するための追加手順

予備的注釈1.Vue2.xとVue3.xの違い: Vue 3.x にはヘルパー関数はありません。 V...

MySQL 8.0 の統計が不正確である理由

序文Oracle であれ MySQL であれ、新バージョンで導入された新機能は、一方では製品の機能性...

MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。

インデックスを追加すると、クエリの効率が向上します。インデックスを追加するということは、ドキュメント...

Vue でデータコレクターを設計する

目次シナリオ中核問題ステータス監視状態監視の利点国家監視の欠点復興実行のアイデア依存関係の収集要約す...

Windows ホストと Docker コンテナに共有フォルダを設定してマウントする手順

Docker コンテナ内のプログラムは、ホスト ディレクトリ内のデータにアクセスして呼び出す必要があ...

MySQLの共同クエリ最適化メカニズムの詳細な説明

目次MySQL フェデレーテッド クエリ実行戦略。実行計画フェデレーテッドクエリオプティマイザーMy...