ドッカーエンジニア

Dockerでのエンジニアリングの方法

ほとんどすべてのチームには、1つの大陸(ヨーロッパまたは北米)にすべてのメンバー、または少なくともすべてのエンジニアがいます。 必要に応じて非同期で作業する方法はわかっていますが、すべてが同じタイムゾーンにあると、コラボレーションに役立ちます。
以下は、現在の慣行のスナップショットです。 私たちは完璧ではないことを知っています、そして何年にもわたって進化したばかりのいくつかのことがあり、私たちはもっとうまくやれることを知っています。 さらに、私たちは急成長している会社であり、今日うまく機能している慣行でさえ、サイズが2倍または3倍になると機能し続けません。 私たちはカイゼンを信じています—継続的な改善:私たちはさまざまな変更を実験してきましたが、今後もさらに実験していきます。

「Dockerのエンジニアリングチームは素晴らしく、非常に賢いエンジニアと仕事をする機会がありました。 ここでのユニークな点は、誰もが日常的に使用する製品に取り組んでいることであり、それが本物で魅力的な議論と革新的なアイデアにつながります。 人々はここで本当にテクノロジーに情熱を持っています。」
ガーリーン・セティ
シニアソフトウェアエンジニア
当社のエンジニアリングチーム
各チームは、Compose や Desktop Platform などの 1 つの領域を担当しています。 私たちは、コンポーネントやテクノロジーではなく、ビジネスドメインに焦点を当てるようにしていますが、過去には、機能を完成させるためにチーム間の複雑な調整につながる傾向があることがわかりました。
チームは、ドメイン、顧客、および優先順位に関する独自の理解に基づいて、四半期ごとに独自の目標を提案する責任があります。
私たちのチームの設計は、Manuel Pais と Matthew Skelton の著書『Team Topologies』に基づいています。あなたは彼らのウェブサイトを見ることができます teamtopologies.com 私たちが従うモデルの詳細については。

エンジニアリングチーム
アカウント
アカウント チームは、Docker と Docker Hub 全体でシームレスで安全なユーザーと組織の管理を保証します。
コンテンツコンシューマー
コンテンツ コンシューマー チームは、開発者が Docker イメージを見つけて使用し、最新の状態に保つのを支援することに専念しています。 チームは Docker Hub サービスを構築し、Docker Desktop に機能を提供しています。 彼らのスタックはReact(Typescript)と一緒に行き、TerraformとHelmを使用してAWS(EKS、Lambda)にデプロイします。
カスタマーサクセス
カスタマーサクセスチームは、顧客、開発者、およびその組織が、Dockerのツール、製品、および最新機能に正常かつ効果的にオンボードできるようにします。
Docker デスクトップ プラットフォーム
Docker デスクトップ プラットフォーム チームは、主にビルドや CI ファームなどの内部ツールを管理および改善することで、Docker Desktop を記述するチームにサービスを提供します。 また、Dockerデスクトップ内のインストールと更新のプロセスも管理します。 したがって、内部顧客 (Docker Desktop に貢献している他のチームの開発者) と外部顧客 (製品をインストールまたは更新するすべての Docker Desktop ユーザー) の両方が存在します。 このチームのエンジニアは、主にいくつかのC#とSwiftを使用してGoをプログラムし、Windows、Mac、Linuxで作業します。
インフラ
インフラストラクチャ チームは、世界最大のコンテナー イメージのライブラリである Docker Hub を含む、Docker Inc 全体の機能を強化するコンピューティング レイヤーを提供します。 私たちは、生のクラウドリソースを取得し、アプリケーションチームのために可用性の高いセルフサービスコンテナインフラストラクチャに成形します。 Docker製品、多数のオープンソースツール、クラウドサービス、およびそれらをバインドするために構築した自動化を使用しています。
請求
請求チームは、Dockerの製品内で、簡単な購入、信頼性の高い請求、適切なユーザー資格、および堅牢な支払いレポートを保証します。
ビジネスイネーブルメント
ビジネスイネーブルメントチームは、ビジネスユーザーが開発者によるDockerサブスクリプションの使用について安心し、情報を得ることができるように、可観測性と制御を提供します。
コンテンツ発行者
コンテンツ発行元チームは、Docker Images の発行元が、開発者が簡単に使用し、最新の状態に保つことができるコンテンツを作成できるよう支援することに専念しています。 彼らはDocker Verified PublisherとDockerが後援するオープンソースプログラムを実行しています。 主に Docker Hub サービスを構築して実行します。 彼らのスタックはReact(Typescript)と一緒に行き、AWS(EKS、ECS、Lambda)にデプロイします。
Docker Desktop
Dockerデスクトップは、当社のプラットフォームのコア部分の1つです。 これは、開発者がWindows、Mac、Linuxのいずれを使用している場合でも、オペレーティングシステムにシームレスに統合され、必要なすべてのコンテナツールをバンドルし、CLIとUIが含まれているコンテナを構築、共有、および実行するための環境を提供します。 Docker Desktop チームは、マルチコンテナー アプリケーションを実行するためのツールである docker compose も開発しています。 彼らは主にGoとReactで、いくつかのC#とSwiftで、そして3つのオペレーティングシステムすべてでコーディングします。
拡張 機能
Extensions チームは、Docker Desktop と将来的には Docker Hub を拡張するのに役立つ SDK と API を構築しています。 彼らは、Docker社内のチーム、パートナー、コミュニティと緊密に連携して、構築したツールで成功できるよう支援します。 チームは、作成したツールを使用して Docker の拡張機能も構築しています。 チームのスタックは主にGoとReact(Typescript)です。
記帳
レジストリ チームは、Docker Hub で利用可能なコンテナー イメージやその他のコンテンツのストレージと要求処理を担当します。 これには、毎秒最大5000リクエストを受信するため、何百万人ものユーザーがパフォーマンスの高い方法でサービスを高可用性にすることが含まれます。 ストレージに関しては、チームは Docker Hub のコンテンツを構成するペタバイト規模のバイナリ データと、関連するメタデータを管理します。 それらはオープンソースプロジェクトの配布に貢献します。 彼らのスタックはGoで、TerraformチャートとHelmチャートを使用してAWS(EKSとLambda)にデプロイします。
プロセスと会議
私たちは皆、スクラムのようなプロセスに従い、毎日スタンドアップを行い、2週間に1回、スプリントレビュー、ふりかえり、計画を行います。
多くの企業では、チームはチーム内でスプリントの成果のデモを行いますが、代わりに会社全体に対して行います。 完了した作業だけでなく、進行中の作業を示すことが奨励されています。
一部のチームでは、バックログをグルーミングしたり、アーキテクチャや技術的負債について議論したりするための追加の定期的な会議があります。 また、フロントエンドフォーラムなど、チーム間のコミュニティもいくつかあります。

