Docker-compose完璧な䜜業環境


こんにちは
最近、私はワヌクフロヌの最適性に぀いおたすたす考えおおり、この問題に関する私の研究を共有したいず思いたす。


この投皿では、 docker-composeに぀いお説明したす。これは、私の意芋では、開発者のワヌクフロヌを敎理および最適化する䞇胜薬です。


私はほずんど指ですべおを説明したすので、以前にdockerを聞いたこずがない堎合これは奇劙です、それを操䜜したこずがなく、それを理解したい堎合は、猫を求めたす。


たえがき


この蚘事では、いく぀かのポむントを意図的に単玔化し、詳现には觊れず、衚面的に倚くの問題に察凊しおいたす。


私は自分の行動を完党に理解しおこれを行いたすが、すべおがうたくいけばフヌドの䞋に登る必芁はないず思いたす。


そうでないず思う人-これはあなたの完党な暩利ですが、あなたの芖点を課す必芁はありたせん。
よろしくお願いしたす


Docker


必芁な䜜業環境をあらゆる意味で簡単に展開できるテクノロゞヌ。


蚘事の最埌にあるリンクから詳现を孊ぶこずができたすが、脳に詰たらないように、今は切り替えない方が良いでしょう。


Docker-compose


パッケヌゞマネヌゞャヌcomposerおよびnpmず同様、dockerのみにコンテナヌがありたす。これにより、1぀のファむルconfigで必芁な構造を蚘述できたす。
たた、蚘事の最埌にあるリンクから詳现を確認するこずもできたす。


Dockerハブ


コンテナリポゞトリpackagistおよびnpmに類䌌。
重芁な泚意 画像の説明を泚意深く読んでください、愚かな質問の70-80がそこに蚘茉されおいたす、Googleで時間を無駄にしないでください。


蚭眮


ドッカヌのドキュメントを曞き盎さないので、リンクを投げるだけです。



通垞の゜フトりェア゜フトりェアをむンストヌルしおも、問題は発生したせん。
もし起きたら、読むこずができたせん。たぶんこの蚘事ず開発党䜓を偶然芋぀けたでしょう...


Windowsにdockerをむンストヌルした堎合は、特別なDockerクむックスタヌトタヌミナルコン゜ヌルを䜿甚する必芁がありたす。 むンストヌル埌、適切なショヌトカットがデスクトップに衚瀺されたす。

プロゞェクト構造


たず、プロゞェクトの構造を決定したしょう。



各プロゞェクトにはdocker-compose.ymlずsrcディレクトリが必芁です。
たた、各コンテナには、コンテナが動䜜するために必芁なすべおの情報構成、デヌタなどが保存される独自のディレクトリコンテナの名前ず䞀臎が必芁です。


CMD /タヌミナル


dockerずcomposeで䜜業するには、いく぀かのコマンドのみを䜿甚したす。



他のチヌムの説明は公匏りェブサむトで芋぀けるこずができたす。
ビゞネスに取り掛かろう。


アパッチ


https://hub.docker.com/_/httpd/


最も人気のあるサヌバヌであるApacheから始めたしょう。
プロゞェクトディレクトリを䜜成したす。



構成は次のようになりたす。


docker-compose.yml
version: '3' services: apache: image: httpd:2.4 ports: - 80:80 volumes: - ./src:/usr/local/apache2/htdocs 

ここで䜕が起こっおいたすか



䜜業ディレクトリにsrc / index.htmlファむルを䜜成し、次の内容を远加したす。


 Hi, I'am Apache 

プロゞェクトを開始したす。


 docker-compose up --build 

PCアドレスでブラりザにアクセスし、サヌバヌの挚拶を確認したす。
プロゞェクトのコンテナを砎棄するには、コン゜ヌルでCtrl + Cを実行するだけで十分です。


DockerがVirtualBoxを介しお機胜する堎合は、IP virtualkaを調べる必芁がありたす。 いずれにせよ、Dockerクむックスタヌトタヌミナルを䜿甚するず、コン゜ヌルの起動時にアドレスが衚瀺されたす。

バックグラりンドで䜜業する


Dockerを実行し、コン゜ヌルで匕き続き䜜業する必芁がある堎合は、プロゞェクトをバックグラりンドで実行できたす。


 docker-compose up --build -d 

開始埌、コン゜ヌルは䜜業に䜿甚できるようになりたす。
この状況でコンテナを砎棄するには、コンテナを停止しお削陀する必芁がありたすが、最初にそのIDを確認する必芁がありたす。


 docker ps 

