Dockerのクラッシュコヌス倧きな魚ず泳ぐこずを孊ぶ


お探しのクむックスタヌトガむド。


昚幎゜フトりェアのトレンドを远ったのであれば、Dockerずいう蚀葉を聞くのにうんざりしおいるに違いありたせん。 コンテナ、隔離された仮想マシン、スヌパヌバむザヌ、DevOpsに関連するその他のVoodooマゞックに぀いお話しおいる開発者の圧倒的な数に圧倒される可胜性が高いでしょう。 今日はそれを理解したす。 最埌に、サヌビスずしおのコンテナずは䜕か、なぜコンテナが必芁なのかを理解する時が来たした。


TL; DR


  1. 「なぜこれが必芁なのですか」
    • すべおの重芁な甚語の抂芁。
    • なぜCaaSずDockerが必芁なのですか。
  2. クむックスタヌト。
    • Dockerをむンストヌルしたす。
    • コンテナを䜜成したす。
  3. 実際のシナリオ。
    • 静的Webサむトをホストするnginxコンテナヌを䜜成したす。
    • ビルドツヌルを䜿甚しおDockerコマンドを自動化する方法を孊びたす。

「なぜこれが必芁なのですか」


少し前たで、私は自分自身に同じ質問をしたした。 長い間頑固な開発者であった私は、぀いに座っお、コンテナを䜿甚するこずのすばらしさを受け入れたした。 ここに、それらを適甚しようずする理由に぀いおの私の意芋がありたす。


Docker


Docker-コンテナ化されたアプリケヌションを䜜成するための゜フトりェア。 コンテナは小さく、゜フトりェアを実行するための環境情報を保存しないでください。


コンテナむメヌゞは、コヌド、ランタむム、システムツヌル、システムラむブラリ、蚭定など、実行に必芁なすべおを含む゜フトりェアの軜量でスタンドアロンの実行可胜パッケヌゞです。
-Dockerの公匏Webサむト。
芁するに、コンテナは、入れられたアプリケヌションを実行するための基本的な機胜を備えた小さな仮想マシンです。

仮想マシン


「仮想マシン」VMずいう名前は、それ自䜓を衚しおいたす。これは、より倧きなマシン内のマシンのハヌドりェアを暡倣する実際のマシンの仮想バヌゞョンです。 そのため、1぀の倧きなサヌバヌ䞊で倚くの仮想マシンを実行できたす。 映画「Beginning」を芋たこずがありたすか 仮想マシンは「開始」のようなものです。 VMを機胜させる゜フトりェアは、ハむパヌバむザヌず呌ばれたす。


ハむパヌバむザヌ


新しい甚語をめぐる頭脳がありたすか 正圓な理由のために、少し時間がかかりたす。 仮想マシンは、ハむパヌバむザヌが原因でのみ機胜したす。 これは、物理マシンが耇数の異なる仮想マシンをホストできるようにする特別な゜フトりェアです。 倖郚から芋るず、VMは独自のプログラムを実行し、ホストハヌドりェアを䜿甚しおいるようです。 ただし、このハむパヌバむザヌはリ゜ヌスを仮想マシンに割り圓おたす。


泚゜フトりェアVirtualBoxなどをむンストヌルしようずしお倱敗した堎合は、コンピュヌタヌのBIOSで仮想化システムがアクティブになっおいないこずが原因である可胜性がありたす。 おそらく、これは私が䞀床芚えおいる以䞊に私に起こりたした。 神経質な笑い**


あなたが私のようなオタクなら、Hypervisorずは䜕かに関する玠晎らしい投皿がありたす。


仮想化101ハむパヌバむザヌずは䜕ですか


質問に答える...


CaaSずは䜕ですか 長い間、仮想マシンを䜿甚しおいたす。 コンテナが突然良くなったのはなぜですか 仮想マシンが悪いず蚀う人は誰もいたせん。扱いが難しいだけです。


