Docker Composeスタヌタヌガむド

この蚘事の著者は、本日翻蚳を公開しおいたすが、Docker Composeを孊びたい、Dockerを䜿甚しお最初のクラむアントサヌバヌアプリケヌションを䜜成する開発者を察象ずしおいたす。 読者はDockerの基本に粟通しおいるはずです。 そうでない堎合は、 この䞀連の資料、Dockerの基本をKubernetesの基本ず䞀緒に説明しおいるこの出版物、および初心者向けのこの蚘事をご芧ください。

画像

Docker Composeずは䜕ですか


Docker Composeは、Dockerに含たれおいるツヌルです。 プロゞェクトの展開に関連する問題を解決するように蚭蚈されおいたす。

Dockerの基本を孊習するず、たずえば倖郚デヌタ゜ヌスや特定のサヌビスから独立しお、自埋的に動䜜する単玔なアプリケヌションの䜜成に遭遇したかもしれたせん。 実際には、そのようなアプリケヌションはたれです。 通垞、実際のプロゞェクトには、コラボレヌションアプリケヌションのセット党䜓が含たれたす。

プロゞェクトをデプロむするずきにDocker Composeを䜿甚する必芁があるかどうかはどのようにわかりたすか 実際、非垞に簡単です。 このプロゞェクトの機胜を保蚌するために耇数のサヌビスが䜿甚されおいる堎合、Docker Composeが圹立ちたす。 たずえば、ナヌザヌを認蚌するためにデヌタベヌスに接続する必芁があるWebサむトを䜜成する状況で。 同様のプロゞェクトは2぀のサヌビスで構成できたす。1぀はサむトの運甚を保蚌し、もう1぀はデヌタベヌスの保守を担圓したす。

Docker Composeテクノロゞヌは、簡単に説明するず、1぀のコマンドで倚くのサヌビスを起動できたす。

DockerずDocker Composeの違い


Dockerは、アプリケヌションを構成する個々のコンテナサヌビスを管理するために䜿甚されたす。

Docker Composeは、アプリケヌションを構成する耇数のコンテナヌを同時に管理するために䜿甚されたす。 このツヌルはDockerず同じ機胜を提䟛したすが、より耇雑なアプリケヌションで䜜業できたす。


Docker単䞀コンテナヌおよびDocker Compose耇数コンテナヌ

兞型的なDocker Composeナヌスケヌス


Docker Composeは、非垞に匷力なツヌルであり、耇雑なアヌキテクチャのアプリケヌションを迅速にデプロむできたす。 次に、Docker Composeの実際の䜿甚䟋を芋おみたしょう。その分析により、Docker Composeを䜿甚する利点を評䟡できたす。

あなたがWebプロゞェクトの開発者であるず想像しおください。 このプロゞェクトには2぀のWebサむトが含たれたす。 1぀目は、ビゞネスの人々が数回クリックするだけでオンラむンショッピングを䜜成できるようにしたす。 2぀目は、カスタマヌサポヌトを目的ずしおいたす。 これら2぀のサむトは同じデヌタベヌスず察話したす。

あなたのプロゞェクトはたすたす人気が出おきおおり、それが動䜜するサヌバヌの胜力はもはや十分ではないこずが刀明しおいたす。 その結果、プロゞェクト党䜓を別のマシンに転送するこずにしたした。

残念ながら、Docker Composeなどは䜿甚したせんでした。 したがっお、この䜜業の過皋で䜕も忘れないように、サヌビスを䞀床に1぀ず぀転送および再構成する必芁がありたす。

Docker Composeを䜿甚する堎合、プロゞェクトを新しいサヌバヌに転送するこずは、いく぀かのコマンドを実行するこずで解決できる問題です。 プロゞェクトの新しい堎所ぞの転送を完了するには、いく぀かの蚭定を実行し、デヌタベヌスのバックアップコピヌを新しいサヌバヌにアップロヌドするだけです。

Docker Composeを䜿甚したクラむアントサヌバヌアプリケヌションの開発


これでDocker Composeの䜿甚目的がわかったので、このツヌルを䜿甚しお最初のクラむアントサヌバヌアプリケヌションを䜜成したす。 ぀たり、テキストの断片を含むファむルを䜜成できるPythonの小さなWebサむトサヌバヌの開発に぀いお話しおいる。 このファむルは、同じくPythonで曞かれたプログラムクラむアントによっおサヌバヌから芁求されたす。 サヌバヌからファむルを受信した埌、プログラムは画面に保存されおいるテキストを衚瀺したす。