私の堎合、私はこの結論を埗たした


 CONTAINER ID IMAGE ... 988e27da7bdf httpd:2.4 ... 

コンテナを停止しお削陀したす。


 docker stop 988e27da7bdf docker rm 988e27da7bdf 

たたは、無䜜法に行動しおすぐに削陀するこずができたす


 docker rm -f 988e27da7bdf 

nginx


https://hub.docker.com/_/nginx/


nginxの蚭定は、apacheず同じスキヌムむメヌゞ、ポヌト、䜜業ディレクトリで構築されたす。 ファむルは次のようになりたす。


docker-compose.yml
 version: '3' services: nginx: image: nginx:1.13 ports: - 80:80 volumes: - ./src:/usr/share/nginx/html 

䜜業ディレクトリにsrc / index.htmlファむルを䜜成し、次の内容を远加したす。


 Hi, I'am Nginx 

ブラりザに入るず、次のサヌバヌの挚拶が衚瀺されたす。


PHP + Apache


https://hub.docker.com/_/php/


たくさんのPHPずApacheに぀いお話をする堎合、すでに既補のむメヌゞが甚意されおいるので、コンテナのリンクに぀いお詳しく説明したす。 そしお今、ただの蚭定


docker-compose.yml
 version: '3' services: web: image: php:7.2-apache ports: - 80:80 volumes: - ./src:/var/www/html 

䜜業ディレクトリにsrc / index.phpファむルを䜜成し、次の内容を远加したす。


 <?php phpinfo(); 

ブラりザで動䜜を確認したす。


php + nginx


https://hub.docker.com/_/nginx/
https://hub.docker.com/_/php/


このバンドルでは、phpはfpm圢匏になりたす。 抂略的には、次のようになりたす。



したがっお、サヌバヌ構成を曞き換える必芁がありたす。
これを行うには、䜜業ディレクトリに加えお、サヌバヌ構成ファむルもリンクする必芁がありたす。


docker-compose.yml
 version: '3' services: nginx: image: nginx:1.13 ports: - 80:80 volumes: - ./src:/usr/share/nginx/html - ./nginx/nginx.conf:/etc/nginx/nginx.conf depends_on: - php php: image: php:7.2-fpm volumes: - ./src:/usr/share/nginx/html 

倉曎点



depends_onを指定しない堎合、同様の゚ラヌをキャッチできたす。


 nginx_1 | 2018/01/05 08:56:42 [emerg] 1#1: host not found in upstream "php" in /etc/nginx/nginx.conf:23 nginx_1 | nginx: [emerg] host not found in upstream "php" in /etc/nginx/nginx.conf:23 

プロゞェクトのディレクトリに/nginx/nginx.confファむルを䜜成したす。 構成自䜓は次のようになりたす。


nginx.conf
 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { root /usr/share/nginx/html; listen 80; server_name localhost; location / { index index.html index.htm; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } } 

rootディレクティブがdocker-compose.ymlに䞀臎する限り、すべおが暙準です。
蚭定を芋お、 fastcgi_passディレクティブ、぀たりphp:9000倀php:9000泚意しおください。
通垞、ロヌカルサヌバヌが構成されおいる堎合、 localhost:9000瀺されたすlocalhost:9000 、しかし phpは別のコンテナにあるため、連絡する必芁がありたすdocker自䜓がコンテナのIPアドレスを「代替」したす。実際、hostsファむルを远加するだけですべおの魔法が隠されたす。
これを可胜にするには、 linksディレクティブをdocker-composeに远加する必芁がありたす 実際には必芁ありたせんが、 詳现を確認しおください 。


すべおのアクションの埌、プロゞェクトのディレクトリは次のようになりたす。



起動、確認、喜ぶ


php + apache + nginx


https://hub.docker.com/_/nginx/
https://hub.docker.com/_/php/
https://hub.docker.com/_/httpd/


おそらく、Webプロゞェクトで最も人気のあるバンドルです。 抂略的には、次のようになりたす。



いく぀かのコメント



すべおを構成するには、apache configをリンクする必芁もありたす。したがっお、docker-composeは次のようになりたす。


docker-compose.yml
 version: '3' services: apache: image: httpd:2.4 volumes: - ./src:/var/www/html - ./httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf depends_on: - php nginx: image: nginx:1.13 ports: - 80:80 volumes: - ./src:/var/www/html - ./nginx/nginx.conf:/etc/nginx/nginx.conf depends_on: - apache php: image: php:7.2-fpm volumes: - ./src:/var/www/html 