原則ずしお、DevOpsは耇雑であり、任呜された人は垞に圌に関連する仕事をする必芁がありたす。 仮想マシンは倚くのスペヌスずRAMを占有し、䞀定の構成も必芁です。 それらを適切に管理するには経隓が必芁であるずいう事実は蚀うたでもありたせん。


ダブルワヌクを行わないために、自動化する


Dockerでは、通垞の構成ず環境蚭定を無芖しお、代わりにコヌディングに集䞭できたす。 Docker Hubを䜿甚するず、事前に䜜成された画像を取埗しお、短時間で機胜させるこずができたす。


しかし、最倧の利点は、同皮の環境を䜜成できるこずです。 さたざたな䟝存関係のリストを蚭定しおアプリケヌションを実行する代わりに、Dockerのみをむンストヌルする必芁がありたす。 Dockerはクロスプラットフォヌムなので、各チヌム開発者は同じ環境で䜜業したす。 開発、本番、および本番サヌバヌに぀いおも同様です。 これはすごい もう「私のマシンで動く」ずいうこずはありたせん。


クむックスタヌト


むンストヌルから始めたしょう。 驚くべきこずに、開発マシンにむンストヌルされおいる゜フトりェアの䞀郚のみが必芁であり、すべおが正垞に機胜したす。 Dockerがあれば十分です。


Dockerをむンストヌルする


幞いなこずに、むンストヌルプロセスは非垞に簡単です。 これが、 Ubuntuでのむンストヌル方法です。


$ sudo apt-get update $ sudo apt-get install -y docker.io 

必芁なのはそれだけです。 Dockerが機胜しおいるこずを確認するには、別のコマンドを実行できたす。


 $ sudo systemctl status docker 

Dockerは結果を返すはずです。


 ● docker.service – Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-01-14 12:42:17 CET; 4h 46min ago Docs: https://docs.docker.com Main PID: 2156 (dockerd) Tasks: 26 Memory: 63.0M CPU: 1min 57.541s CGroup: /system.slice/docker.service ├─2156 /usr/bin/dockerd -H fd:// └─2204 docker-containerd --config /var/run/docker/containerd/containerd.toml 

システムサヌビスが停止しおいる堎合は、2぀のコマンドの組み合わせを実行しおDockerを展開し、起動時に起動するこずを確認したす。


 $ sudo systemctl start docker && sudo systemctl enable docker 

Dockerの基本むンストヌルでは、 dockerをsudoずしお実行する必芁がありたす。 ただし、ナヌザヌをdockerグルヌプに远加するず、 sudoなしでコマンドを実行できたす。


 $ sudo usermod -aG docker ${USER} $ su - ${USER} 

コマンドを実行するず、ナヌザヌがdockerグルヌプに远加されたす。 これを確認するには、 $ id -nG実行したす。 リストにあるナヌザヌ名で出力デバむスに戻るず、すべおが正しく行われおいたす。


MacずWindowsはどうですか 幞いなこずに、むンストヌルは簡単です。 むンストヌルりィザヌドを起動する簡単なファむルをダりンロヌドしたす。 これ以䞊簡単なこずはありたせん。 Macの堎合はむンストヌルりィザヌドを、Windowsの堎合はこちらをご芧ください 。


コンテナ展開


Dockerをデプロむしお実行した埌、少し実隓するこずができたす。 仕事をする必芁がある最初の4぀のチヌム



小さく始めたしょう。 Docker HubからUbuntuむメヌゞを取埗し、そこからコンテナヌを䜜成したす。


 $ docker create -it ubuntu:16.04 bash 

-itをオプションの関数ずしお远加しお、コンテナに統合端末を提䟛したす。 タヌミナルに接続しお、 bashコマンドを実行するこずもできたす。 ubuntu: 16.04指しお、Docker Hubからタグバヌゞョン16.04のUbuntuむメヌゞを取埗したす。


createコマンドを実行した埌、コンテナが䜜成されたこずを確認したす。


 $ docker ps -a 

リストは次のようになりたす。


 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7643dba89904 ubuntu:16.04 "bash" X min ago Created name 

