Dockerの実現

他の人のアプリケーション、または自分のアプリケーションをサポートしたことがないが、1つの頭に収まらないほどのサイズの場合は、リラックスして、座って、あなたが読んだものを、不自然な問題、面白い話、そして明らかな幸せのある有益な物語にするようお願いします終わり。 さもなければ、本当の戦闘経験があるなら、地獄へようこそ、しかしIDDQDとIDKFAで。


ご参考までに! この記事では、内部にネストされているマイクロサービスのリストをコンパイルするのではなく、Dockerコンテナーの現象を考慮します。 次のシリーズでは、正義の名の下にこれを行います!


更新 :dockerをdockerに置き換える必要がありました。それ以外の場合、記事は検索されません。 テキスト内のすべてのdockerについて事前に謝罪します。 セリャヴィー。


今日は何がありますか



驚いたことに、これらすべての問題の原因はたった1つです。サーバーは持ち上げるのに費用がかかり、消火するのにも費用がかかります。 構成による芸術的な織り込みに費やされる時間がかかるか、ハードウェアエンタープライズの起動に時間がかかるか、サーバーの状態を慎重にバックアップしてから復元する必要があるか、すべてがシンプルで高速ですが、逃げられない独自の高価なプラットフォームでのみ機能します。


もちろん、これはキャプテンの紹介です。 そして、エントリーの目標はまさにキャプテンフッドにあります。これらの問題はすでにありふれたものであり、単純なリストでさえどこかで病気になることを示しています。


新しいマシンでアプリケーションを起動するのに1分かかり、すべてのデータが安全であると想像するなら、すぐに息を吸うのが簡単になります。そして、顔にサーバーをいじるのではなく、有用なコードを書くことを期待しています。


耳が英語を話す場合は、最初に創始者からのdockerの熱狂的な紹介を聞いてください。


基本に戻る


よくあることですが、ある時点で特定のシステムの状態が制御不能になり、新しいテクノロジーが必要になります。 ただし、プログラミングでは、逆のことがよく起こります。古いテクノロジーを覚えておく必要があります。 したがって、Dockerの場合、 機能的なプログラミングOOPを参照 )とマイクロカーネルの原則を採用し、それらをアプリケーションのインフラストラクチャレイヤー(サーバー、ネットワークなど)に適用し、ステートレスで不変の分離されたマイクロサービスを取得しました。 dockerの魅力はすべてこれから生まれます。 ご存知のように、機能主義はリッチヒッキーが望むほど単純ではありません。 祖先の知恵を毎日使用できるようにするには、優れたツールが必要です。 Dockerはまさにそのようなツールです。


以下に、単純なサーバーのdockerコンテナー(マイクロサービスではなく、上記を参照)との基本的な違いを示します。


国会議員


コンテナーの構成は、起動後に変更することはできず、変更すべきではありません。 すべての準備作業は、イメージの作成またはコンテナーの起動の段階で行われます:構成、ポート、共有フォルダー、環境変数。これらはすべて、コンテナーの起動時までに認識されている必要があります。 もちろん、Dockerでは、コンテナー内で実行されているプロセスがメモリとファイルシステムを使用して任意の処理を実行できますが、開始する前に触れられる可能性のあるものに触れることは不適切な形式と見なされます。


ピュア


コンテナはホストシステムについて何も知らないため、他のコンテナに干渉することはできません。他の誰かのファイルシステムに侵入したり、他の誰かのプロセスに信号を送信したり、ランダムポートにヒットしたりします。 それが彼がコンテナだからです。 もちろん、ドッカーはコンテナが通信できるようにしますが、厳密に宣言された方法でのみです。 また、実在のネットワークや物理デバイスへのアクセスなど、いくつかの超大国に恵まれたコンテナを実行することもできます。


怠け者


起動時に、コンテナは作成元のイメージのファイルシステムをコピーしません。 コンテナは、イメージの上に空のファイルシステムを作成するだけです。 ドッカーでは、これはレイヤーと呼ばれます。 同様に配置された画像。 画像は、互いに重ね合わされた(地質)レイヤーのリストで構成されます。 したがって、新しいコンテナを起動するそのような高速:1秒未満。


宣言的


すべてのコンテナプロパティは宣言形式で保存されます。 イメージを作成する手順も、厳密に分けられた手順で説明されています。 ネットワークパラメータ、ファイルシステムの内容、メモリサイズ、パブリックポートなどは、Dockerfileで設定されるか、起動時に静的キーで設定されます。 これらはすべて、非常に複雑なシステムであっても、一対のテキスト画面で読みやすくなっています。


機能的


コンテナが行うことは1つだけですが、うまくいきます。 コンテナでは、アプリケーションで1つの機能のみを実行し、1つのプロセスのみが実行されると想定されています(ファミリで可能です)。 コンテナーには独自のカーネル、ブートパーティション、initプロセスがなく、ほとんどの場合、ユーザー(擬似ルート)が1人しかいないという事実により、つまり、コンテナーには本格的なオペレーティングシステムがありません。これがすべてないため、コンテナーはすぐに起動しますオペレーティングシステムが既に完全にロードされている場合のサービスの開始方法。 この狭い特殊化により、コンテナによって実装される機能は予測可能でスケーラブルになります。 プロセスは1つしかないため、ログのオーバーフロー、スワップなどを待機する場所はありません(外部の場合のみ)。


厳しい


