公開2025幎6月18日

15分で読めたす

Dockerずは超入門線

Dockerのコンテナ技術は広く普及し぀぀ありたす。Dockerずは䜕なのか。Dockerの䜿い方はDockerプラットフォヌムずその技術の基瀎を孊びたしょう。

Dockerコンテナ技術は、2013幎にオヌプン゜ヌスの「Docker゚ンゞン」ずしお公開され、翌幎2014幎には本番環境向けの商甚版が発衚されたした。その埌玄10幎の間に、Dockerは䜿いやすさず高い利䟿性から、IT業界で瞬く間に広く普及しおきたした。これからもその人気は高たっおいくでしょう。

しかしその䞀方で、いただに「Dockerずは䜕ですか」ずいう声もよく耳にしたす。この蚘事では、Docker環境の導入を怜蚎䞭で、Dockerにただ䞍慣れなデベロッパヌやプログラマヌの皆様を察象に、Dockerの基本を解説したす。Dockerに觊れたこずのない初心者向けの「Docker超入門線」です。

目次

  1. Dockerずは超入門線

  2. Dockerの目的

    • Dockerずは
    • Dockerでできるこず
    • Dockerむメヌゞずは
    • Dockerコンテナずは
    • Dockerfileずは
    • Dockerはなぜ重芁なのか
  3. Dockerの䞻な機胜

    • Dockerの特城
    • Docker Composeずは
  4. アプリケヌションのデプロむにおけるDockerのメリット

    • 開発環境ず本番環境のシヌムレス化
    • 起動の軜量化・凊理速床の高速化
    • バヌゞョン管理のしやすさ
    • 優れたスケヌラビリティ
  5. Dockerのデメリット

    • ひず぀のOSを䜿わなければならない
    • 倧芏暡開発時のオヌバヌヘッド
    • 技胜習埗に時間がかかる
    • セキュリティに脆匱性が生じるこずもある
    • コンテナ間での連携が難しい
  6. GitLabはDockerが抱える課題をどのように解決するのか

  7. GitLabのDevSecOpsにおけるDockerの圹割

  8. たずめ

  9. FAQよくある質問

Dockerの目的

はじめに、Dockerずはどういったもので、䜕ができお、どうしお䟿利なのか、なぜ重芁なのか、Dockerの目的に着目しながらその抂念をたずめおいきたす。

Dockerずは

Dockerは、Linuxのコンテナ技術を甚いた軜量な゜フトりェアコンテナプラットフォヌムです。アプリケヌションの開発、出荷、実行を簡易化するために蚭蚈されたした。Dockerを䜿えば、すべおの䟝存関係ず䞀緒にアプリケヌションをパッケヌゞ化できるため、䟝存関係を䞀぀ひず぀手動でむンストヌルする必芁がなくなり、䞀貫性のあるコヌド実行が可胜になりたす。

Dockerを䜿えばアプリケヌションの実行環境を暙準化でき、環境の違いによる問題を枛らすこずで開発から本番環境ぞのデプロむ時間を倧幅に短瞮できたす。

Linuxには以前からコンテナ仮想化ずいう技術がありたした。この技術を䜿うず、プログラムを開発・実行環境から隔離するこずにより、耇数のプログラムを玠早く実行できたす。ただし、この埓来型の仮想化技術は、仮想環境を構築するためにホストずなるOSオペレヌティングシステムに䟝存する必芁がありたした。Dockerはこのコンテナ仮想化技術をOSに関係なく簡単に扱えるようにした゜フトりェアずいえたす。

Dockerの基本抂念はむメヌゞずコンテナです。Dockerむメヌゞは、読み取り専甚のテンプレヌトであり、コンテナを䜜成するための指瀺が蚘述されおいたす。たずえば、コンテナで実行するアプリケヌションずその䟝存関係、環境倉数、ファむルシステムなどがこれに含たれたす。

Dockerでできるこず

Dockerを䜿うず、1台のマシン䞭に耇数のコンテナ仮想環境をビルドできるため、いく぀かの開発環境に察応するこずができたす。぀たり、1台のサヌバヌ䞊で耇数のアプリケヌションを効率的に動かすこずができるのです。アプリケヌションの開発環境をDockerで構築すれば、たずえば開発環境Windowsで動いおいたアプリケヌションがLinux䞊で起動しない、ずいった問題は発生したせん。Dockerで構築した環境は、他のデベロッパヌずクラりド䞊で簡単に共有できるため、開発䜜業がスムヌズに進められたす。

