Dockerデータ管理とネットワーク通信の使用

Dockerデータ管理とネットワーク通信の使用

Docker をインストールし、Docker コアとインストールを通じて簡単な操作を実行できます。

1. Dockerイメージの作成方法

Docker のコアテクノロジーであることに加えて、Docker イメージはアプリケーションリリースの標準形式でもあります。完全な Docker イメージは、Docker コンテナの操作をサポートできます。Docker の使用中は、完成したコンテナに入った後、コンテナ内で操作を実行できます。最も一般的な操作は、コンテナにアプリケーション サービスをインストールすることです。インストールされたサービスを移行する場合は、環境と構築されたサービスの新しいイメージを生成する必要があります。

(1)既存の画像を元に作成する

docker commit コマンドは主に、既存のイメージに基づいてイメージを作成するために使用されます。その本質は、コンテナ内で実行されているプログラムとプログラムの動作環境をパッケージ化して、新しいイメージを生成することです。

コマンドの形式は次のとおりです。

docker commit [オプション] コンテナID/名前 ウェアハウス名: [タグ]

パラメータは次のとおりです。

  • -m: 説明情報
  • -a : 著者情報
  • -p: ビルドプロセス中にイメージを停止して新しいイメージを作成します

(1)まずDockerをインストールし、イメージを作成する

[root@localhost ~]# yum -y dockerをインストール
[root@localhost ~]# systemctl dockerを起動します
[root@localhost ~]# /dev/cdrom /media/ をマウントします
マウント: /dev/sr0 は書き込み禁止になっており、読み取り専用としてマウントされます [root@localhost ~]# cd /media/
[root@localhost メディア]# ls
apache-tomcat-8.5.16.tar.gz dhcp jdk-8u91-linux-x64.tar.gz
centos httpd-registry.tar.gz
centos6 httpd_centos ubuntu-12.04-x86_64-minimal.tar.gz
[root@localhost media]# docker load < dhcp \\zair イメージをローカルにロードします[root@localhost media]# docker images \\イメージを表示します[root@localhost media]# docker create -it docker.io/networkboot/dhcpd /bin/bash \\コンテナーを作成します dfbe3a15f462d82674cfdfe87dfb7c4b4b1dcf2267e5c0043510cbe10f11a65b
[root@localhost /]# docker ps -a \\コンテナの表示 コンテナID イメージ コマンド 作成日時 ステータス ポート 名前
dfbe3a15f462 docker.io/networkboot/dhcpd "/entrypoint.sh /b..." 約 1 分前 作成者:determined_dubinsky
[root@localhost /]# docker start dfbe3a15f462 \\コンテナ dfbe3a15f462 を起動します
[root@localhost /]# docker exec -it dfbe3a15f462 /bin/bash
root@dfbe3a15f462:/# touch 123 \\2つのファイルを作成root@dfbe3a15f462:/# touch 456

(2)イメージを開始し、コンテナに変更を加えて、変更したコンテナを新しいイメージとして送信します。コンテナのD番号を覚えておく必要があります。例:

[root@localhost /]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
dfbe3a15f462 docker.io/networkboot/dhcpd "/entrypoint.sh /b..." 5 分前 2 分前 決定的_dubinsky

(3)dockercommitコマンドを使用して、次のように新しいイメージを作成します。

[root@localhost /]# docker commit -m "newdhcp" -a "xws" dfbe3a15f462 docker:mydhcp
sha256:2c1acb192f78bbbb584fc52954a179eb0f10730e0cd58d120d952439ead45b00

(4)作成が完了すると、新しく作成された画像のID情報が返されます。新しく作成されたイメージ情報を確認するには、ローカル イメージ リストを表示します。

[root@localhost /]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
docker mydhcp 2c1acb192f78 約1分前 125 MB
docker.io/networkboot/dhcpd 最新 6f98b6b9b486 19 か月前 125 MB

(2)ローカルテンプレートに基づいて作成する

イメージは、オペレーティング システムのテンプレート ファイルをインポートすることで生成できます。テンプレートは、次のダウンロード アドレスにある OPENVZ オープン ソース プロジェクトからダウンロードできます。
http://openvz.org/Download/template/precreated.

次のコマンドでダウンロードします

