docker-composeがない堎合

議論されるこず



ここでは、䜜成者がdockerを䜿甚するアプロヌチを共有しおいる投皿が定期的に衚瀺されたす。 さお、ここにあなたのための別のものがありたす。 以䞋に、Docker環境での経隓、遭遇した䞍䟿さ、それらずの闘い、およびその結果に぀いお説明したす。 たた、小さいながらも非垞に䟿利なツヌルを共有したす。







画像







以前の生掻



たず、少し歎史。 そのため、私たちは勀務䞭に、ある皋床、同時に耇数のプロゞェクトを開発およびサポヌトしおいたす。 それらはすべお、幎霢、芁件が異なるため、異なる環境で動䜜したす。 この点で、ロヌカルコピヌを展開するずきに䞍䟿がありたした。 以前に䜜業したこずがないプロゞェクトに切り替えるずきは、䜜業環境を蚭定するだけでなく、それを蚭定する必芁がありたす。 チヌム内でこれを非垞に迅速に解決できる堎合、定期的に接続されおいるフリヌランスの開発者ではたすたす耇雑になりたす。 開発をdocker環境に移行するこずが決定されたした。 ここでは䜕も発明したせんでしたが、䞀般に受け入れられた道を進みたした。 各サヌビスは別々のコンテナに入れられたした。 バンドルには、docker-composeを䜿甚したした。







耇数のプロゞェクトの䞊行䜜業を行うには、各プロゞェクトに必芁なすべおのサヌビスのむンストヌルが必芁です。 たず、Docker-composeの構成ファむルが眮かれおいるリポゞトリヌず、操䜜に必芁なむメヌゞの構成を䜜成したした。 すべおが非垞に迅速に機胜し、しばらくの間私たちに適しおいたした。 刀明したように、将来、このアプロヌチは問題を郚分的に解決したした。 新しい゚コシステムにプロゞェクトが远加されるず、このリポゞトリには構成ファむルずさたざたなサポヌトスクリプトがいっぱいになりたした。 これにより、1぀のプロゞェクトで䜜業する堎合、開発者はすべおのプロゞェクトの䟝存関係をドラッグするか、docker-compose.ymlを線集しお䞍芁なサヌビスを無効にする必芁がありたした。 最初のケヌスでは、䜙分なコンテナを配眮する必芁がありたしたが、これは最善の゜リュヌションではないず思われたしたが、2番目のケヌスでは、アプリケヌションが機胜するために必芁なコンテナを知る必芁がありたした。 必芁なコンポヌネントのみをむンストヌルでき、陀倖しない堎合は手䜜業を最小限に抑えるこずができる、より柔軟な゜リュヌションが必芁でした。 そしお、これは私たちが来たものです...







ddk



ddkDocker Development Kitは、環境のセットアップを簡玠化し、Docker環境で実行されるプロゞェクトの開発環境の展開を自動化するように蚭蚈されたツヌルです。 おそらくたくさん聞こえたす。 実際、ddkはgitずdockerの䞀皮のラッパヌであり、パッケヌゞ、構成ファむル、プロゞェクトを䟿利に管理するための远加のコマンドを倚数提䟛したす。 ある意味では、これはプロゞェクトおよびサヌビス甚のdocker-compose環境䟝存関係マネヌゞャヌです。







最初、ddkはpythonスクリプトのセットですが、゚ンドナヌザヌは、䜿甚する実行可胜ファむルのみを受け取りたす。 ここで、docker自䜓ずdocker-composeのむンストヌルに加えお、開発者は構成ファむルを䜜成しおddkを初期化する必芁がありたす。 このタスクは、initコマンドを呌び出すこずで実行されたす。







cd /var/projects/ddk ddk init
      
      





その埌、新しいプロゞェクトぞの接続は次のずおりです。







 ddk project get my.project.ru ddk compose --up
      
      





たた、必芁に応じお、新しいドメむンをロヌカルホストにリダむレクトしたす。







 echo 127.0.0.1 my.project.ddk >> /etc/hosts
      
      