Dockerむメヌゞずは

Dockerむメヌゞは、アプリケヌションを実行するのに必芁な゜ヌスコヌドず必芁な䟝存関係をパッケヌゞ化したものです。Dockerコンテナを実行する際には、このDockerむメヌゞが必芁です。

Dockerむメヌゞは、コンテナむメヌゞを構成する耇数のファむルに、Dockerfile を合わせおビルドしたす。぀たり、Dockerむメヌゞは、手䜜業で曞くのではなく、コマンドを䜿っお䜜成したす。

そのため、Dockerむメヌゞは単䞀のファむルではなく、Dockerコンテナの実行に必芁なパッケヌゞファむルやメタデヌタの集合䜓であるこずを理解するこずが重芁です。

Dockerコンテナずは

Linuxのコンテナは、アプリケヌションを内包し、必芁なラむブラリや䟝存関係、ファむルが含たれおいたす。

䞀方、Dockerコンテナは、Dockerむメヌゞの実行可胜なむンスタンスです。これはDockerむメヌゞから生成され、アプリケヌションを実行するためのランタむム環境です。ただし、ハむパヌバむザヌを䜿甚する埓来の仮想化ずは違い、DockerのコンテナはホストOSオペレヌティングシステムのカヌネルで実行されたす。Dockerむメヌゞ内には、個別のOSはありたせん。

Dockerむメヌゞは環境のスナップショットであり、コンテナは゜フトりェアを実行する環境ずいえたす。

Dockerfileずは

Dockerfileは文字情報を䞻䜓ずするファむルで、ファむルの拡匵子はありたせん。Dockerfileには、アプリケヌションの構築から実行たでのプロセスに必芁なコマンドが蚘述されおいたす。どのファむルをどこから取埗しお、どんな凊理を行ない、Dockerむメヌゞに含めるのかなどを蚘述したす。

Dockerfileは、Dockerむメヌゞを䜜成するためのテキストファむルです。コンテナむメヌゞをビルドする堎合も、コンテナのビルド手順をDockerfileで定矩する必芁がありたす。このDockerfileには、呜什のスクリプトが含たれおおり、Dockerはコンテナむメヌゞをビルドする際にこのスクリプトを䜿甚したす。

Dockerはなぜ重芁なのか

Dockerは、コンテナに関する既存のコンピュヌティングの抂念、ずりわけLinuxの「cgroups」や「namespaces」、「overlayfs」などの技術を掻甚しおいたす。これは、アプリケヌションの䟝存関係をサヌバヌやネットワヌクなどのむンフラストラクチャから隔離したいずいう、デベロッパヌやシステムオペレヌタヌのニヌズに応えるものでした。

Dockerを䜿うず、1台のサヌバヌ䞊でさたざたなアプリケヌションを簡単に仮想化・実行できるようになりたす。さらには、ロヌカルマシンに䟝存しない開発環境を実珟でき開発環境の統䞀、本番環境に近い環境でのシミュレヌションが可胜になり、アプリケヌションの䟝存関係も管理できたす。加えお、ビルド、テスト、デプロむたでの各プロセスを䞀貫しお行なうこずができたす。

Dockerの䞻な機胜

Dockerは、Linuxのコンテナ技術を䜿甚しおいたす。Dockerコンテナはよく仮想マシンず比范されたす。

仮想マシンでは、ホストマシン䞊でハむパヌバむザヌを利甚しおゲストOSを動かし、さらにその䞊でミドルりェアやラむブラリ、さらにその䞊にアプリなどを実行したす。

それに察し、コンテナはホストマシンのカヌネルを利甚し、プロセスやナヌザヌなどを隔離したす。そのため、非垞に軜量で、たるで別のマシンが動いおいるかのように動䜜したす。その結果、アプリなどを高速に起動、停止するこずが可胜です。

Dockerは、次の4぀の構成芁玠から成り立っおいたす。

  • Dockerむメヌゞ アプリケヌション実行に必芁な゜ヌスコヌド、アプリず䟝存関係のパッケヌゞ
  • Dockerコンテナ アプリケヌションを実行するランタむム環境
  • Docker Hub クラりド䞊のレゞストリサヌビス。アプリケヌションやサヌビスコンテナのビルドず配信を行なう
  • Dockerfile Dockerむメヌゞを䜜成するために実行するコマンドラむン呜什を含むテキストファむル

Dockerの特城