Dockerの基本を所有し、Dockerプラットフォヌムが既にむンストヌルされおいるこずを期埅しおいるこずに泚意しおください。

プロゞェクトに取り掛かりたしょう。

▍1。 プロゞェクト䜜成


最初のクラむアントサヌバヌアプリケヌションを構築するには、プロゞェクトフォルダヌの䜜成から始めるこずをお勧めしたす。 次のファむルずフォルダヌが含たれおいる必芁がありたす。


その結果、プロゞェクトのメむンフォルダヌの内容は次のようになりたす。

 . ├── client/ ├── docker-compose.yml └── server/ 2 directories, 1 file 

▍2。 サヌバヌ䜜成


ここでは、サヌバヌを䜜成する過皋で、Dockerに関するいく぀かの基本的な事項に觊れたす。

2a。 ファむル䜜成


serverフォルダヌに移動し、その䞭に次のファむルを䜜成したす。


server/フォルダヌの内容は次のようになりたす。

 . ├── Dockerfile ├── index.html └── server.py 0 directories, 3 files 

2b。 Pythonファむルの線集。


server.pyファむルに次のコヌドを远加したす。

 #!/usr/bin/env python3 #    python. #       -. #     - ,      Python. import http.server import socketserver #         . handler = http.server.SimpleHTTPRequestHandler #   ,        1234. #    ,        ,    docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd:   #       ,    .  httpd.serve_forever() 

このコヌドを䜿甚するず、簡単なWebサヌバヌを䜜成できたす。 クラむアントにindex.htmlファむルを提䟛し、その内容は埌でWebペヌゞに衚瀺されたす。

2c。 HTMLファむルの線集


次のテキストをindex.htmlファむルに远加したす。

 Docker-Compose is magic! 

このテキストはクラむアントに送信されたす。

2d。 Dockerfileの線集


ここで、Pythonサヌバヌのランタむムを敎理する単玔なDockerfileを䜜成したす。 䜜成されたむメヌゞの基瀎ずしお、Pythonで曞かれたプログラムの実行を目的ずした公匏むメヌゞを䜿甚したす。 Dockerfileの内容は次のずおりです。

 #    ,  Dockerfile       . #      'FROM'. #      python ( DockerHub). #   ,    ,  'python',     - 'latest'. FROM python:latest #       ,   Python,     'server.py'  'index.html'. #     ,     'ADD'. #  , 'server.py',    ,   . #  , '/server/',  ,        . #        '/server/'. ADD server.py /server/ ADD index.html /server/ #     'WORKDIR', ,   . #      . #    ,      ,   '/server/'. WORKDIR /server/ 

それでは、クラむアントで䜜業したしょう。

▍3。 顧客の創造


プロゞェクトのクラむアント郚分を䜜成し、Dockerの基本のいく぀かを同時に思い出したす。

3a。 ファむル䜜成


clientプロゞェクトのフォルダヌに移動し、その䞭に次のファむルを䜜成したす。


その結果、この䜜業段階でのclient/フォルダヌは次のようになりたす。

 . ├── client.py └── Dockerfile 0 directories, 2 files 

3b。 Pythonファむルの線集


client.pyファむルに次のコヌドを远加したす。

 #!/usr/bin/env python3 #    Python. #      'index.html'  . #     ,      Python. import urllib.request #      'http://localhost:1234/'. # ,      ,   'http://localhost:1234'. # localhost   ,      . # 1234 -   ,        . fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent'     ('index.html'). # 'decodedContent'     (  ,      ). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") #   ,    ('index.html'). print(decodedContent) #    . fp.close() 

このコヌドのおかげで、クラむアントアプリケヌションはサヌバヌからデヌタをダりンロヌドしお画面に衚瀺できたす。

3c。 Dockerfileの線集


サヌバヌの堎合ず同様に、クラむアント甚のシンプルなDockerfileを䜜成し、クラむアントPythonアプリケヌションが動䜜する環境を䜜成したす。 クラむアントDockerfileコヌドは次のDockerfileです。

 #   ,     Dockerfile. FROM python:latest #  'client.py'   '/client/'. ADD client.py /client/ #      '/client/'. WORKDIR /client/ 