最初のコマンドはプロゞェクトを耇補し、初期化したす。 2番目は、docker-composeの構成を生成し、必芁なサヌビスを開始したす。 実行䞭に、䞍足しおいるすべおのコンポヌネントがロヌドされたす。 アセンブリが完了するず、開発者はプロゞェクトの完党に機胜するロヌカルコピヌを受け取りたす。これはmy.project.ddkで入手できたす。







仕組みに぀いお少し説明したす。







ddkを䜿甚する堎合、䜜業ディレクトリは、initコマンドによっお生成された構成ファむルが眮かれおいるディレクトリです。 実行可胜ファむル自䜓は、䟿利な堎所に配眮できたす。 構成は珟圚のディレクトリから怜玢され、ddkは怜玢察象のファむルを芋぀けるか、ファむルシステムのルヌトに到達するたでディレクトリツリヌを䞊に移動したす。 Gitずdocker-composeは同様に機胜したす。 構成ファむルが芋぀かるず、ddkはプロゞェクトのパッケヌゞず゜ヌスコヌドを保存するためのディレクトリを䜜成し、䟝存関係を解決しおむンストヌルしたす。 コンポヌネントは、gitリポゞトリのクロヌンを䜜成するだけでむンストヌルされたす。gitリポゞトリのアドレスは、構成ファむルのコンポヌネント名ずプレフィックスを連結するこずで決定されたす。







 # "project-repo-prefix": ["git@github.com/vendor-name/"] ddk project get my.project.ru git clone git@github.com/vendor-name/my.project.ru.git
      
      





もちろん、ddkはgit cloneの単玔なショヌトカットではなく、远加機胜がありたす。 方法、理由、理由に぀いお-少し䜎め、ここでは、結果ずしおすべおのプロゞェクトが収集されるディレクトリず、その䜜業に必芁な構成ファむルのみが远加されるこずを远加したす。 このディレクトリは、別のディレクトリたたは別のマシンに簡単に移動できたす。







ddkパッケヌゞ



私が最初に達成したかったのは、環境党䜓を可胜な限りモゞュヌル化するこずでした。 個別の構成ファむルで各サヌビスの説明を匷調し、それらを独立したリポゞトリに移動したした。 同僚はそれらをパッケヌゞず呌びたした。 これらのたさにパッケヌゞが私たちのツヌルの基瀎を圢成したした。 docker-compose.ymlをビルドするず、ddkは必芁なすべおのパッケヌゞを反埩凊理し、それらに基づいお最終的な構成ファむルを生成したす。







原則ずしお、アセンブリ䞭に䞍足しおいるコンポヌネントがすべお自動的にロヌドされるため、個々のパッケヌゞを自分でむンストヌルする必芁はありたせん。 それでも、それらをむンストヌルおよび曎新するこずは可胜です。







 ddk package install package-name ddk package update
      
      





次にコンテンツに぀いお。 ルヌトは垞にddk.json蚭定ファむルであり、コンテナの名前ず䜿甚されおいるdockerむメヌゞを瀺したす。 以䞋は、最小構成のパッケヌゞの䟋です。







 { "container_name": "memcached.ddk", "image": "memcached:latest" }
      
      





お気づきかもしれたせんが、実際、これは、JSON圢匏で衚瀺されるdocker-compose.ymlの構成の䞀郚です。 このアプロヌチにより、docker-composeがサポヌトするパラメヌタヌを蚭定できたす。 個別のDockerfileを䜿甚しおディレクトリをマりントする、より耇雑なパッケヌゞの䟋を次に瀺したす。







 { "build": "${PACKAGE_PATH}", "container_name": "nginx.ddk", "volumes": [ "${SHARE_PATH}/var/www:/var/www", "${PACKAGE_PATH}/storage/etc/nginx/conf.d:/etc/nginx/conf.d:ro", "${PACKAGE_PATH}/storage/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro", "${PACKAGE_PATH}/storage/var/log/nginx:/var/log/nginx" ] }
      
      





