ホームページ  >  記事  >  バックエンド開発  >  docker_PHP チュートリアルの開始

docker_PHP チュートリアルの開始

WBOY
WBOYオリジナル
2016-07-12 09:05:44837ブラウズ

docker 入門

この記事は fireaxe によるオリジナルであり、GPL の下で公開されていますので、自由にコピーおよび転載できます。ただし、再版する場合は文書の完全性を維持し、元の作成者と元のリンクを明記してください。コンテンツはいかなる目的でも使用できますが、コンテンツの使用によって生じる結果については保証されません。

著者: haoqiang1531@outlook.com ブログ: fireaxe.blog.chinaunix.net
1. docker とは基本的に、lxc と AUFS から派生したテクノロジーです。 Q:lxcとは何ですか? A: lxc は Linux カーネル コンテナであり、Linux の軽量仮想マシンに相当します。 virtual box や vmware などの命令セット仮想化を備えた仮想マシンと比較して、ホスト システムのカーネルを利用できるという利点があります。したがって、lxc はカーネルを共有する仮想マシンとみなすことができます。幸か不幸か、lxc の欠点はホストのカーネルの使用によるものでもあるため、コンテナでも Linux システムを実行する必要があります。 Linux 以外のシステムを使用する必要がある場合は、vmware などの仮想マシンのみを使用できます。 Q: どのようなシナリオで docker を使用する必要がありますか?この問題については、以下の内容を読んだ後に議論するのがベストですが、この問題の重要性を踏まえ、前に移動することにしました。 (一般的に、最初の 3 つの段落だけを読む人がほとんどです...) 1) クラウド展開 (私はこの部分をプレイしたことがありません。伝聞でしか聞いていません) 以前は、docker を使用した後、仮想マシンが使用されました。 、何を使用するかに関するいくつかの質問 オペレーティング システムに必要のないアプリケーションはすぐに移行されます。もちろん、lxc も機能しますが、クラウド プラットフォームを使用する限り、大規模に適用されます。ただし、lxc には、大規模なアプリケーションに必要な導入と移行の容易さがありません。 2) 社内での最初の CI プラットフォームは、Docker テクノロジーを使用して CI プラットフォームのツールを分離し、アップグレードの柔軟性を向上させます。同時にツールはイメージを使用してバックアップされます。 (データのバックアップには他の方法もあります) 2 つ目は、dockerfile を使用して、最新バージョンを使用してテスト可能な環境を自動的に合成するため、環境の干渉を排除できます。同時に、テストが完了すると、顧客がソフトウェアを再インストールすることによって引き起こされるさまざまな構成上の問題を回避するために、イメージを外部にリリースすることができます。 (以前は様々な環境に適応する必要がありましたが、今は改善されました。環境と一緒にリリースでき、複数の環境をテストする必要がありません。) 3) docker を使用して開発環境を素早くセットアップします。開発環境を実装するには、新しいコンピュータを手に入れて開発環境をセットアップしたい場合は、イメージを取得するだけで数分で完了します。 !
Q: lxc はなぜ分離を達成できるのですか? A: 実際、Linux 起動の原則は、最初にカーネルを起動し、次にカーネルがユーザー空間を起動することです。そうすれば、カーネルが複数のユーザー空間を起動することも不可能ではありません。必要なのは、カーネル内での分離だけです。これは、lxc をカーネルに実装する必要がある理由でもあります。ユーザー空間は、それ自体以外に他のユーザー空間があることを必ずしも認識する必要はありません)
Q: なぜ異なるディストリビューションが同じシステム上のコンテナーで同時に実行できるのですか?時間? A: Linux ディストリビューション間の主な違いは、ユーザー空間とカーネルが同じであることです。そのため、異なるディストリビューションを同時に実行するのにも便利です。 lxc はコンテナーのカーネルを提供するだけで、さまざまなディストリビューションのニーズに応じてさまざまなユーザー空間を構築します。
Q: lxc はすでにコンテナーを提供しているのに、lxc を直接使用しないのはなぜですか? A: 実際、docker はどこでも使用されるわけではなく、アプリケーションのシナリオによって異なります。 lxc は本質的には仮想マシン テクノロジです。通常の作業で異なるディストリビューションや統合ディストリビューションの異なるバージョンが必要な場合は、lxc を使用するだけで十分です。 Docker はサービスのセグメント化に似ています。現在のシステムはますます複雑になっており、同じマシン上で実行するとさまざまな相互干渉が発生します。同時に、特定のサービスを別のマシンに移行する場合、さまざまな環境構成や依存関係の問題が発生することになります。これはlxcでも行うことができますが、lxcの各コンテナはカーネルサポートのみを提供するため、ユーザーモード環境を再構成する必要があります。 Apache サーバーを必要とするコンテナーが 3 つある場合、各コンテナーに Apache サーバーを 1 回インストールする必要がありますが、これは明らかに無駄です。または、さまざまな開発環境で gcc コンパイラーが必要な場合は、複数のコピーをインストールする必要があります。そこで、一部の人々はユーザー空間の一部を再利用することに注目し始めました。
Q: ユーザー空間レベルの再利用を実現するにはどうすればよいですか? A: 冒頭で述べたように、docker は lxc と AUFS をベースにしたテクノロジーです。 AUFS を使用すると、ユーザーはユーザースペースの一部を再利用できます。ユーザー空間は本質的にはファイル システムです。したがって、ユーザースペースの再利用はファイルシステムの再利用とみなすことができます。 AUFS は複数のディレクトリをスタックでき、各ディレクトリの読み取り属性と書き込み属性を個別に設定できます。簡単に言うと、lxc は外部から完全に隔離されたコンテナごとにファイル システムを生成します。そのため、ユーザー空間の観点から見ると、これに基づいてスタッキングを実装する唯一のオペレーティング システムとなり、複数のコンテナがファイル システムの一部を共有できるようになります。ファイルシステム。 Q: AUFS によって実装されるファイル システム共有の重要性は何ですか? A: たとえば、mysql サーバー用と Redmine サーバー用の 2 つのコンテナを使用したいと考えています。オペレーティング システムの要件は ubuntu です。 lxc では、ubuntu を含む 2 つのコンテナを構築し、それぞれ 2 つのソフトウェアをインストールする必要があります。 docker では、最初に ubuntu コンテナを構築し、次にこのコンテナに基づいて 2 つのコンテナを構築して、mysql サーバーとサーバーを格納できます。 Ubuntu 部分は、その派生コンテナーに対して読み取り専用です。その後、ある日、ユーザーが mysql に基づいていくつかのアプリケーションを追加する必要があることに気付いた場合、mysql サーバー コンテナからそれらのアプリケーションを簡単に派生させることができます。このように、派生を通じて再利用が実現されます。 詳細については、Docker コンテナーとイメージを深く理解するのに役立つ 10 枚の図 (http://dockone.io/article/783) を参照してください。 Q: イメージとコンテナーの違いは何ですか? A: 実際、イメージはコンテナであり、イメージはコンテナの読み取り専用コピーに相当します。子コンテナが親コンテナを直接再利用する場合、子コンテナが親コンテナのコンテンツを変更すると、親コンテナの他の子コンテナも影響を受けます。したがって、親コンテナは読み取り専用イメージになり、その子コンテナが変更できないようになります。 一方、コンテナは動的であり、git で管理されるコードのセットと同様であり、イメージはコミットに相当します (docker でコンテナからイメージを生成するコマンドはたまたまコミットです)。コンテナは開発者自身のみが使用でき、イメージの生成をコミットした後でのみ、他の人がこれに基づいてブランチを取り出して並行開発できます。 もちろん、コミット後のイメージはローカルにのみ存在します。複数人で共同開発したい場合は、「docker Push」コマンドを使用してイメージをサーバーにプッシュする必要があります。 Docker のサーバーは docker レジストリと呼ばれます。
Q: dockerfile とは何ですか? A: Dockerfile はイメージを生成するスクリプトであり、実稼働環境でのデプロイメントに一般的に使用されます。例 1: ソフトウェアのセットを開発し、毎週 Docker イメージをリリースする必要があります。通常のプロセスでは、基本イメージを取得し、ソフトウェアをダウンロードしてインストールし、最後にリリース用の新しいイメージにコミットします。 dockerfile を使用すると、毎回 docker build コマンドを実行し、作成された dockerfile を使用して新しいイメージを生成するだけでこのプロセスを自動化できます。例 2: 実稼働環境は複数のコンポーネントに依存しますが、これらのコンポーネントは常に更新されます。イメージを使用する場合は、更新のたびにイメージをパッケージ化して再送信する必要があります。 dockerfile を使用すると、環境を更新する必要があるたびに、dockerfile を 1 回再実行するだけで済み、コマンドに従って最新のコンポーネントが自動的にダウンロードされ、インストールされます。要約すると、環境のパッケージ化プロセスを自動化するスクリプト言語である dockerfile の役割を強調しています。開発プロセスでは大きな役割を果たしません。
2.共通コマンド
コマンド 説明
create [--namecontainer-id] 指定されたイメージに基づいてコンテナを作成
start [-ti/-d/-v ] 指定したコンテナを起動します
-ti で仮想端末接続を確立します
-d バックグラウンドで実行し、コマンド完了後に終了しません
-v ホスト ディレクトリをコンテナにマップします
run [--namecontainer-id] 'docker create' + 'docker start'
ps [-a] running Container
-a すべてのコンテナ
iamges [-a] すべての画像
-a すべての画像と画像を構成するレイヤー
履歴 画像と画像を構成するレイヤー
停止 コンテナをシャットダウン
一時停止 コンテナを一時停止
rm コンテナを削除
コミット コンテナに基づいて新しいイメージを作成
rmi 画像を削除
プル Sync ローカルにイメージを指定
push Docker Hubにイメージを統合
login Docker Hubにログイン

3. docker ルーチンについては、以下のリンクを直接参照してください: http://docs.docker.com/mac/started/
4. データ ボリュームとデータ ボリューム コンテナー (データ ボリュームとデータ ボリューム コンテナー) 1) データボリュームとデータ ボリューム コンテナの重要性 データ ボリューム: データとアプリケーションの分離を実現します。実際にバックアップを適用する際にはデータは含まれません。データは個別にバックアップされます。データとアプリケーションのバックアップには通常、異なる戦略が必要になるためです。
データ ボリューム コンテナー データ ボリューム コンテナーは、ホスト上の実際のアプリケーションを分離するために使用されます。このように、ホスト上のデータの場所が変更された場合、データ ボリューム コンテナのみを変更する必要があり、他のアプリケーション コンテナを変更する必要はありません。
2) データ ボリュームを使用して、1 つのデータ ボリュームを含むコンテナーを作成します: $ docker run -v /data/path:/mount/path:ro --name dbdata ubuntu /bin/bash 2 つのデータ ボリュームを含むコンテナーを作成します: $ docker run -d -v /data/path1:/mount/path1:ro -v /data/path2:/mount/path2:ro--name dbdata ubuntu /bin/bash $ docker run -ti --volumes-from dbdata - -name app ubuntu
-v を使用して、ホスト ディレクトリ "/data/path" をコンテナ dbdata の "/mount/path" ディレクトリにマウントします。 dbdata がデータ ボリューム コンテナーになります。 実際のアプリケーションコンテナアプリはdbdataに基づいて生成されます。 「--volumes-from dbdata」を使用して、データ ボリューム コンテナー dbdata の読み取りおよび書き込み権限を取得します。

この記事は fireaxe によるオリジナルであり、GPL に基づいて公開されており、自由にコピーおよび転載できます。ただし、再版する場合は文書の完全性を維持し、元の作成者と元のリンクを明記してください。コンテンツはいかなる目的でも使用できますが、コンテンツの使用によって生じる結果については保証されません。

著者: haoqiang1531@outlook.com ブログ: fireaxe.blog.chinaunix.net

www.bkjia.com本当http://www.bkjia.com/PHPjc/1068090.html技術記事 docker の使い方に関するこの記事は fireaxe のオリジナルであり、GPL の下で公開されていますので、自由にコピーおよび転載できます。ただし、再版する場合は文書の完全性を維持し、元の作成者と元のリンクを明記してください。コンテンツはご自由にお使いいただけます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。