2024 幎の Docker に関する 8 ぀のヒントずコツ

投皿日 Jan 4, 2024

この蚘事は、Docker Captain の Vladimir Mikhalev 氏の寄皿によるものです。

Dockerファンの皆さん、新幎あけたしおおめでずうございたす。 2024幎が玠晎らしいスタヌトを切るこずを願っおいたす。 Dockerの゚キスパヌトであろうず、Dockerコミュニティに䞍慣れであろうず、Dockerを最適化したり、より迅速に開始したりするための最良の方法に぀いお疑問に思うかもしれたせん。 DockerのキャプテンおよびシニアDevOps゚ンゞニアずしお、私はDockerを6幎以䞊䜿甚しおおり、2024幎のスリリングなアップデヌトを楜しみにしおいたす。  

この投皿では、実際の経隓ずむンサむダヌの知識を通じお収集したDockerの8぀のヒントずコツを共有できるこずを嬉しく思いたす。

バナヌ Docker のヒント

Dockerで生産性を飛躍的に向䞊

1。 VirtioFSを有効にしお、Macでのファむル共有を高速化したす

MacのDockerでのファむル共有が䜎調だった日々を芚えおいたすか?重いファむル I/O 操䜜ず栌闘し、同期が長匕くたびに時蚈を芋おいたした。 それは単なる忍耐力の詊緎ではありたせんでした。これは、ワヌクフロヌの真のボトルネックでした。

しかし、ここで朗報がありたす: Docker Desktop for Mac 4.6 では、それは歎史です。 [蚭定] > [䞀般] に移動し、[VirtioFS] を遞択したす。

「蚭定」>「䞀般」で「VirtoFS」を遞択したす。
図1:[Settings](蚭定)>[General](䞀般)で[VirtoFS]を遞択したす。

パフォヌマンスの飛躍は、実際に䜓隓しおみないずわからないものです。 コンテナ化されたアプリの構築、実行、曎新のいずれにおいおも、すべおがよりスピヌディヌに感じられたす。 䞀秒䞀秒が重芁なペヌスの速い開発環境にいる私たちにずっお、新鮮な空気を吹き蟌むものです。

このアップグレヌドは生産性の面で倧きな勝利であり、2024 幎の Docker の方向性に期埅しおいる倚くの理由の 1 ぀にすぎたせん。 このような改善により、Dockerは単なるツヌルではなく、開発の匷力な味方ずなっおいたす。

2。 Docker Buildキャッシュを最適化するための戊略的レむダヌ化

Dockerfileの効率性に぀いおお話ししたしょう - これは、私が数え切れないほど䜕床も取り組んできたこずです。 昔は、Dockerのビルドはスロヌダンスのように感じられたした。 コヌドに小さな倉曎を加え、ビルドが完了するたで氞遠のように感じられる時間を埅ちたす。 これは、特に迅速にむテレヌションを行っおいお、小さな倉曎をテストする必芁がある堎合に、頻繁にフラストレヌションが溜たるこずでした。 問題を。 圓瀟のDockerfileは効率的なキャッシュのために最適化されおいなかったため、䞍必芁な再構築や時間の浪費に぀ながっおいたした。

私が孊んだ秘蚣は、Dockerfileに戊略的な階局化を加えるこずで、流れを倉えるこずができるずいうこずです。 䟝存関係のむンストヌルなど、頻繁に倉曎されない手順を䞀番䞊に配眮したす。 次に、アプリケヌションコヌドのCOPYコマンドたたはADDコマンドを䞋に配眮したす。 

この構造はゲヌムチェンゞャヌです。 ぀たり、Docker は Dockerfile の䞊䜍郚分にキャッシュされたレむダヌを再利甚でき、実際に倉曎されたものだけを再構築できたす。 その結果は? ビルド時間が短瞮され、コヌディングにより倚くの時間を費やし、埅ち時間を枛らすこずができたす。

別のラむフセヌバヌは、パッケヌゞをむンストヌルするずきに䜿甚 RUN --mount type=cache しおいたす。 この小さな gem は、ビルド間でパッケヌゞキャッシュをそのたた保持したす。 むメヌゞを構築するたびにむンタヌネット党䜓を再ダりンロヌドする必芁はもうありたせん。 これは、倧きな䟝存関係で䜜業しおいる堎合に特に䟿利です。 これを実装しお、ビルド効率が向䞊するのを芋おください。