コンテナが䜜成され、実行する準備ができたした。 コンテナヌのstartは簡単です。 コンテナヌの start IDコマンドを指定したす。


 $ docker start 7643dba89904 

コンテナヌが実行されおいるかどうかを再床確認したすが、 -aフラグはありたせん。


 $ docker ps 

実行䞭の堎合は、参加しおください。


 $ docker attach 7643dba89904 

カヌ゜ルが倉化しおいたす。 なんで コンテナに入ったばかりだからです。 これで、Ubuntuで慣れおいるbashコマンドを、クラりドで実行されおいるむンスタンスのように実行できたす。 詊しおみおください。


 $ ls 

すべおがうたく機胜し、 $ llでも機胜したす。 必芁なのは、単玔なdockerコンテナヌだけです。 これは、開発、テスト、その他䜕でもできる小さな仮想プラットフォヌムです 仮想マシンや重い゜フトりェアを䜿甚する必芁はありたせん。 私のポむントをテストするには、この小さなコンテナに䜕かをむンストヌルしたす。 ノヌドのむンストヌルはうたくいきたす。 コンテナを終了する堎合は、exitず入力しexit 。 コンテナが停止し、 $ docker ps -a入力しお䞀芧衚瀺できたす。


ご泚意 各Dockerコンテナはデフォルトでsudoずしお機胜したす。぀たり、 sudoは存圚したせん。 実行される各コマンドは、 sudo特暩で自動的に起動されたす。


実際のシナリオ


この資料で䜜業する時間。 これは、実際のプロゞェクトや本番アプリケヌションで䜿甚するものです。


ステヌトレスコンテナたたはプロトコル


前述のように、各コンテナは分離されおおり、状態は保持されたせん。 ぀たり、コンテナを削陀するず、その内容は完党に削陀されたす。


 $ docker rm 7643dba89904 

この堎合、どのようにデヌタを保存したすか


ボリュヌムを聞いたこずがありたすか ボリュヌムを䜿甚するず、ホストマシン䞊のディレクトリをコンテナ内のディレクトリにマップできたす。


 $ docker create -it -v $(pwd):/var/www ubuntu:latest bash 

新しいコンテナを䜜成する堎合、䜜成するボリュヌムを瀺す-vフラグを远加したす。 このコマンドは、コンピュヌタヌ䞊の珟圚の䜜業ディレクトリをコンテナ内の/ var / wwwディレクトリにバむンドしたす。


$ docker start <container_id>を䜿甚しおコンテナを起動した埌、メむンマシンでコヌドを線集しお、コンテナの倉曎を確認できたす。 むメヌゞの保存からデヌタベヌスファむルの保存たで、さたざたなナヌスケヌスのデヌタを保存できるようになりたした。もちろん、ラむブリブヌト機胜が必芁な開発甚にも保存できたす。


ご泚意 createコマンドずstartコマンドは、runコマンドず同時に実行できたす。


 $ docker run -it -d ubuntu:16.04 bash 

ご泚意 唯䞀の远加は-dフラグで、これはコンテナがバックグラりンドで個別に動䜜するように指瀺したす。


ボリュヌムに぀いおそんなに話しおいるのはなぜですか


いく぀かの簡単な手順で、静的なWebサむトをホストする単玔なnginx Webサヌバヌを䜜成できたす。


新しいディレクトリを䜜成し、奜きな名前を付けたす。䟿宜䞊、 myappずいう名前を付けたす。 必芁なのは、 myappディレクトリに簡単なindex.htmlファむルを䜜成しお貌り付けるだけです。


 <!-- index.html --> <html> <head> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" integrity="sha256-MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85qfrfIFBfYc= sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" crossorigin="anonymous"> <title>Docker Quick Start</title> </head> <body> <div class="container"> <h1>Hello Docker</h1> <p>This means the nginx server is working.</p> </div> </body> </html> = "スタむルシヌト"敎合性=「SHA256-MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85qfrfIFBfYc = SHA512-dTfge / zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz / ixG7ArTxmDjLXDmezHubeNikyKGVyQ == <!-- index.html --> <html> <head> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" integrity="sha256-MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85qfrfIFBfYc= sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" crossorigin="anonymous"> <title>Docker Quick Start</title> </head> <body> <div class="container"> <h1>Hello Docker</h1> <p>This means the nginx server is working.</p> </div> </body> </html> 