Dockerには、次のような特城がありたす。

  • 軜量か぀高速 1぀のOSで耇数のコンテナを管理でき、仮想マシンより軜量で高速に立ち䞊げるこずが可胜。
  • 環境の䞀貫性が保持でき再珟性がアップ Dockerコンテナは異なるプラットフォヌムでも䞀貫しお動䜜するため、ロヌカル、クラりド、ハむブリッド環境ぞの移行が簡単にできる。 移怍性が高い クラりドシステムずの芪和性が高く、䞻芁なクラりドプロバむダヌはDockerコンテナの実行をサポヌトしおいる。
  • サンドボックスの提䟛 セキュリティ察策や゜フトりェア開発においお、隔離された仮想環境でプログラムを実行・怜蚌できる。このため、ホストマシンの環境を守るこずができる。
  • IaCむンフラストラクチャのコヌド化を䜿甚しお、むンフラをコヌド化 Dockerfileによりミドルりェアのむンストヌルや環境蚭定をコヌド化しお管理できる。

Docker Composeずは

Docker Composeは、耇数のDockerコンテナを䞀元管理する、 Dockerアプリケヌションのためのツヌルです。YAMLファむルを䜿甚しおアプリケヌションのサヌビスを蚭定したす。単䞀のコマンドで耇数のサヌビスをたずめお生成したり、起動・停止したりするこずができたす。

Docker Composeのコマンド䟋は次のずおりです。

  • docker-compose up サヌビス甚のコンテナを構築、䜜成、起動、アタッチしたす。リンクされおいるサヌビスがただ起動しおいない堎合は、それらも起動したす。
  • docker-compose ps Docker Composeで管理されおいる皌働䞭のサヌビスを䞀芧衚瀺したす。
  • docker-compose build Docker Composeファむルで定矩されおいるサヌビスをビルド構築したす。

アプリケヌションのデプロむにおけるDockerのメリット

アプリケヌションのデプロむにおけるDockerのメリットは次のずおりです。

開発環境ず本番環境のシヌムレス化

コンテナ技術の利甚を開発環境ず本番環境で統䞀するこずで、環境の違いにより起こる問題を枛らすこずができたす。その結果、デベロッパヌず運甚チヌムずの連携がスムヌズに行われ、チヌム間で発生しおいた問題も最小限に抑えられたす。

起動の軜量化・凊理速床の高速化

Dockerのコンテナ技術は埓来の仮想環境より軜く、アプリを瞬時に起動できたす。これは、CPUやメモリなどのコンピュヌトリ゜ヌスを必芁最䜎限しか䜿甚しないためです。起動速床が䞊がるこずで、開発にも集䞭できたす。

バヌゞョン管理のしやすさ

Dockerでは、GitLabなどの゜ヌスコヌドのバヌゞョン管理ツヌルを䜿甚できるため、バヌゞョン管理の可芖化が進むだけでなく、ロヌルバックやアップデヌトも簡単に行なえるようになりたす。

優れたスケヌラビリティ

コンテナは軜量で拡匵性に優れおいたす。必芁に応じお簡単に増枛できたす。これにより、アプリケヌションの拡匵やスケヌリングを迅速に行なえるため、倉わりゆく状況にも柔軟に察応できたす。

Dockerのデメリット

Dockerにはさたざたなメリットがありたすが、いく぀かデメリットも存圚したす。以䞋にデメリットを挙げたす。

1぀のOSを䜿わなければならない

Dockerは1぀のOS䞊で耇数のコンテナを䜜成したす。これにより起動速床や凊理速床の面でメリットがありたすが、同時にデメリットになるこずもありたす。たずえば、異なるOS環境で怜蚌をしたい堎合には、別のマシンや仮想マシンを準備する必芁が生じたす。

倧芏暡開発時のオヌバヌヘッド

Docker自䜓は軜量ですが、倧芏暡システムに拡匵する堎合には、Dockerの管理に䌎う負荷が発生したす。Dockerは1台のサヌバヌで倚数のコンテナを実行できたすが、その反面、管理やオヌケストレヌションが必芁になり、その凊理のためにオヌバヌヘッドが生じる堎合がありたす。Dockerだけですべおの管理を行なうのが困難になるこずもありたす。

技胜習埗に時間がかかる

Dockerは他の仮想マシンず異なる手法で仮想環境を構築したす。぀たり、デベロッパヌは新しいコンセプトをすべおれロから習埗しなければならず、それには時間がかかりたす。Dockerの動䜜原理をきちんず理解せずに䜿甚するず、あずでトラブルや問題が発生するこずもありたす。Dockerに぀いおしっかりず孊習しおから運甚に取り組むようにしたしょう。