私たちが存在してきた限り、私たちは長年にわたっていくらかの技術的負債を蓄積してきましたが、それを制御下に置くことの重要性を認識しています。 そのため、私たちは時間の 20%をテクノロジー債務の返済に費やすことを目指しています。 技術的負債の優先順位は、エンジニアによって決定され、何が彼らを最も遅くしているのかに焦点を当てています。
四半期に一度ハッカソンを開催し、テーマを設定し、エンジニアリングの全員、および社内の誰もがそのテーマに関するイノベーションのプロトタイピングに1日を費やします。 (私たちは、毎年のハックウィークや10%の時間など、他のさまざまな方法を試してきましたが、これは最も参加しているようです)。 もちろん、エンジニアからのアイデアも歓迎します:私たちは非常に実力主義的で非階層的であり、良いアイデアは誰からでも生まれ、製品に組み込まれる可能性があります。


「Dockerは、私が今まで参加した中で最高のチームです。 エゴ、挑戦的な問題、オープンなコラボレーション、そして他では見られないレベルの情熱と開発者への執着を共有するチームはありません。 ここの経営陣は私の個人的な成長を本当に気にかけており、私のチームはより良い人間とエンジニアになるために毎日私に挑戦しています。」
ジョシュ・ニューマン
プリンシパル・ソフトウェア・エンジニア
私たちが使用するツール
課題の追跡とスプリント計画には、Jira と GitHub を組み合わせて使用しています。Notionにスプリントボードを置くチームもあります。主にオープンソースリポジトリはGitHubを使用し、クローズドソースリポジトリはJiraを使用しますが、例外もあります。
CI では、Jenkins と GitHub Actions を組み合わせて使用します。当社のSaaSサービスはAWSベースです。

オンコール

ワークライフバランス
私たちは寛大な休暇手当を持っており、人々がそれらを使用することを期待しています。私たちはあなたに休暇を取り、リフレッシュして仕事の準備ができて戻ってきてほしいです!


「私が仕事をやめるとき、私はそれ以上求められません。 私の家族が私からのより多くのサポートを必要とするとき、私はそれを行うことができます。 Dockerは、人生が私を引きずり下ろし、不健康な仕事の習慣に私を押し付けないときに私をサポートします。 同僚、マネージャー、そして幹部まで、Dockerは私と私の家族全員を愛していると感じています。」
アレックス・ホカンソン
スタッフソフトウェアエンジニア
ドッカーエンジニアの活躍
DockerCon2021 では、スタッフ ソフトウェア エンジニアの Mark Higson 氏が「Beyond the UI: Docker の新しい HTTP API を使用したハンズオン コーディング」というプレゼンテーションを行いました。 講演の焦点は、Webサイト、デスクトップアプリ、CLIがすべてのユースケースをカバーできるわけではないということでした。 開発者が何か専門的なことを行う必要があるときは、APIに目を向けます。 Mark は、Docker の新しい API First 戦略が社内開発をどのように推進しているかについて説明し、それらを使用する実用的で現実的なコーディング演習を行いました。
Dockerのエンジニアの何人かは、2021年にDevoxxフランスで講演しました。 これはフランスで最大の開発者会議であり、Dockerエンジニアが当社を代表するためにそこにいました。 シニアソフトウェアエンジニアのGuillaume LoursはDockerfileのベストプラクティスについて話し、Yves BrissaudはPorterを使用したCloud Native Application Bundles(CNAB)の構築と使用について発表しました。
これらの講演(フランス語)の詳細と視聴は、Dockerブログでご覧いただけます。
エンジニアリングチームのメンバーになる

「Dockerが多様性とコラボレーションを奨励して新しいイノベーションを構築する方法が気に入っています。 エンジニアリングからマーケティングまで、すべての人のアイデアが開発者コミュニティのより良いエクスペリエンスの作成に貢献します。 自分の声が本当に重要だと感じています。」
パコ・バルベルデ
シニアデータエンジニア