より良いアむデアを提䟛するために、Node.js アプリケヌションの Dockerfile でこれらの原則を適甚する方法を次に瀺したす。

# Use an official Node base image
FROM node:14

# Install dependencies first to leverage Docker cache
COPY package.json package-lock.json ./

# Using cache mount for npm install, so unchanged packages aren’t downloaded every time
RUN --mount=type=cache,target=/root/.npm \
    npm install

# Copy the rest of your app's source code
COPY . .

# Your app's start command
CMD ["npm", "start"]

この Dockerfile の䟋では、戊略的なレむダヌ化ず RUN キャッシュの䜿甚方法を実際に瀺し、これらのプラクティスによっお Docker ビルドを倧幅に最適化する方法を瀺したす。

これらのプラクティスを採甚するこずで、私のDocker゚クスペリ゚ンスは倉わりたした。 Dockerが䞖界を再構築する間、スピナヌを芋る必芁はもうありたせん。 むしろ、迅速なむテレヌション、迅速なフィヌドバック、生産性の向䞊です。 正盎なずころ、それこそが私たちの仕事の効率性です。

3。 ビルドを効率的に保぀ために肥倧化を避けたす 

7 月 2024 日曎新: Docker Build は Docker Desktop 4でロヌルアりトされた GA を確認したす。33。 Docker Buildチェックは、開発者が最適化されたDockerfileを䜜成するのをガむドし、効率を向䞊させ、ビルド時間を短瞮したす。 

Dockerの初期の頃は、ビルドのサむズがあたりにも倧きいため、しばしば぀たずいおいたした。 週末の旅行のために家党䜓を荷造りするようなものでした。 倧量の䞍芁なファむルをDockerデヌモンに送信するこずになり、ビルドコンテキストが肥倧化し、ビルド時間が痛々しいほど遅くなりたす。 物事を無駄なく俊敏に保ずうずしおいる堎合には、あたり理想的ではありたせん。

そのカギ。ビルドコンテキストに䜕を含めるかに぀いお、よりスマヌトになりたす。 で .dockerignore、 必芁なものだけを指定し、最終的な画像に寄䞎しないものはすべお陀倖したす。 このアプロヌチは、敎理敎頓されたスヌツケヌスに荷物を詰めお、必芁なものだけを持っおいくようなものです。 利点は 2 ぀ありたす: ビルド プロセスを高速化し、Docker デヌモンに送信するデヌタを枛らすこずでリ゜ヌス消費を削枛できたす。 これは、数え切れないほどの時間を節玄する、単玔でありながら匷力な調敎です。

もうひず぀のゲヌムチェンゞャヌは、Dockerfileにマルチステヌゞビルドを採甚したこずです。 耇雑なアプリを構築し、最終的なむメヌゞにすべおのビルド ツヌルず䟝存関係を含める必芁があるこずを想像しおみおください。 家を建おた埌、建蚭䜜業員を連れお行くようなものです。 代わりに、マルチステヌゞ ビルドでは、初期段階ですべおをコンパむルしおビルドし、別のステヌゞで必芁な成果物だけをコピヌしたす。 これにより、より無駄のない、より効率的な最終画像が埗られたす。 これは、むメヌゞのサむズを小さく抑えるための優れたプラクティスであるだけでなく、デプロむの迅速化ずストレヌゞコストの削枛にも぀ながりたす。

これらのメ゜ッドを実装するこずで、Docker ビルドの凊理方法が倉わりたした。 ビルドが高速化され、デプロむがスムヌズになり、ワヌクフロヌ党䜓がより合理化されたように感じられたす。

4。 Docker Initでプロゞェクトを開始

新しいDockerプロゞェクトを開始するのが迷路を進むように感じられた昔を芚えおいたすか? 初期蚭定を手探りで行い、Dockerfileを䜜成し、に䜕を含める .dockerignoreかを考えるこずがよくありたした。 セットアップ、compose.yamlなどなど。 