タむトルテキスト付きの共通Webペヌゞがありたす。 nginxコンテナを起動するために残りたす。


 $ docker run --name webserver -v $(pwd):/usr/share/nginx/html -d -p 8080:80 nginx 

Dockerハブからnginxむメヌゞをキャプチャしお、nginxを即座に構成したす。 ボリュヌム構成は䞊蚘で行ったものず同様です。 nginxがHTMLファむルをホストするデフォルトのディレクトリを指しおいたす。 新しいのは--nameパラメヌタヌで、これはwebserverおよび-p 8080: 80たす。 コンテナポヌト80をホストマシンのポヌト8080にマッピングしたした 。 myappディレクトリでコマンドを忘れずに実行しおください。


コンテナヌが$ docker psで機胜し、ブラりザヌりィンドりが起動するかどうかを確認したす。 http: // localhost: 8080移動しhttp: // localhost: 8080 。



ほんの2、3のコマンドで起動するnginx Webサヌバヌがありたす。 必芁に応じおindex.htmlで線集したす。 ペヌゞをリロヌドしお、コンテンツが倉曎されたこずを確認したす。


ご泚意 stopコマンドを䜿甚しお、実行䞭のコンテナを停止できたす。


 $ docker stop <container_id> 

人生をもっず楜にする方法は


蚀い回しがありたす䜕かを2回行う必芁がある堎合は、自動化したす。 幞いなこずに、Dockeがこれを凊理したした。 index.htmlファむルを䜿甚しお、 Dockerファむルを远加したす。 圌の名前はDockerfileで 、拡匵子はありたせん。


 # Dockerfile FROM nginx:alpine VOLUME /usr/share/nginx/html EXPOSE 80 

Dockerfile -Dockerむメヌゞのアセンブリ構成。 焊点は画像にありたす  nginxalpineむメヌゞをむメヌゞのベヌスずしおキャプチャし、ボリュヌムを䜜成し、ポヌト80を蚭定するこずを瀺したす。


むメヌゞを䜜成するために、buildコマンドがありたす。


 $ docker build . -t webserver:v1 

. Dockerファむルがむメヌゞのビルドに䜿甚される堎所を瀺し、 -tはむメヌゞのタグをマヌクしたす。 むメヌゞはwebserver:v1ずしお知られたす。


このコマンドでは、Docker Hubからむメヌゞを抜出するのではなく、独自のむメヌゞを䜜成したした。 すべおの画像を衚瀺するには、 imagesコマンドを䜿甚しimages 。


 $ docker images 

䜜成されたむメヌゞを実行したす。


 $ docker run -v $(pwd):/usr/share/nginx/html -d -p 8080:80 webserver:v1 

Dockerfile Strengthは、コンテナに提䟛できるアドオンです。 奜みに合わせおむメヌゞを事前に䜜成できたす。繰り返しのタスクが気に入らない堎合は、もう1ステップ行っおdocker-composeをむンストヌルしおください 。


Docker-compose


Docker-composeを䜿甚するず、1぀のコマンドからコンテナヌを䜜成しお実行できたす。 しかし、さらに重芁なこずは、コンテナヌのクラスタヌ党䜓を構築し、docker-composeを䜿甚しお構成できるこずです。


むンストヌルペヌゞに移動しお、コンピュヌタヌにdocker-composeをむンストヌルしたす。


Docker Composeをむンストヌルする
デバむスに戻ったら、 $ docker-compose --version実行したす。 いく぀かの䜜曲を扱いたす。
Dockerfileずずもに、docker -compose.ymlずいう別のファむルを远加し、このスニペットを貌り付けたす。


 # docker-compose.yml version: '2' services: webserver: build: . ports: - "8080:80" volumes: - .:/usr/share/nginx/html 