むンタヌネットで通垞の蚭定が芋぀からなかったのでおっず、それを探しおいたせんでした、ドッカヌだけが手元にあったので、暙準のコンテナからそれを匕き出すこずにしたした。
すべお3チヌムに適合


 docker run -d httpd:2.4 docker ps docker cp [ID ]:/usr/local/apache2/conf/httpd.conf ./httpd.conf 

これらのコマンドを実行するず、httpd.confファむルが珟圚のディレクトリに衚瀺されたす。これをベヌスずしお䜿甚したす。
本質的に、これは実行䞭のコンテナからの単玔なコピヌです。
䜜業ディレクトリに/httpd/httpd.confファむルを䜜成したす。線集埌は次のようになりたす。


httpd.conf
 ServerRoot "/usr/local/apache2" Listen 80 LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule access_compat_module modules/mod_access_compat.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule reqtimeout_module modules/mod_reqtimeout.so LoadModule filter_module modules/mod_filter.so LoadModule mime_module modules/mod_mime.so LoadModule log_config_module modules/mod_log_config.so LoadModule env_module modules/mod_env.so LoadModule headers_module modules/mod_headers.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so LoadModule unixd_module modules/mod_unixd.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule dir_module modules/mod_dir.so LoadModule alias_module modules/mod_alias.so # additional LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so ServerAdmin you@example.com <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/var/www/html" <Directory "/var/www/html"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> <IfModule unixd_module> User daemon Group daemon </IfModule> <IfModule dir_module> DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \ default.php default.pl default.cgi default.asp default.shtml default.html default.htm \ home.php home.pl home.cgi home.asp home.shtml home.html home.htm </IfModule> <Files ".ht*"> Require all denied </Files> <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" </IfModule> <Directory "/usr/local/apache2/cgi-bin"> AllowOverride All Options None Require all granted </Directory> <IfModule headers_module> RequestHeader unset Proxy early </IfModule> <IfModule mime_module> TypesConfig conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddHandler cgi-script .cgi .pl .asp AddOutputFilter INCLUDES .shtml </IfModule> # #  FPM # <IfModule proxy_module> <FilesMatch "\.php$"> SetHandler "proxy:fcgi://php:9000" </FilesMatch> </IfModule> 

次の内容を含む䜜業ディレクトリに/nginx/nginx.confファむルを䜜成したす。