wget http://down1oad. openvz.org/template/precreated/ubuntu-12.04-x86_64-minimal.tar.gz

(3)Dockerfileを元に作成

Docker イメージを手動で生成するだけでなく、Dockerfile を使用してイメージを自動的に生成することもできます。 Dockerfile は一連の命令で構成されるファイルであり、各命令は Linux のコマンドに対応しています。Docker プログラムは Dockerfile 内の命令を読み取って、指定されたイメージを生成します。

Dockerfile の構造は、イメージの基本情報、メンテナー情報、イメージの操作指示、コンテナ起動時に実行される指示の 4 つの部分に大別されます。

Dockerfile を書くときは、厳密な形式に従う必要があります。最初の行では、FROM 命令を使用して、ベースとなるイメージの名前を指定する必要があります。次に、MAINTAINER 命令を使用して、イメージを保守するユーザー情報を指定します。次に、RUN 命令などのイメージ操作に関連する命令があります。命令が実行されるたびに、ベース イメージに新しいレイヤーが追加されます。最後に、CMD 命令を使用して、コンテナーの起動時に実行するコマンド操作を指定します。

例: Dockerfile を使用してイメージを作成し、コンテナ内で実行する

1. 作業ディレクトリを作成する

[root@localhost /]# mkdir apache
[root@localhost /]# cd apache/

2. Dockerfileファイルを作成して書き込む

[root@localhost media]# docker load < centos \\まず、ローカルの [root@localhost apache]# vim Dockerfile に centos をロードします

FROM centos \\centos 基本イメージに基づく MAINTAINER Centos プログラマ \\イメージのユーザー情報を保守し、後で気軽に書き込みます RUN yum -y update \\apache ソフトウェア パッケージをインストールするためのイメージ操作手順 RUN yum -y install httpd
EXPOSE 80 \\ポート 80 を開く ADD index.html /var/www/html/index.html //Web サイトのホームページ ファイルをコピーする ADD run.sh /run.sh //実行スクリプトをイメージにコピーする RUN chmod 775 /run.sh
RUN systemctl enable httpd \\Apacheを起動するかしないかを設定します CMD 【“/run.sh”】 \\コンテナを起動してスクリプトを実行します

3. 実行スクリプトの内容を書く