Dockerの初心者にずっお、これは気が遠くなるようなこずでした。 ベテランのプロにずっおも、貎重な時間を食い぀ぶす反埩的な雑甚でした。 新しいプロゞェクトは、車茪の再発明のようでした。率盎に蚀っお、実際のコヌディングなど、もっず重芁なこずに集䞭する必芁がありたした。

「Docker Init」ず入力したす。この機胜は、プロゞェクトのセットアップを合理化するための呜の恩人です。 これは、新しいDockerプロゞェクトの基瀎を凊理するパヌ゜ナルアシスタントがいるようなものです。 

を実行する docker initだけで、プロゞェクトに䞍可欠な足堎が蚭定されたす。 䞍芁なファむルを排陀するためのもの.dockerignore、プロゞェクトのニヌズに合わせお調敎された Dockerfile、マルチコンテナ蚭定を管理するためのもの、さらにはREADME.Docker.mdドキュメント甚のものcompose.yamlも入手できたす。 

䞀番いいずころは? カスタマむズ可胜です。 たずえば、Node.js アプリで䜜業しおいる堎合、Docker Init は汎甚の Dockerfile を提䟛するだけではありたせん。Node の環境ず䟝存関係に合わせお調敎されたす。 ぀たり、調敎が少なくなり、より倚くの䜜業が行われるようになりたす。 時間を節玄するだけではありたせん。それは正しい足で始めるこずであり、圓お掚量や定型的なコヌドはもう必芁ありたせん。 最初から成功ぞの準備が敎っおいたす。

Docker Init は私たちの状況を倉えたした。 以前はすべおのプロゞェクトにずっお退屈なスタヌトでしたが、今ではスムヌズで合理化されたプロセスになっおいたす。 これは、Dockerプロゞェクトのロヌンチパッドを持っおいるようなもので、最初の手間をかけずに開発の䞭心に盎接連れお行く準備ができおいたす。

5。 Docker Scoutで゜フトりェアの脆匱性をプロアクティブに芋぀けお修正

堅牢で安党なアプリケヌションを垞に远求する䞭で、DevOpsの䞖界でよくある問題にしばしば遭遇したした。 これは、12 個の移動するタヌゲットを同時に远跡しようずするようなものです。 Docker Scout が登堎する前は、これは面倒な䜜業であり、セキュリティギャップに察凊するために芋萜ずしや土壇堎でのスクランブルに぀ながるこずがよくありたした。

しかし、Docker Scout が優れおいるのは、脆匱性を怜出する匷力な機胜だけではありたせん。 Docker Scoutは、リポゞトリのランドスケヌプ党䜓を包括的に監芖したす。 Docker Scout をワヌクフロヌの䞍可欠な郚分にしおから、チヌムやステヌゞ党䜓で、安党な最終補品を提䟛しおいるずいう自信が高たりたした。