セキュリティに脆匱性が生じるこずもある

Dockerはコンテナ型アヌキテクチャです。1台のマシン䞊で耇数のコンテナが動䜜するため、このこずに起因する脆匱性には泚意が必芁です。たずえば、耇数のコンテナがホストOSのリ゜ヌスやカヌネルを共有しおいるため、䞀぀のコンテナに脆匱性があった堎合、党䜓にその圱響が及ぶ可胜性がありたす。

コンテナ間での連携が難しい

耇数のコンテナ間での連携を怜蚎しおいる堎合、各皮蚭定が難しいために、運甚時に問題が発生するこずがありたす。たずえば、アプリずデヌタベヌスを別のコンテナで䜜成し、䞀緒に運甚したい堎合には、同䞀ホスト内で通信蚭定をしなければなりたせん。ポヌトや゜ケットを開攟する堎合にはセキュリティ面でリスクが生じたす。それを避けるために蚭定を耇雑にしおしたうず、今床は運甚面で問題が起きる恐れがありたす。コンテナを連携させる際は、蚭蚈段階から十分に怜蚎するこずが重芁です。

GitLabはDockerが抱える課題をどのように解決するのか

Dockerコンテナ内にGitLabをむンストヌルするこずができたす。GitLabは、Git「分散型バヌゞョン管理システム」を䞻䜓ずしたDevSecOpsプラットフォヌムです。゜フトりェア開発ラむフサむクル党䜓に察応する単䞀のプラットフォヌムで、GItLabを掻甚するこずで高品質な゜フトりェアの迅速なデリバリヌを実珟できたす。

Dockerコンテナ内にGitLabをむンストヌルするず、GitLabむンスタンスにアクセスできるようになりたす。DockerコンテナぞのGitLab Dockerむメヌゞのむンストヌルは公匏にサポヌトされおいたす。

Dockerが抱えるいく぀かの問題のうち、特にセキュリティに぀いおは、GitLabのDevSecOps開発、セキュリティ、運甚を掻甚しお察凊するこずができたす。GitLabのDevSecOpsでは、シフトレフトを重芖しおおり、セキュリティ察策を開発サむクルの早い段階に組み蟌むこずにより、コンテナむメヌゞの持぀セキュリティの問題の早期発芋ず察応を図っおいたす。継続的むンテグレヌションによっおこのシフトレフトのコンセプトを実践するこずで、セキュリティ察応にかかっおいたコストを削枛できたす。

DevSecOpsにおいお重芁なCI/CDを実珟するためには、自動化が欠かせたせん。GitLabではパむプラむンがCI/CDの呜什をたずめおいたす。そしお、その指瀺に埓いプロセスの自動化を実珟するずきの基盀になっおいるのがGitLab Runner英語です。GitLab Runnerはセキュリティのシフトレフトを実珟する䞊で重芁な圹割を果たしおいたす。

GitLab Runnerはセキュリティスキャンやテストを指定したタむミングで自動で実行しおくれたす。たた、レポヌト䜜成ゞョブを実行しお、ダッシュボヌドに最新情報を衚瀺するこずも可胜です。

GitLabのDevSecOpsにおけるDockerの圹割

GitLabを掻甚したDevSecOpsむンテグレヌションにおいおも、Dockerは非垞に倧切な圹割を担っおいたす。

CI/CDゞョブのコンテナ化

GitLab CI/CDでは、CI/CDパむプラむンでDockerコンテナを䜿甚するこずで、次のようなこずが可胜になりたす。

  • 䞀貫性 CI/CDゞョブはコンテナ内で実行されるため、䟝存関係や環境の違いによる゚ラヌが防げたす。
  • スケヌラビリティ コンテナは軜量か぀迅速に起動でき、倧芏暡なパむプラむンでも効率的に実行できたす。
  • 環境の柔軟性 ゞョブごずに異なるDockerむメヌゞを指定できるため、必芁な環境を簡単に準備できたす。

GitLab RunnerのDockerむメヌゞは、UbuntuたたはAlpine Linuxをベヌスにしおいたす。Dockerむメヌゞは暙準のgitlab-runnerコマンドを内包しおおり、ホストに盎接GitLab Runnerをむンストヌルしたかのように動䜜したす。

セキュリティスキャンの自動化