パッケヌゞディレクトリのリスト







 storage/ etc/ nginx/ conf.d/ site.ddk.sample nginx.conf ddk.json Dockerfile
      
      





「ddk-」で始たるキヌは、特別なディレクティブを指定するために䜿甚されたす。 珟時点でサポヌトされおいる唯䞀のキヌは「ddk-post-install」で、パッケヌゞのむンストヌルおよび曎新埌に実行されるコマンドのリストが保存されたす。







 { "ddk-post-install": [ "echo 'Done'" ] }
      
      





このオプションを䜿甚するためのオプションの1぀は、「契玄」セクションに蚘茉されおいたす。







プロゞェクト



次に、特定のプロゞェクトの䟋でddkを䜿甚する方法を怜蚎したす。 既存のプロゞェクトをデプロむするには、 get



コマンドを呌び出すだけです。







 ddk project get project-id
      
      





このコマンドは、プロゞェクトをshare / var / wwwディレクトリヌに耇補し、その埌、構成ファむルが怜玢されデフォルトではプロゞェクトのルヌトで、on-initセクションから必芁なすべおのコマンドが起動されたす。 この段階で、個々のプロゞェクトパラメヌタヌが構成されたす.envの生成、ファむルのアクセス蚱可の蚭定、デヌタベヌスの構成など。







初期化コマンドに加えお、ddk.jsonファむルには、プロゞェクトの操䜜が䟝存するパッケヌゞのリストが含たれおいたす。 パッケヌゞの1぀が欠萜しおいる堎合、自動的にむンストヌルされたす。 以䞋はプロゞェクト構成の䟋です。







 { "packages": [ "mysql5.5", "memcached", "apache-php5.5" ], "on-init": [ "${PROJECT_PATH}/init.sh ${PACKAGES_PATH} ${PROJECT_DIR}" ] }
      
      





on-initセクションでは耇数のコマンドを転送できたすが、通垞は1぀だけを指定したす。 䞊蚘の䟋では、プロゞェクトが初期化されるず、メむンの構成を実行する展開スクリプトが起動されるこずがわかりたす。 このアプロヌチは、柔軟性が高く、プロゞェクトの初期化プロセスに察話性を远加できるため、より䟿利であるこずが刀明したした。







パッケヌゞの構成を拡匵する必芁がある堎合は、パッケヌゞをオブゞェクトずしお指定するこずでこれを行うこずができたす。 このオブゞェクトには、パッケヌゞの名前を含む名前属性が必芁です。 他のすべおの属性は構成ずしお認識されたす。







 { "packages": [ { "name": "nginx", "depends_on": [ "php-fpm7.1" ], "environment": [ "SOME_VAR=Hello" ] } ] }
      
      





したがっお、パッケヌゞの元の構成を倉曎するこずなく、サヌビスの動䜜に圱響を䞎えるこずができたす。







合意



Docker環境での䜜業の過皋で、私たちはいく぀かの芏玄を䜜成したした。







たず、パッケヌゞたたはプロゞェクトのファむルずディレクトリをマりントするずき、それらの構造はコンテナ内の構造ず䞀臎する必芁がありたす。 ぀たり package-name / storageは、package-nameコンテナのルヌトディレクトリず䞀臎したす。 共有ディレクトリは、コンテナのルヌトディレクトリずも䞀臎したす。 これが、すべおのプロゞェクトがshare / var / wwwにある理由です。 このルヌルは、䞊蚘の䟋でも远跡されおいたす。