デフォルトでは、Dockerはネットワークへのアクセス(拒否することもできます)以外のすべてのコンテナを拒否します。 ただし、必要に応じて、ルールを破るのがより論理的な場合、これらのルールのいずれかに違反することが許可されます。 そして興味深いことに、アクセスを許可することは、拒否するのと同じくらい簡単です。 各バージョンでのドッカー内のコンテナの接続または切断は、特にデータセンター全体に分散されたネットワークでの作業がますます簡単になっています。


ドッカーではないもの


Dockerは、VagrantやOpenVZ、さらにはVirtualBoxと混同されることがよくあります。 Dockerは、既存のLinuxカーネルテクノロジーを巧みにジャグリングするユーザー空間Goデーモンです。 彼自身が「docker vs.」というクエリからトピックに精通し始めたので、より詳細に説明する価値があると思います。 浮浪者。」


令状ではない


Vagrantは、仮想マシン(または、ホスティングのトピックにより近い仮想サーバー)の管理に取り組んでいます。 Dockerと同様に、Vagrantには仮想マシンイメージのライブラリ全体があり、Dockerと同様に、スナップショットを作成、ダウンロードおよびアップロード、構成および実行できます。 しかし、Vagrantは、たとえば、VirtualBox、VMWare、DigitalOcean、AWSなどで実行される本格的な仮想マシンを、どこからでも管理します。 賢いのは、この浮浪者、状態が内部にある本格的な仮想マシンが必要な場合です。


仮想マシンではない


, docker (), KVM/Qemu, VirtualBox/VMWare/Parallels, XEN, etc. Docker- ( docker) ( ) . , , , . OpenVZ Linux Containers , , .


docker?


Docker :


  1. docker daemon — docker'. - , , , ( 0.8 ). , , docker-client.


  2. docker docker- HTTP. . , docker' , . docker : tar.gz docker-daemon, . - .


  3. Docker Hub . docker run ruby docker . , .

docker


, docker'. , ( , , SSH Git ?).


Chef / Puppet / Ansible


— stateful . Dockerfile. docker , , , . . docker' Chef stateless , docker, -, FreeBSD 4.11.


Upstart / SystemD / Supervisor / launchd / God.rb / SysVinit,


, . docker daemon, init- , , , , , , «».


Ubuntu_14.04.iso / AMI-W7FIS1T / apt-get update


, docker , , DVD- ( Dell ), , . , , Docker Hub. apt-get update — .


RUBY_ENV, database.dev.yml, testing vs. staging vs. backup


docker -- , , . , , , . — docker-compose up . docker' 1.10 SHA256 .


Xcode, brew, port install, ./configure && make && sudo make install, mysql --version


, , , . , , … Docker , , . .


SSH (sic!), VPN, Capistrano, Jenkins-slave


root , . docker' , , . docker run docker TLS . : docker exec -it %containername% bash . rsync docker' : rsync -e 'docker exec -i' --blocking-io -rv CONTAINER_NAME:/data ., --blocking-io.


Git (!!!)


Git ? ! Docker Git, . git push ( Github’) docker push. , docker-compose up. . , zero-downtime , . , MAINTENANCE.HTML . , , ( ) , .


Datacenter lock-in


, . , — . , , , .


bundler, rvm, dotenv, /opt


— docker . — bundle exec.


*.log, *.pid


, docker. (kudos ➞ Fesor) . .


useradd www


, - - , . , . , ( , , ) .


chroot, CGroups, LXC


Docker libcontainer, runC, libnetwork. LXC, docker. , docker'.


docker'


Dockerfile


, Dockerfile Chef-, . : — . — . , API , . . , . .



docker , copy-on-write . readonly , , , readonly, . , .



Fesor:


, … … .

, . , , « ».


docker-daemon — HTTP-


, , Single Actor , nginx. docker Go, , docker'.


docker in docker


. , , docker'. :


docker run -v /var/run/docker.sock:/var/run/docker.sock \
       -v $(which docker):/bin/docker \
       -ti ubuntu

docker-in-docker, .


VXLAN


docker' . , . docker' , . , , . docker VXLAN, docker' IP . . , , . NAS , .


?


, docker , docker-in-docker-in-docker. , , docker , .


Swarm? Machine! Compose!!!


docker', docker', : Machine, Compose Swarm. — .



. , , .


VasilioRuzanni:


Phusion baseimage-docker ?

, :


  1. Ubuntu .


    docker' init dpkg. , . OpenVZ , , .


  2. init — .


    , . fork-, 10 - docker' SSH: can't fork. docker', docker ps , docker kill .


    , , - , - . , , . , ? by design, , , , tini.


  3. Syslog?


    docker , STDOUT STDERR, syslog . Docker , . , , -, , -, .


  4. Cron?


    ? ? 2016 ? , - , , , docker . .


  5. SSH?


    , docker SSH. , , . scp.


  6. , docker !


    , !


  7. docker' OpenVZ.


    .



powerman:


.


-, , , « », , , , . — .


-, « », - , . docker' — - — .


, , : hardened gcc ( PIE SSP) shellshock - « », 100500 ?


. . . , docker', , . , CQRS . , .


grossws:


vxlan, , — . . . --link , . , --link, ? , , tinc (p2p vpn), .

--link, , . , , .


@:


Docker , « ». , « ».

« » . , , , .


Scf:


, , (, ), , - , …
, , , , , json-, .

, . , , . , , ;)


Fesor:


… (shared memory )

Shared memory . , docker', ( inode ), . docker' : mmap volume' .


, docker , .


JPEG:


, : --theirs. :)

, , . , , . , .



Source: https://habr.com/ru/post/J277699/


All Articles