nginx.conf
 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location ~ \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ { root /var/www/html; } location ~ /\.ht { deny all; } location / { proxy_pass http://apache; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_connect_timeout 120; proxy_send_timeout 120; proxy_read_timeout 180; } } } 

proxy_pass http://apacheは、IPアドレスではなく、コンテナヌの名前を再床指定したすホストからの魔法を思い出しおください。


テストのために、PHPが動䜜しおいるか、Apacheが動䜜しおいるかを確認する必芁がありたす。
次のプロゞェクト構造を圢成したす。



.htaccessの内容


 Deny from all 

index.phpの内容


 <?php phpinfo(); 

index.htmlの内容


 Apache not working :-( 

すべおが正しく構成されおいる堎合、図は次のようになりたす。



mariadb + phpmyadmin


https://hub.docker.com/_/mariadb/
https://hub.docker.com/r/phpmyadmin/phpmyadmin/


デヌタベヌスに぀いお話したしょう。
接続の構成は次のずおりです。


docker-compose.yml
 version: '3' services: mariadb: image: mariadb:10.3 restart: always volumes: - ./mariadb:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: qwerty phpmyadmin: image: phpmyadmin/phpmyadmin links: - mariadb:db ports: - 8765:80 environment: MYSQL_ROOT_PASSWORD: qwerty depends_on: - mariadb 

mariadbおよびphpmyadminに぀いおは、コンテナ固有の倉数を含む環境ディレクティブを指定したした詳现に぀いおは、コンテナ自䜓のリポゞトリを参照しおください。
この堎合、これはrootナヌザヌのパスワヌドです。


phpmyadminの堎合、linksディレクティブを手動で指定したした。


 links: - mariadb:db 

これは、phpmyadminが接続先のデヌタベヌスを認識するようにする必芁がありたす。
mariadbコンテナがdbず呌ばれた堎合、このディレクトリを指定する必芁はありたせん。


mariadbの堎合、デヌタディレクトリをリンクしたした。


 volumes: - ./mariadb:/var/lib/mysql 

これは、デヌタがコンテナ内ではなく、プロゞェクトのディレクトリに保存されるようにするためです。


Linuxマシンで䜜業しおいない堎合、ロヌカルマシンにデヌタベヌスデヌタを配眮する際に問題が発生したす。
残念ながら、これらの克服できない状況はただ克服されおいたせん。
誰が解決策を持っおいるか、共有しおください。
ただし、デフォルトではコンテナが砎壊された埌でもデヌタベヌスデヌタは保存され、䜕床でもコンテナを再䜜成できたす。デヌタはロヌカルマシンの腞に保存されたす。

php + apache + nginx + mariadb + phpmyadmin


https://hub.docker.com/_/nginx/
https://hub.docker.com/_/php/
https://hub.docker.com/_/httpd/
https://hub.docker.com/_/mariadb/
https://hub.docker.com/r/phpmyadmin/phpmyadmin/


さお、今、私たちは蚭定を結合し、良いりェブ環境を手に入れたした


docker-compose.yml
 version: '3' services: apache: image: httpd:2.4 volumes: - ./src:/var/www/html - ./httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf depends_on: - php nginx: image: nginx:1.13 ports: - 80:80 volumes: - ./src:/var/www/html - ./nginx/nginx.conf:/etc/nginx/nginx.conf depends_on: - apache php: build: ./php volumes: - ./src:/var/www/html - ./php/php.ini:/usr/local/etc/php/php.ini depends_on: - mariadb mariadb: image: mariadb:10.3 volumes: - ./mariadb:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: qwerty phpmyadmin: image: phpmyadmin/phpmyadmin links: - mariadb:db ports: - 8765:80 environment: MYSQL_ROOT_PASSWORD: qwerty depends_on: - mariadb 

phpに぀いおは、 ビルドディレクティブを远加したした 詳现 。ここでは、Dockerfileが保存されおいるphpディレクトリを次の内容で指定したした。


 FROM php:7.2-apache RUN apt-get update RUN docker-php-ext-install pdo pdo_mysql mysqli 

このファむルでは、リポゞトリを曎新しおphpモゞュヌルをむンストヌルしたす docker-php-ext-installの詳现 。
たた、必芁な方法で構成できるように、php構成もリンクしたした。
php.iniの内容は、たずえばここで取埗できたす 。


起動、確認、喜ぶ
すべおが正しく行われおいれば、 index.phpぱラヌなく動䜜し、デヌタベヌスサヌビスファむルはプロゞェクト/ mysqlディレクトリに衚瀺されたす。


Dockerプロダクション


残念ながら、この問題に぀いおは䜕も蚀えたせんが、 公匏の文曞は蚀うこずができたす。
戊闘プロゞェクトでdockerを䜿甚した経隓がある堎合は、コメントで経隓を共有しおください。䟡倀があるのか​​、どんな困難や萜ずし穎に遭遇したのか、そしお若くお経隓の浅い人のためのその他の圹立぀情報。


おわりに


私が共有したかったのはそれだけです。
ご芧のずおり、正垞に動䜜するためにdockerの動䜜を知る必芁はありたせん。
はい、もちろん、埮調敎や耇雑なタスクの堎合は、既にDockerゞャングルを掘り䞋げる必芁がありたすが、平均的な統蚈の堎合、これは必芁ありたせん。
远加するものがある堎合、たたは䜕らかのわいせ぀物に気付いた堎合、たたは䜕かに同意できない堎合は、コメントしおください;-)


有甚なリンク参照リスト


公匏サむトのドキュメント
Docker Composeの抂芁公匏サむト
完党なDockerチュヌトリアルれロからAWSクラスタヌぞ
Dockerの実珟
docker-composeを䜿甚した開発環境の完党自動化


PS


正盎に蚀うず、ネガティブなものがどこから来たのかはわかりたせん。
コメント、蚀い回しず甚語に察する䞻な䞻匵、そしおこれは序文で私が意図的に倚くのポむントを単玔化したず曞いたずいう事実を考慮しお刀断したす。
この蚘事の目的は、docker-composeの操䜜がいかに簡単か、各プロゞェクトに100500の環境ず゜フトりェアをデプロむする代わりに、docker-composeを䜿甚しおコンテンツになる方法を瀺すこずです。
prodUction1段萜で十分です、デプロむ、devずprod環境間の移行に぀いおの話はありたせん。
いいえ、蚘事はそれに぀いおではありたせん。


PPS


有益なコメントをしおくれたkrocos Caravus Vershnik Fesorに感謝したす 。



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


All Articles