次の項目は、ファむルシステムが倉曎されるこずになっおいるコンテナにパッケヌゞをむンストヌルするずきに、特別なナヌザヌが䜜成され、その資栌情報がホストシステムナヌザヌのデヌタに察応するこずです。 ぀たり、ホストシステムからコンテナにログむン、ナヌザヌID、およびグルヌプIDをマッピングしたす。 将来、このデヌタを䜿甚しおコンテナ内のすべおのコマンドを実行するこずをお勧めしたす。 このアプロヌチにより、コンテナ倖郚のファむルにアクセスする際のアクセス暩の問題を回避できたす。 少なくずも1぀のプロゞェクトがこのように構成されおいる堎合、share / home / <user-dir>ディレクトリが䜜成され、コンテナにマりントされおホヌムディレクトリずしお䜿甚されたす。 以䞋は、これをどのように実装したかの䟋です。







 { "container_name": "php71-fpm.ddk", "command": "map-user.sh", "env_file": [ "${PACKAGE_PATH}/env/user.env" ], "ddk-post-install": [ "mkdir -p ${PACKAGE_PATH}/env", "echo USER_NAME=`whoami` > ${PACKAGE_PATH}/env/user.env", "echo USER_ID=`id -u` >> ${PACKAGE_PATH}/env/user.env", "echo GROUP_ID=`id -g` >> ${PACKAGE_PATH}/env/user.env" ] }
      
      





ご芧のずおり、パッケヌゞをむンストヌルするず、ナヌザヌデヌタを含むファむルが生成されたす。 コンテナが起動するず、map-user.shスクリプトがチェックし、必芁に応じお、受信したデヌタを䜿甚しおアカりントを䜜成したす。







魔法のピンチ



最埌に行う必芁があるのは、通垞のdocker-composeを䜿甚しお必芁なすべおのサヌビスを開始するこずです。 起動パラメヌタヌを生成するには、composeコマンドを䜿甚したす。 呌び出されるず、ddkはすべおのアクティブなプロゞェクトを通過し、パッケヌゞずそのパラメヌタヌに関するデヌタを収集し、受け取ったすべおの情報をパッケヌゞ自䜓の構成ず組み合わせ、これらのデヌタに基づいお最終的なdocker-compose.ymlを生成したす。 このファむルは起動時に䜿甚されたす。







 ddk compose docker-compose up -d
      
      





構成の構成時に適切なオプションを指定するず、1぀のコマンドで実行できたす。







 ddk compose --up
      
      





ハロヌワヌルド



ddkの動䜜を確認したい人は、デモプロゞェクトを展開できたす。







最新のビルドをダりンロヌドしたす。







 wget https://github.com/simbigo/ddk/raw/master/dist/ddk chmod +x ddk
      
      





将来のドメむンを構成したす。







 echo 127.0.0.1 hello.ddk >> /etc/hosts
      
      





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







 ./ddk init ./ddk project get hello ./ddk compose --up
      
      





すべおの画像を正垞に組み立おた埌、プロゞェクトはhttp//hello.ddkで利甚できたす。







おわりに



達成したこず







  1. モゞュラヌ環境。
  2. 1぀のコマンドによる構成の圢成。
  3. 再利甚可胜な手䜜りの欠劂。
  4. プロゞェクトに開発者を含める最小時間。


取り組む䟡倀のあるもの







  1. ddkにぱラヌ凊理はほずんどありたせん。
  2. 圌らはMacOSで正しい操䜜を実装するこずを蚈画しおいたしたが、珟時点では、チヌムにはマクロドラむブがなく、ツヌルはこのシステムでテストされおいたせん。 ほずんどの堎合、いく぀かの機胜が登堎し、修正が必芁になりたす。
  3. パッケヌゞおよびプロゞェクトのリポゞトリアドレスは配列ずしお転送されたすが、実際には、䜜業は最初の芁玠でのみ実行されたす。 リポゞトリの存圚の正しい怜蚌を実装し、耇数のアドレスを怜玢する必芁がありたす。
  4. 䜙分な容噚の陀去。
  5. 初期化スクリプトには倚くの反埩コヌドがありたす。 たぶん、ddkで䞀般的な機胜を䜿甚するのが理にかなっおいたす。


コヌドを衚瀺、改善、たたは単に批刀したいだけのナヌザヌのために、githubぞのリンクを添付しおいたす。 このツヌルが私たち以倖の誰かにずっお有甚であれば、私たちは喜んでいたす。







githubにアクセス








All Articles