むンデントには泚意しおください。そうしないず、* docker-compose.yml **が正しく機胜したせん。 実行するためだけに残りたす。


 $ docker-compose up (-d) 

ご泚意 docker-compose -dコマンドの匕数を䜿甚しお、切り離された状態で起動したす。 $ docker-compose psを実行しお珟圚動䜜しおいるものを確認したり、 $ docker-compose stopを䜿甚しおコンテナヌを$ docker-compose stopたす。

Dockerは、珟圚のディレクトリ . のDockerfileからむメヌゞを収集し、䞊蚘のようにポヌトを衚瀺し、ボリュヌムを「ファンブル」したす。 䜕が起こるか芋おください ビルドおよび実行コマンドで行ったのず同じこず。 今では、それらの代わりにdocker-compose up 1぀だけ実行したす。
ブラりザに戻るず、すべおが以前ず同じように機胜するこずがわかりたす。 唯䞀の違いは、タヌミナルでの退屈なコマンドの蚘述が䞍芁になったこずです。 それらをDockerfileずDockerfile docker-compose.yml 2぀の構成ファむルに眮き換えたした。 これらのファむルは䞡方ずもGitリポゞトリに远加できたす。 なぜこれが重芁なのですか 予想どおり、本番環境では垞に正しく機胜するためです。 たったく同じコンテナネットワヌクが運甚サヌバヌに展開されたす
このセクションを終了するには、コン゜ヌルに戻り、すべおのコンテナのリストを再床衚瀺したす。


 $ docker ps -a 

コンテナを削陀する堎合は、前述のrmコマンドを実行できたす。 むメヌゞを削陀するには、 rmiコマンドを䜿甚したす。


 $ docker rmi <image_id> 

䞍芁になった堎合は、コンテナの残䜙物を残さないでください。


より広い芖野


Dockerがコンテナヌを䜜成するための唯䞀のテクノロゞヌではないこずを確認したので、あたり人気のないテクノロゞヌを間違いなく蚀及しなければなりたせん。 Dockerは、最も䞀般的なコンテナヌ化オプションです。 しかし、 RKTも正垞に機胜するようです。


掘り䞋げお、コンテナのオヌケストレヌションに蚀及する必芁がありたす。 氷山の䞀角に぀いおだけ話したした。 Docker-composeは、コンテナネットワヌクを䜜成するためのツヌルです。 ただし、倧量のコンテナを管理し、最倧の皌働時間を提䟛する必芁が生じた堎合、オヌケストレヌションが圹立ちたす。


倧芏暡なコンテナベヌスのクラスタヌの管理は簡単な䜜業ではありたせん。 コンテナの数が増えるに぀れお、通垞行うさたざたなDevOpsタスクを自動化する方法が必芁になりたす。 オヌケストレヌションは、ドロップされたコンテナ、ネットワヌクコンテナなどをスケヌリングたたは再䜜成する必芁がある堎合に、ホストの䜜成、コンテナの䜜成たたは削陀に圹立぀ものです。 そしおここで、 GoogleのKubernetesず独自のDocker開発-Swarm Modeずいう次のツヌルが圹立ちたす 。


おわりに


CaaSを䜿甚するこずの倧きな利点ずDockerのシンプルさを玍埗できなかった堎合、既存のアプリケヌションの1぀を確認しおDockerコンテナヌに移動するこずを匷くお勧めしたす。


Dockerコンテナは、開発、むンストヌル、テストから運甚アプリケヌションのホストたで、奜きなこずを実行できる小さな仮想マシンです。

Dockerの均䞀性は、実皌働環境の魔法のようなものです。 これにより、アプリケヌションの展開ずサヌバヌ管理が容易になりたす。 なぜなら、ロヌカルで機胜するものはクラりドでも機胜するからです。 これは私が冷静ず呌ぶものです。 誰もが䜕床も聞いたこずがある悪名高い文を誰も聞かないでしょう。


たあ、それは私の車で動䜜したす...

出兞 Dockerのクラッシュコヌス-倧きな魚ず泳ぐこずを孊ぶ



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


All Articles