[root@localhost apache]# vim run.sh
#!/bin/bash                
rm -rf /run/httpd/* \\http キャッシュをクリーンアップします。 exec /usr/sbin/apachectl -D FOREGROUND \\apache サービスを開始します。

4. テストページを作成する

[root@localhost apache]# echo "asd" >index.html
[root@localhost apache]# ls
Dockerファイル index.html run.sh

5. Dockerfileを使用してイメージを生成する

Dockerfile と関連コンテンツを記述したら、docker build コマンドを使用してイメージを作成できます。

docker build 【選項】 路徑

先ほど書いたDockerfileを使ってイメージを自動生成する

[root@localhost apache]# docker build -t httpd:centos .

イメージを自動生成するコマンドでイメージを指定した後、新しく生成されたイメージの保存パスを必ず記述してください。つまり、スペースの後の「.」は現在のパスを表します。そうでない場合はエラーが報告されます。

6. 新しいイメージを使用してコンテナを実行する

新しく生成されたイメージをコンテナにロードして実行する

[root@localhost /]# docker run -d -p 12345:80 httpd:centos

ee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243

[root@localhost apache]# docker ps -a

コンテナID イメージ コマンド 作成ステータス ポート名
99e9234cefe5 httpd:centos "/run.sh" 8 秒前 7 秒前にアップ 0.0.0.0:12345->80/tcp youthful_lumiere
dfbe3a15f462 docker.io/networkboot/dhcpd "/entrypoint.sh /b..." 56 分前 53 分前 決定的_dubinsky

//新しく生成されたイメージを使用してコンテナにロードし、実行します //「-p」オプションは、コンテナ内のローカルポート12345からポート80へのマッピングを実現します

ブラウザを使用してWebページにアクセスする

Docker データ管理

Docker では、コンテナ内で生成されたデータを便利に表示したり、複数のコンテナ間でデータを共有したりするために、コンテナ データ管理操作が行われます。 Docker コンテナでデータを管理する主な方法は、データ ボリュームとデータ ボリューム コンテナの 2 つです。

(1)データ量

データ ボリュームは、コンテナが使用する特別なディレクトリです。コンテナ内にあり、ホストのディレクトリをデータ ボリュームにマウントできます。データ ボリュームへの変更はすぐに表示され、データを更新してもイメージには影響しません。これにより、ホストとコンテナ間でのデータ移行が可能になります。データ ボリュームの使用は、Linux でのディレクトリのマウント操作に似ています。

1. データボリュームを作成する

[root@localhost /]# docker run -d -v /data1 -v /data2 --name web httpd:centos
4944c63124d2f96bedd78b4016e6d96e464089626e97b913b06ec888e7ab8f65
[root@localhost /]# docker exec -it web /bin/bash \\コンテナに入ると、ホストマシンと同じであることがわかります [root@4944c63124d2 /]# ls
anaconda-post.log ブート data2 etc lib media opt root run.sh srv tmp var
bin data1 dev home lib64 mnt proc run sbin sys usr
[ルート@4944c63124d2 /]#

(2)ホストディレクトリをデータボリュームとしてマウントする

例えば

[root@localhost /]# docker run -d -v /var/www:/xws --name web-1 httpd:centos
05079057bf0c7c47b14fd457d1a5df0e29f080b6103753399654ef9d0aa4bf0f

中央: 前者はホストマシンのディレクトリ、後者はコンテナ内のディレクトリです

[root@localhost /]# cd /var/www/
[root@localhost www]# touch asdasdasd
[root@localhost www]# ls
アスダスダス

コンテナに入って見てみましょう

[root@localhost /]# docker exec -it web-1 /bin/bash
[root@05079057bf0c /]# ls   
anaconda-post.log ブートなど lib メディア opt root run.sh srv tmp var
bin dev home lib64 mnt proc run sbin sys usr xws
[root@05079057bf0c /]# cd xws
[root@05079057bf0c xws]# ls
アスダスダス

ホストとコンテナが共有していることがわかります

(2)データボリュームコンテナ

[root@localhost /]# docker run -it --volumes-from web --name 777 httpd:centos /bin/bash
[root@d6324596cb2c /]# cd データ1
[root@d6324596cb2c data1]# ファイルをタッチ
[root@d6324596cb2c data1]# 終了
出口
[root@localhost /]# docker exec -it web /bin/bash
[root@4944c63124d2 /]# ls
123 bin data1 dev home lib64 mnt proc run sbin sys usr
anaconda-post.log ブート data2 etc lib media opt root run.sh srv tmp var
[root@4944c63124d2 /]# cd データ1
[root@4944c63124d2 データ1]# ls
ファイル
[ルート@4944c63124d2 データ1]#

2つのコンテナが共有していることがわかります

(3)Dockerネットワーク通信

Docker は、コンテナ ポートをホストにマッピングし、コンテナを相互接続してコンテナにネットワーク サービスを提供するメカニズムを提供します。
ポート マッピングを実装するには、docker run コマンドを実行するときに -P (大文字) オプションを使用してランダム マッピングを実装する必要があります。Docker は、49000 ~ 49900 の範囲のポートをコンテナー内の開いているネットワーク ポートにランダムにマッピングします。

1. ポートマッピング

[root@localhost /]# docker run -d -P httpd:centos
70762709d90a8365803b8b13be02e06e2f9c0b4fdb8624bad01d579817809
[root@localhost /]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
70762709d90a httpd:centos "/run.sh" 5 秒前 4 秒前に起動 0.0.0.0:**32768**->80/tcp kickass_bhaskara

ポートが32768になっていることがわかります

ポートを指定することもできます

[root@localhost /]# docker run -d -p 123:80 httpd:centos
9c7b1b3989b30f44c22276a62674e565daf410e05bdf0b4892c09dca22662253

2. コンテナの相互接続

コンテナの相互接続は、コンテナ名を介してコンテナ間に専用のネットワーク通信トンネルを確立することによって実現されます。簡単に言うと、送信元コンテナと受信コンテナの間にトンネルが張られ、受信コンテナは送信元コンテナが指定した情報を見ることができます。docker run コマンドを実行する際に、--link オプションを使用することで、コンテナ間の相互接続と通信を実現しています。
形式は次のとおりです。

--link 名前:エイリアス \エイリアス

ソースコンテナを作成する

[root@localhost /]# docker run -d -P --name web1 httpd:centos
0105f396c69b15557af4c15a62143872e725a28050075b554a4d2765a504d558

受信コンテナを作成する

docker run コマンドを使用してコンテナ B を作成します。---name は名前を web2 として指定します。--link はコンテナの相互接続を実現するための接続コンテナを指定します。

[root@localhost /]# docker run -d -P --name web2 --link web1:web1 httpd:centos
10413ec7492d1d4bab724b4ecf2c2378dae6f496d14c2d68d27ee29b6a26bb1a

コンテナの相互接続のテスト

[root@localhost /]#** docker exec -it web2 /bin/bash**
[root@10413ec7492d /]# **web1にping**
PING web1 (172.17.0.8) 56(84)バイトのデータ。
web1 (172.17.0.8) からの 64 バイト: icmp_seq=1 ttl=64 time=0.153 ms
web1 (172.17.0.8) からの 64 バイト: icmp_seq=2 ttl=64 time=0.063 ms
web1 (172.17.0.8) からの 64 バイト: icmp_seq=3 ttl=64 time=0.064 ms
web1 (172.17.0.8) からの 64 バイト: icmp_seq=4 ttl=64 time=0.074 ms
web1 (172.17.0.8) からの 64 バイト: icmp_seq=5 ttl=64 time=0.065 ms
web1 (172.17.0.8) からの 64 バイト: icmp_seq=6 ttl=64 time=0.065 ms

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

以下もご興味があるかもしれません:
  • WeChatアプレットネットワーク通信の詳細な説明
  • Java ネットワーク通信における ServerSocket の設計最適化スキーム
  • Docker マルチホストネットワーク通信の詳細
  • Androidネットワーク通信事例分析
  • 論文: 分散データによるディープネットワーク通信の効果的な学習

<<:  WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

>>:  MySQL テーブル内の重複データを検索して削除する方法の概要

推薦する

MySQL データベース テーブルのパーティション分割に関する考慮事項 [推奨]

テーブル パーティショニングは、データベース パーティショニングとは異なります。では、テーブル パー...

CSS3 は本当に SCSS に取って代わるのでしょうか?

Web ページのスタイル設定に関しては、プロジェクトで純粋な CSS または SCSS (および他...

Linux で PHP curl 拡張機能をインストールする方法の詳細な説明

この記事では、Linux で PHP curl 拡張機能をインストールする方法について説明します。ご...

Ubuntu MySQL バージョンが 5.7 にアップグレードされました

数日前、図書館はサーバー(Ubuntu 14.04)にセキュリティ上の脆弱性があり、時間通りに修復さ...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

Docker Compose のサイドカーモードの詳細な説明

目次Docker Composeとは要件に不適切な言語が使用されている実装Docker Compos...

MySQL統計テーブルのサイズを説明する例

各データベース内の各テーブルのサイズをカウントすることは、データ ガバナンスの最も単純な要件の 1 ...

ハイパーリンクの幅と高さを直接設定できない問題の解決策

幅と高さを直接使用することはできません。 display:block; または display:in...

Mysql の主キー インデックスと非主キー インデックスの違いについて簡単に説明します。

目次インデックスとは何か主キーインデックスと通常のインデックスの違いインデックスにはどのデータ構造が...

MYSQL ロック解除とロックテーブルの紹介

MySQL ロックの概要他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純で...

CSSファイルをインポートする3つの方法の詳細な説明

CSS を導入する方法には、インライン スタイル、内部スタイル シート、外部スタイル シートの 3 ...

MySql への新しいユーザーの追加、ユーザー用のデータベースの作成、ユーザーへの権限の割り当ての概要

1. 新しいユーザーを追加するローカルIPアクセスのみを許可する '123456' ...

TCP 3 回目のハンドシェイク データ転送プロセス図

RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...

WeChatアプレットのスクロールビューが左右にスライドできない問題を解決する方法

私は現在、自分自身の小さなプログラム プロジェクトに取り組んでいます。プロフェッショナルなフロントエ...

背景画像にテキストを表示するためのCSS

効果: <div class="imgs"> <!-- 背景画...