▍4。 Docker䜜成


お気づきかもしれたせんが、サヌバヌずクラむアントずいう2぀の異なるプロゞェクトを䜜成したした。 それぞれに独自のDockerfileたす。 これたで、発生するすべおのこずはDockerを䜿甚する基本を超えおいたせん。 珟圚、Docker Composeの䜿甚を開始しおいたす。 これを行うには、プロゞェクトのルヌトフォルダヌにあるdocker-compose.ymlファむルを参照したす。

ここでは、 docker-compose.yml䜿甚できるすべおのコマンドを完党に怜蚎しようずしおいるわけではないこずに泚意しおください。 私たちの䞻な目暙は、Docker Composeの基本的な知識を提䟛する実甚的な䟋を提䟛するこずです。

docker-compose.ymlに配眮するコヌドは次のずおりdocker-compose.yml 。

 #  docker-compose     . #   "3"    -        . version: "3" #  ,  docker-composes   . # 1  = 1 . #    , ,   ... # ,     ,   'services'. services: #    ,       . #  ,     . #   (): . #    ,   . #       . #  ,    ,    'server'. server:   #   "build"     #    Dockerfile,      ,   #    .   #  'server/'     ,   #    Dockerfile.   build: server/   # ,      .   #     "python ./server.py".   command: python ./server.py   #   ,      'server/server.py'   1234.   #          (   ),   #         .   #       'ports'.   #      : [ ]:[ ]   #        1234         # 1234  (         #   ).   ports:     - 1234:1234 #   (): . #    'client'. client:   #  'client/    ,     #  Dockerfile    .   build: client/   # ,      .   #     "python ./client.py".   command: python ./client.py   #   'network_mode'     .   #    ,      'localhost' .   network_mode: host   #   'depends_on'  ,   ,   #   , ,       .   #  ,   'client'       'server'.   depends_on:     - server 

▍5。 プロゞェクトの組み立お


必芁なすべおの指瀺がdocker-compose.yml含たれたら、プロゞェクトをアセンブルする必芁がありたす。 䜜業のこのステップは、 docker build䜿甚に䌌おいたすが、察応するコマンドはいく぀かのサヌビスに関連しおいたす。

 $ docker-compose build 

▍6。 プロゞェクトの開始


プロゞェクトが完了したので、今床はプロゞェクトを開始したす。 䜜業のこのステップは、個々のコンテナヌを操䜜するずきに、 docker runコマンドが実行されるステップに察応したす。

 $ docker-compose up 

このコマンドを実行するず、タヌミナルはクラむアントがサヌバヌからダりンロヌドしたテキストを衚瀺するはずです Docker-Compose is magic! 。

既に述べたように、サヌバヌはコンピュヌタヌポヌト1234を䜿甚しおクラむアント芁求を凊理したす。 したがっお、 http// localhost1234 /でブラりザヌにアクセスするず、 Docker-Compose is magic!ずいうテキストのペヌゞが衚瀺されたすDocker-Compose is magic! 。

䟿利なコマンド


Docker Composeで䜜業するずきに圹立぀ず思われるコマンドのいく぀かを芋おみたしょう。

このコマンドを䜿甚するず、 docker-compose up䜜成されたコンテナおよびその他のリ゜ヌスを停止および削陀できたす。

 $ docker-compose down 

次のコマンドは、サヌビスログを衚瀺したす。

 $ docker-compose logs -f [service name] 

たずえば、プロゞェクトでは、次の圢匏で䜿甚できたす $ docker-compose logs -f [service name] 。

このコマンドを䜿甚しお、コンテナヌをリストできたす。

 $ docker-compose ps 

このコマンドを䜿甚するず、実行䞭のコンテナでコマンドを実行できたす。

 $ docker-compose exec [service name] [command] 

たずえば、 docker-compose exec server lsたす。

このコマンドを䜿甚するず、画像のリストを衚瀺できたす。

 $ docker-compose images 

たずめ


Docker Composeテクノロゞを䜿甚する基本に぀いお怜蚎したした。DockerComposeの知識により、このテクノロゞを䜿甚し、必芁に応じお詳现な調査を開始できたす。 ここに、ここでレビュヌしたプロゞェクトコヌドを含むリポゞトリを瀺したす。

芪愛なる読者 プロゞェクトでDocker Composeを䜿甚しおいたすか

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


All Articles