現在、ディップさんに週1回程度お邪魔して、(個人の趣味で)定期的にコンテナに関する勉強会を開催しています。本記事では、コンテナに触ったことがない人に対して、コンテナ利用時のメリットを説明するための資料を公開します。ディップ社内ではPHPが利用している部署が多いので、PHPに関する記述が多いです。この記事でことわりがない場合、「コンテナ」は「Dockerコンテナ」を指します。コンテナ技術とコンテナイメージコンテナ技術とは、プロセスを隔離して実行するための技術です。コンテナイメージ(イメージ)とは、「アプリケーションコードと依存関係を一つにまとめたファイル」です。コンテナイメージを元に実行された、隔離されたプロセスになったものをコンテナと呼ばれます。https://www.docker.com/resources/what-containerVMとの違いVMは一つ一つにゲストOSが必要です。コンテナは、プロセスを隔離してHostOS上で動作させることができます。そのためオーバーヘッドや利用するリソースも少なく、高速に起動します。開発環境の構築がコードベースで行える開発開始までの時間が短いVMに比べてコンピュータリソースを有効活用できる既存の環境に影響を与えず、新しい環境を利用できる実際にプログラムをインストールしなくてよい以下の例では、PHPをインストールせず、PHP5.6とPHP7.3の各バージョンでPHPのコードを動かしています。どこで利用されているかわからないパッケージ/ライブラリを減らせるただし、Dockerやオーケストレーションツール(Kubernetesなど)に脆弱性が発見されることもあるFAQどういう原理で動くの?Linuxカーネルの機能を組み合わせて動きます。Windowsだと、Linuxカーネルの機能を小さくまとめたLinuxKitを動かしています。これまで覚えた知識は無駄になるの?無駄になりません。コンテナ間のネットワーク通信では、veth(バーチャルイーサネットデバイス)を用いて通信を実現しています。iptablesなどを駆使してコンテナ間の名前解決を行っています。伝統的な手法を仮想的に行っていることが多いので、トラブルシュートの際は、これまでの知識が必要になってきます。向いてないことはある?たとえば以下の場合は向いてません。複雑なモノリスアプリケーションDockerは1プロセスごとにコンテナを分けることが推奨されます。そのため、複雑すぎてプロセスの分離が難しいものは向いていません。その場合は、LXCなど1コンテナで複数プロセス起動が許されているコンテナ技術をつかえます。特殊なデバイス/リソースを利用するたとえば、現在NVIDIA以外のGPUを利用できません。特殊なリソースを利用したい場合、対応できないことがあります。手順に沿ってコマンドを打つ宣伝PHPer向けのDockerチュートリアルを作成しました。日本語で、さっとDockerを動かしたい人はこちらもどうぞ。まとめ実際の勉強会だと、最初の10分くらいで概要を説明して、2時間くらいハンズオン形式で実際にdockerを触っていきます。うちの会社でもやってほしい、みたいなのがあればご相談ください。コンテナの導入〜セキュリティに関するコンサルティングをお受けしています。コンテナのセキュリティツールDockle作者です。Trivyのコミッタです。https://twitter.com/tomoyamachihttps://scrapbox.io/tomoyamachi/about_GoodWithFollowディップ株式会社ディップ株式会社は「バイトル」「はたらこねっと」などの求人情報サービスをはじめ、人工知能専門メディア「AINOW」、スタートアップ専門メディア「スタートアップタイムズ」、アニメなどの舞台を紹介するサイト「聖地巡礼マップ」といった新しい分野のサービスを自社で開発・運営しています。upLoginユーザーは見つかりませんでした。