セキュリティはDevSecOpsでの重芁な芁玠であり、Dockerはこれをサポヌトしたす。

  • コンテナむメヌゞのセキュリティスキャン GitLabには、CI/CDパむプラむンでDockerむメヌゞをスキャンする機胜がありたす。このスキャンにより脆匱性がチェックされ、むメヌゞ内の䟝存関係やコヌドの安党性を評䟡できたす。
  • コンテナ脆匱性スキャンの自動化 GitLabにはTrivyやAquaなどのセキュリティツヌルを統合できたす。DockerむメヌゞのOSやアプリケヌションが最新であるか、既知の脆匱性がないかをチェックしたす。

IaCむンフラストラクチャのコヌド化ず環境管理

  • 再珟性 DockerをGitLabのCI/CDゞョブ内で䜿甚するこずで、開発環境ず本番環境の敎合性を保぀こずできたす。
  • ステヌゞングやテスト環境を即時に構築 Docker ComposeやKubernetesず連携するこずで、特定のブランチやマヌゞリク゚ストごずに分離された環境をGitLabで䜜成できたす。これにより、テストやセキュリティスキャンを効率的に実行できたす。

デプロむの効率化

GitLabは、Dockerを䜿甚する以䞋のデプロむパタヌンをサポヌトしおいたす。

  • Dockerむメヌゞのビルドずプッシュ アプリをコンテナむメヌゞずしおビルドしお、GitLabのContainer Registryや他のDockerレゞストリにプッシュしたす。
  • 継続的デリバリヌ Dockerむメヌゞを䜿っおコンテナオヌケストレヌションツヌルにデプロむするこずで、迅速で安党なリリヌスが可胜になりたす。

マむクロサヌビスアヌキテクチャのサポヌト

GitLabずDockerを組み合わせるこずで、マむクロサヌビスアヌキテクチャを簡単に構築できたす。マむクロサヌビスは別々のDockerコンテナずしお実行したす。GitLab CI/CDパむプラむンを䜿うず、以䞋のこずを管理できたす。

  • サヌビス間の䟝存関係の蚭定
  • 個別のセキュリティスキャン
  • バヌゞョン管理ロヌルバックが容易になりたす

たずめ

2013幎の公衚以来、Dockerは瞬く間にIT業界に広く普及したした。本蚘事では、Dockerの基本抂念、基本技術、Dockerを䜿っお䜕ができるのか、なぜDockerが重芁なのか、Dockerを理解䞊でよく目にする甚語などに぀いお玹介しおきたした。

Dockerを䜿う堎合には、DevSecOpsにずっお倧切なCI/CDを実珟するためにも、GitLab CI/CDなどの自動化ツヌルの導入をおすすめしたす。GitLab のCI/CDパむプラむンでDockerコンテナを䜿甚するこずで、開発における䞀貫性の維持、スケヌラビリティの実珟、柔軟な環境の準備が可胜になりたす。

FAQよくある質問

Dockerで䜕ができるのか

Dockerコンテナは、軜量でスタンドアロンの仮想化技術であり、アプリケヌションコヌド、その䟝存関係、ラむブラリをすべおパッケヌゞ化したす。Dockerを䜿うず、1台のマシン䞊に耇数のコンテナ仮想環境を構築でき、開発環境や怜蚌環境の統䞀が図れたす。詳しくは、蚘事の本文をご芧ください。

Dockerは䜕に䜿うのか

Dockerは、デベロッパヌがアプリケヌションずその䟝存関係をシステムから切り離したいずき䜿甚したす。コンテナにはアプリケヌションずその䟝存関係がたずめられおおり、軜量な実行環境を提䟛したす。詳しくは、蚘事の本文をご芧ください。

Dockerコンテナずは䜕ですか

Dockerむメヌゞが実行時にコンテナになりたす。Dockerコンテナは、アプリケヌションを実行するためのランタむム環境です。Dockerコンテナに関する詳现は、蚘事の本文をご芧ください。

監修川瀬 掋平 @ykawase

GitLab合同䌚瀟 カスタマヌサクセス本郚 シニアカスタマヌサクセスマネヌゞャヌ

ご意芋をお寄せください

このブログ蚘事を楜しんでいただけたしたかご質問やフィヌドバックがあればお知らせください。GitLabコミュニティフォヌラムで新しいトピックを䜜成しおあなたの声を届けたしょう。
フィヌドバックを共有する

フォヌチュン100䌁業の50%以䞊がGitLabã‚’ä¿¡é Œ

より優れた゜フトりェアをより速く提䟛

むンテリゞェントなDevSecOpsプラットフォヌムで

チヌムの可胜性を広げたしょう。