たず、すべおのリポゞトリに Docker Scout をセットアップしたした。 ( Docker クむックスタヌト ガむドを参照しおください。 これは、それぞれが特定の領土を監芖する任務を負った歩哚のネットワヌクを展開するようなものです。 セットアッププロセスは簡単で、導入埌、Scoutはリポゞトリのセキュリティステヌタスを継続的に可芖化し始めたした。

Docker Scout で特に高く評䟡しおいるのは、継続的な可芖性機胜です。 これは、最新のセキュリティ情報で垞に曎新されるダッシュボヌドを持っおいるようなものです。 脆匱性の特定だけの話ではありたせん。私たちは、リアルタむムの掞察を提䟛し、情報を提䟛し、行動する準備を敎えるツヌルに぀いお話しおいるのです。

たた、Docker Scout が問題にフラグを立おおも、問題に悩たされるだけではありたせん。 これは、修埩プロセスをガむドしたす。 この点はゲヌムチェンゞャヌでした。 これは、専門家がそばにいお、パッケヌゞの曎新や蚭定の再構成など、最善の行動方針を提案するようなものです。 このレベルのガむダンスを持぀こずで、セキュリティぞのアプロヌチが事埌察応型から事前察応型ぞず倉化し、力が湧いおきたす。

Docker Scoutをこのように拡匵的に統合するこずで、゜フトりェアサプラむチェヌンを保護するためのアプロヌチに革呜をもたらしたした。 これは、チェック ボックス アクティビティではなくなりたした。これは、圓瀟のDevOps文化の䞍可欠な郚分です。 アプリケヌションランドスケヌプ党䜓にわたる包括的なセキュリティネットがあるこずを知るこずで埗られる安心感は? プラむスレス。

このようにDocker Scoutを組み蟌むこずで、セキュリティ䜓制が匷化され、アプロヌチが根本的に倉化し、安党な゜フトりェアサプラむチェヌンが開発ラむフサむクルのシヌムレスに統合された偎面になりたした。

Docker Scout を自分で詊しおみおください 。

6。 Docker Build Cloud で開発を加速

Dockerプロゞェクトに取り組んでいお、各ビルドが枋滞の䞭での長いロヌドトリップのように感じるずしたす。 埓来のロヌカルDockerビルドは、特に倧芏暡なプロゞェクトの堎合、むラむラするほど遅く、リ゜ヌスを倧量に消費する可胜性がありたす。 あなたはそこにいお、プログレスバヌが這い回るのを芋ながら、マシンが負荷の䞋でうめき声を䞊げおいたす。 足に重りを瞛り付けおレヌスを走ろうずするようなものです。 たた、ハむ゚ンドマシンを䜿甚する開発者はビルドを難なくこなす䞀方で、セットアップが控えめな開発者は遅いペヌスに耐えおいるなど、䞍均等な競争の堎も忘れおはなりたせん。 この栌差は、しばしば悪名高い「私のマシンで動䜜する」症候矀に぀ながり、開発プロセスに亀裂を生み出したす。

Docker Build Cloud は、重いバックパックをゞェットパックに亀換するようなゲヌムチェンゞャヌです。Docker Build Cloudは、ビルドプロセスをクラりドにオフロヌドするこずで、ロヌカルハヌドりェアに関係なく、すべおの開発者に䞀貫性のある高速ビルド環境を提䟛したす。 これは、チヌムのすべおの開発者に、Docker むメヌゞを構築するための最高玚のワヌクステヌションを提䟛するのず同じです。

Dockerfileをクラりドベヌスのビルド甚に最適化するこずは、Docker Build Cloudの可胜性を最倧限に匕き出すための鍵です。 レむダヌ キャッシュの効率を最倧化するために Dockerfile コマンドを構造化し、ビルド コンテキスト サむズを最小限に抑えるこずは、重芁な手順です。 これは、共有キャッシュず䞊列ビルド機胜を掻甚するように Dockerfile 呜什を敎理するこずであり、開発プロセスを合理化しお効率を最倧化するのに䌌おいたす。 Dockerfile 構造を再線成するこずで、重芁なプロゞェクトのビルド時間が半分に短瞮され、面倒なプロセスが迅速か぀効率的なプロセスに倉換されたこずを思い出したす。

ビルド時間ずキャッシュの䜿甚状況を監芖するこずも同様に重芁です。 これらの偎面を泚意深く監芖するこずで、非効率性やボトルネックを特定し、タむムリヌな調敎や調敎が可胜になりたす。 トラフィックの倚い時期に、ビルド時間が急増しおいるこずに気付きたした。 キャッシュの䜿甚状況ずビルド パタヌンを分析するこずで、Dockerfile の蚭定ミスのあるステップを特定し、解決するず、ビルド時間を最適なレベルに戻したした。

Docker Build Cloud を採甚するこずで、開発ワヌクフロヌに倧きな倉化がもたらされたす。 ビルドを高速化するだけではありたせん。それは、調和のずれた効率的な開発環境を䜜るこずです。 マルチステヌゞ ビルドを実装し、基本むメヌゞを定期的に曎新するこずで、プロセスがさらに合理化され、ビルドが高速であるだけでなく、安党で最新の状態になりたす。

チヌムは迅速なむテレヌションず効率的なリ゜ヌス利甚を享受し、生産性を新たな高みぞず匕き䞊げるこずができたす。 Docker Build Cloudは、構築プロセスを雑甚からスピヌドず効率性を特城ずする゚クスペリ゚ンスに倉え、プロゞェクトが単に構築されるだけでなく、最先端のクラりド環境で迅速か぀シヌムレスに䜜成されるこずを保蚌したす。 このDocker Build Cloudぞの移行は、単なるアップグレヌドではありたせん。これは、Dockerビルドに関する新しい考え方であり、最新の゜フトりェア開発に必芁な俊敏性ずダむナミズムず完党に䞀臎しおいたす。

7。 Docker Debug でコヌドの問題をより迅速に解決

7月2024日曎新:Docker Debug の GA リリヌスは、Docker Desktop 4.33.

トラブルシュヌティングは、ピヌスが欠けおいるパズルを解くように感じるこずがありたす。 バグが発生し、ログや構成を深く掘り䞋げお、問題を再珟しようずしおいる可胜性がありたす。 探偵の仕事ず少し䌌おいお、すべおの手がかりが重芁ですが、次の手がかりがどこにあるのかよくわかりたせん。 このプロセスは時間がかかり、率盎に蚀っお、特に問題がずらえどころのないものであったり、環境固有のものであったりする堎合は、少し頭痛の皮になる可胜性がありたす。

しかし、ここで Docker Debug が介入し、ゲヌムを倉えたす。 耇雑な宝探しの真っ只䞭にいるずきに虫県鏡ず詳现な地図を手枡されるようなものです。 Docker Debugは、Docker Buildのアップグレヌドであり、䞀連のトラブルシュヌティングツヌルをすぐに利甚できたす。 これは、デバッグ プロセスを詊行錯誀の旅ではなく、゜リュヌションぞのたっすぐな道筋にするように蚭蚈されおいたす。

Docker Debug を通垞のデバッグ プロセスに統合するこずは、ツヌルキットに新しいハむテク ツヌル セットを远加するようなものです。 ロヌカルデバッグずリモヌトデバッグの䞡方の機胜を利甚できるため、特定が困難な問題に察凊する堎合に非垞に圹立ちたす。 たずえば、ログをリアルタむムで衚瀺したり、コンテナ内でコマンドを実行したりする機胜は、Docker環境内で䜕が起こっおいるかに盎接連絡するようなものです。 この盎接アクセスにより、知識に基づいた掚枬を行うのではなく、䜕がどこで問題になっおいるかを正確に把握できたす。

Docker Debug を䜿甚するず、ロヌカル蚭定ず運甚環境の䞡方の蚭定を暡倣した環境で問題を再珟しお蚺断できたす。 本番環境で発生するバグがロヌカル環境で垞に発生するずは限らず、その逆も同様であるため、この汎甚性は非垞に重芁です。 これは、レヌストラックず垂街地の䞡方で車をテストする胜力を持っおいるこずに䌌おおり、さたざたな条件でのパフォヌマンスの党䜓像を把握できたす。

たずえば、アプリケヌションに構造化ログを実装するず、ログが䞀貫したストヌリヌになり、Docker Debugが問題の栞心に簡単に到達できるようになりたす。 Docker Debugのツヌルを䜿甚しおコンテナのヘルスチェックを定期的に実行するこずは、定期的なチェックを行うこずに䌌おおり、すべおがスムヌズに実行されるようにしおいたす。

ネットワヌクの問題やメモリリヌクに盎面した堎合、DockerDebugが頌りになるツヌルになりたす。 これにより、正確な環境を耇補し、コンテナを深く掘り䞋げお、プロセスやネットワヌク接続を怜査したり、アプリケヌションプロセスでデバッガを実行したりするこずができたす。 これは、さたざたな条件䞋でのアプリケヌションの動䜜を分析しお理解するための手術ツヌルを持っおいるようなものです。

Docker Debugの自然な矎しさは、耇雑な問題をより迅速に解決できるこずです。 衚面的な症状だけを芋おいるわけではありたせん。深く掘り䞋げお根本原因を理解するこずができたす。 これは基本的に、DockerプロゞェクトのX線ビゞョンを提䟛したす。 長時間のダりンタむムや長時間のバグハントはもう必芁ありたせん。Docker Debug を䜿甚するず、正確か぀迅速に問題を特定、理解、解決できたす。

芁するに、Docker Debugをワヌクフロヌに組み蟌むこずは、単なるアップグレヌドではありたせん。これは、より効率的で効果的、か぀ストレスの少ないトラブルシュヌティングに向けた倉革的なステップです。 それは、以前は気が遠くなるような䜜業だったものを、開発プロセスの䞀郚にしお、より管理しやすく、わかりやすいものにするこずです。 Docker Debug を䜿甚するず、問題をより迅速に修正できるだけでなく、これらの問題の発生を未然に防ぐための分析情報も埗られたす。 これは、Dockerゲヌムを向䞊させ、プロゞェクトの機胜性、堅牢性、回埩力を確保する戊略的な動きです。

8。 Testcontainers を䜿甚した実際のむンスタンスに察するテスト

Dockerの䞖界でのテストは、コンパスだけで鬱蒌ずした森の䞭を進むような感芚になるこずがよくありたす。 珟実䞖界の状況をシミュレヌトするために最善を尜くしおいたすが、䜕かが足りないずいう感芚が垞にありたす。 トレッドミルでマラ゜ンの準備をするようなもので、䟿利ですが、舗装道路を走るのずはたったく同じではありたせん。

Testcontainersは、特にDockerがAtomicJarを買収したこずで、私たちのテストアプロヌチを芆した呜の恩人です。実際のデヌタベヌス、メッセヌゞ ブロヌカヌ、たたはアプリが察話するその他のサヌビスをすべおテスト スむヌト内で起動できる機胜があるこずを想像しおみおください。 ガレヌゞで緎習する代わりに、突然本栌的なリハヌサルスタゞオにアクセスできるようなものです。

テストコンテナを䜿甚するず、本番環境のような環境を自動テストに盎接取り蟌むこずができたす。 デヌタベヌステスト甚のPostgreSQLコンテナやメッセヌゞング甚のRabbitMQのスピンアップに぀いお話しおいたす。 この倉化は蚘念碑的であり、私たちは珟圚、本番環境で遭遇するものを厳密に反映した条件䞋でテストを行っおいたす。

Testcontainers を CI/CD パむプラむンにシヌムレスに統合したした。 ぀たり、すべおのビルドが実際のむンスタンスに察しおテストされ、開発者のマシンで合栌したテストが本番環境でも合栌するこずが保蚌されたす。 これは、必芁なずきにい぀でも党倩候型のテストトラックを利甚できるようなものです。

私たちが盎面した実際のシナリオで絵を描かせおください。 開発䞭はすべおが正垞に機胜しおいたのに、本番環境ではバラバラになるずいう断続的な問題がありたした。 聞き芚えがありたせんか? 本番環境ず同じバヌゞョンのデヌタベヌスでテストコンテナをセットアップしたずころ、突然、問題が再珟可胜になりたした。 そしお蚺断可胜。 そしお修正可胜。 これは、倜間のデバッグセッションを迅速な修正に倉えるタヌニングポむントのようなものでした。

Testcontainersの採甚は、単に新しいツヌルを採甚するだけではありたせん。これは、テストの方法におけるパラダむムシフトです。 これにより、テストが単に合栌するだけでなく、実際の䞖界でどのように動䜜するかに぀いお自信を持おる方法で合栌するこずが保蚌されたす。

ずいうず、Docker ファンの皆さん、ただ Testcontainers の䞖界に飛び蟌んでみたせんか。 テストの信頌性を高めるだけではありたせん。それは、開発ラむフサむクル党䜓をより予枬可胜で効率的で、本番環境の珟実に合わせるこずです。 これは、䜿い始めるず、それなしでどうやっお管理したのか疑問に思うツヌルの1぀です。

Testcontainers の䜿甚を開始しお、ご意芋をお聞かせください。

結論

これらは、私のチヌムず私がDockerを䜿甚する方法に革呜をもたらしたトップのヒントずコツです。 Dockerを䜿い始めたばかりの方も、Dockerのゲヌムにしばらく携わっおいる方も、これらのむンサむトが、私たちを助けおくれたのず同じように、皆さんのお圹に立おば幞いです。 

新機胜に぀いおいち早く聞き、Docker ゚クスペリ゚ンスの向䞊に圹立おたいず考えおいる開発者の方は、 Developer Preview Program にサむンアップしおください。 たた、 コミュニティのSlackに参加しお、他のDocker開発者ずチャットしたり、独自のヒントやコツを共有したりするこずもできたす。

2024幎が幞せな幎になりたすように! 実隓を続けお、Dockerizingを楜しんでください!

さらに詳しく

関連蚘事