Dockerに関する世界観です。クラウドも参照のこと。
Dockerとは、要するに、ホストのLinuxカーネル環境を共有しながら、プロセスとファイルシステムを隔離し、コンテナと呼ばれる仮想環境上で動作させたり、そのイメージを作って配布したり、導入したり、簡単に削除したりすることができるシステムです。
要するに、ホストのLinuxカーネルを共有しながらプロセスやファイルシステムなどを隔離することで、マシンの上であたかも別のマシンが複数動いているかのように仮想化できるものであると考えるとよいでしょう。
以下の記述は、何も分かっていない頃の自分が書いた文章なので、勘違いが多々あります。分かっている人は読まなくて構いません。
ホストのLinuxカーネルを共有した上で、さまざまなコンテナ型仮想Linux環境を実行出来る、仮想コンテナ技術。ホストとゲストのLinuxカーネルを共有するため、オーバーヘッドが少なく済む。
後日注記:基本的な設定はホストのLinux環境を引き継ぎながら、コンテナに隔離したプロセスを独立した環境で実行させることができるシステムがDocker。また、最近はLinuxだけではなくWindows(あるいはMac)にも「本物のDocker」が動きます(Docker Desktop for Mac and Windows)。以下のリンクを参照してください。
後日注記:要するに、コンテナ型仮想化は「Linuxシステムをもうひとつ(あるいはいくらでも)作り出せるもの」であると理解すればいいと思います。そして、そのシステムをどのようにするのも自由であり、基本的にはホストのシステムや設定を共有しながら、必要に応じてそれだけを隔離したシステムや設定を構築し、設定内容をイメージにしたり、作ったり廃棄したりすることが簡単にできるということです。
Dockerは、今までのホストOSとゲストOSに分かれたVM型の仮想化ではなく、ホストのLinuxカーネルを共有しながら、アプリケーションやミドルウェア・ライブラリを「隔離」することで、コンテナの上で別のマシンを動かす(まるで別のマシンが現実にそこにあって稼働しているかのように一台のマシンの中で実行する)ことができる。
この時、マシンの「イメージ」を作ることができ、環境設定や構成をコード化して別のマシンに簡単に適用したり、Dockerfileとして配布することや、配布されているイメージを簡単に自分のLinuxで動かすこともできる。イメージはWeb上のDocker Hubでも配布されている。
Dockerの利点は、「コンテナ式による軽量さ」「再構築・削除が簡単」「イメージをDockerfileによって作成し、配布したり、環境の簡単な再現が可能」などの利点がある。また、「WordPressを使える環境を作りたい」などといった時に、Docker Hubで専用のイメージを入手すれば、簡単に同じ環境を作ることができる。
Docker Hubを使うことで、Nginxを導入するのも、MySQLを導入するのも、WordPressを導入するのも全部「docker run」コマンドでOK。簡単にDocker Hubから導入できる。
後日注記:Dockerにおいて重要なのは、「Infrastracture as Code(IaC)」の思想。インフラそのものをコードとして扱うことができる。インフラであるサーバやミドルウェアの設定はすべてDockerfileに記述し、Dockerイメージとしてコンテナ環境を導入・管理・破棄することができる。これはサーバを管理したり、開発環境と本番環境をできるだけ同一にする際に、非常に便利である。
2023.04.06編集
LXCやDockerなどのコンテナ型仮想化技術では、ホストのLinuxカーネルを共有するため、KVMなどのようなOSの上でOSを走らせることによるオーバーヘッドがゼロに近い。XenやKVMに比べて、起動や終了も早く、プロセス実行の効率も良い。
注記:ここに書いた時のにわか知識で執筆したため、「Linuxの上でLinuxが動く」という説明をしていますが、本当は「Linuxカーネルの上でコンテナ型の仮想環境が動く」が正しいです。
DockerはLinuxカーネルを共有しながら、さまざまなLinux環境(仮想マシン)を同時に構築し、動的に作ったり削除したりすることができる。このため、開発環境の上でデプロイする本番環境を作り出して、本番環境でどのようにシステムが動くのかを試すような用途に使える。
システムをインスタンスに作ったり削除したりすることができることで、いついかなる時に必要になっても、迅速に新しいコンピュータ資源を確保できる。Dockerでは、Dockerfileを使うことで、新しいシステムイメージを簡単に作成できる。Kubernetesを使用することで、たくさんのネットワーク資源をあたかもひとつのコンピュータであるかのように仮想化できる。これらの技術により、いついかなる場合にどんなシステムの問題や必要性がでてきても、対応し、拡張し、あるいは改良することができる。
コンテナ型の仮想環境は、ホストOSのLinuxカーネルを共有した上で、仮想化されたLinuxコンテナ環境(仮想マシン)を実行・実現する。
ファイルやディレクトリ、プロセス、ネットワーク、設定、システム構成などをコンテナでそれぞれの環境に仮想化して、その上でその仮想環境におけるアプリケーションを実行することが出来る。
DockerはLinuxの仮想コンテナ環境。Linuxの上で仮想コンテナを作ることによって、Linuxの上でたくさんのLinux仮想コンテナ環境を走らせることが出来る。
Xenなどの仮想OSとは異なり、Linuxの上でWindowsなどの他のOSを動かすことは出来ない。Linuxの上でLinux仮想環境を動かすことが出来る。
ただし、LinuxでLinuxを本当に動かすわけではない。Linuxと言うカーネルは共有しながら、通常のプロセスと同じように、別の環境でコンテナプロセスを動かすことが出来る。
この時、VM型の仮想化に比べて、ネイティブなアプリケーションとほぼ同等の効率で、仮想Linuxコンテナ環境のアプリケーションを実行出来る。
後日注記:実際のところ、「Linuxの上でLinuxが動く」と言うよりも、「仮想マシンとして隔離されたコンテナプロセスが動く」と言った方が正しい。たとえば、仮想マシンとして隔離したMySQLコンテナを動かしたり、隔離したRailsコンテナを動かすことで、「それぞれのサーバーに専用の仮想マシン環境を割り当てる」ことができる。Docker Hubなどを利用すれば、ネットからイメージをダウンロードして、コンテナとしてすぐに起動できる。こうした「隔離」という意味合いが強いため、コンテナ型仮想化のオリジナル的存在であるFreeBSDのjailsは「刑務所」という意味である。
Dockerでは、システムイメージの構成をDockerfileと言うファイルに記述することで、新しいシステムイメージを簡単に作ることが出来る。Dockerfileにソフトウェアのインストール手順と設定手順を記述することで、どこでも同じシステムを簡単に再構築出来る。
Dockerの利点とは、
・それぞれの開発環境で、本番環境と同じ環境を簡単に再現できる。どんな環境でも同じ。ホストがDebianでもUbuntuでも関係なく、コンテナ環境でゲストの環境を再現できる。
・Dockerfileに全てのインフラ+アプリの情報が書かれており、コンテナの状態が保存されるため、間違いが発生しにくい。また簡単・高速にデプロイできる。
・必要のなくなった時点で、簡単にインスタンスを削除できる。インスタンスなイメージの作成・削除ができる。
・設定を間違えたら、元の状態に戻すことができる。ロールバックが簡単。
など、多くが「環境の再現やデプロイの際の管理がしやすくなる」ということです。
特に、たくさんのインフラソフトウェアやインフラシステムが重なり合っている「複雑なシステム」を管理するための助けになってくれます。
Docker HubはDockerイメージをインターネット上で共有できるサービス。
たとえばCentOSにNode.jsを入れたDockerイメージを共有することで、みんなと一緒に同じ環境を再現することができる。
用途としては、「このようにLinuxをインストールして、こんな必要なソフトを導入して、このアプリケーションを使ってください」といった場合に、そんなことを手動でする必要なく、システム全体をまるっと共有できる。
まず、docker pullでイメージをダウンロードする。(イメージはDocker Hubで探す。)
$ docker pull hoge
docker runは以下のように使う。
$ docker run -it hoge /bin/bash
たとえば、hogeの部分を「rails」に置き換えて以上を実行するだけで、Ruby on Railsが既に導入されたコンテナが立ち上がる。RubyのインストールもRailsのインストールもしなくて構わない。
(以上はdocker run(コンテナ作成)する時のオプションあれこれ - Qiitaを参考に執筆・編集して引用しました。)
MySQLのコンテナやRailsのコンテナも全部docker runで立ち上げてしまおう。Railsの環境を構築する詳しい手順は以下が参考になる。MySQLはコンテナを削除するとデータも消えてしまうのでデータの永続化(MySQLコンテナとデータコンテナを分ける)も行うこと。
複数のDockerイメージを連携してコンテナを作りたい場合は、docker-composeというコマンドを使うといい。
たとえばRailsとMySQLのイメージからコンテナを作って管理したい場合などに使える。
後日注記:docker-composeは、DockerにYAMLを追加して、Dockerの構成を記述し、イメージの連携をすることができるものだと考えるといいかもしれない。
僕の好きなYouTuberのセイト先生が、Dockerを使う上で便利なツールを5つ紹介されている。
それぞれ、Docker Desktop(Windows/Mac/Linux向けのGUIのDocker), Docker Init(対話形式でプロジェクトの設定ファイルの初期化ができる), Docker Compose Watch(コンテナを停止させることなくモジュールをリロードできる), Docker Scout(コンテナイメージの脆弱性を診断できる), Docker Build Cloud(クラウド上でイメージを高速にビルドできる)などとされている。
Dockerを使ったプロジェクトの運用をされたい方は参考にされてほしい。
2024.08.27-28
このほかにも、セイト先生のDocker入門動画が公開されているので、初心者の方はこの動画を見ましょう。僕のこの文章では分からない、スッキリ分かるDockerの分かりやすい解説が説明されています。
後日注記:この動画の説明にもある通り、Dockerはさまざまな環境(本番用や開発用)で同じテスト用の環境を簡単に構築するために使います。さまざまなミドルウェアなどを導入する時に、個別の環境にひとつひとつ入れるのは手間がかかりますし、バージョンの管理も難しいです。Dockerならひとつのコンテナにすべて詰め込んで、簡単にまるっとそのまま別の環境に導入することができます。
Laravelも参照のこと。
2024.08.28-29
OSレベルのコンテナ型仮想化技術。ホストのLinuxカーネルを共有しながら、隔離された複数の環境をひとつのマシンの上で共存できる。Linuxカーネルのcgroups機能に依存している。
Dockerがアプリケーションのデプロイを主に目指しているのに対して、LXCは仮想マシンのイメージを実行する軽量なコンテナ型仮想化技術を目指している。
cgroupsは、グループ化されたプロセスに対して、リソースの利用を調節・制限・隔離・監視することができる、Linuxカーネルの機能。
cgroupsでは、まず複数のプロセスをグループという単位にグループ化する。このグループに対して、CPU時間、メモリ、ディスクI/O、ネットワーク帯域幅などの、プロセスが使用するリソースの使用量の制限やアクセス拒否などの制限、利用可能なリソースの制限と隔離、監視やモニタリングなどを行うことができる。リソースのコントロールは、リソースの抽象的な種別を意味するサブシステムによって行われる。
プロセスの優先度を指定するNICE値などの従来の方法に比べて、柔軟性がある。特にLXCやDockerといったコンテナ型仮想化の上位技術から使用される。
Dockerでは、Linuxカーネルのoverlayfsやnamespaceなどの機能とともにcgroupsを基本技術として使用している。
コンテナ型仮想化のメリットは、軽量であることや環境構築の時間短縮もありますが、DevOpsとの相性が良いことが言えます。
DevOpsとは、開発チームと運用チームが協力し合って開発・運用を行っていく手法です。コンテナ型の仮想化を行うことで、環境をさまざまに構築して試験することができます。
デメリットは、ホストのOSと別のOSで仮想化することができないことなど。
また、VM型の仮想化に比べて、コンテナ型は速度が速く軽量です。
たとえば、サーバの本番環境を開発環境で試したい時に、何度も仮想サーバを立ち上げる必要がある時、VMwareのようなVM型の仮想化を行うよりも、Dockerのようなコンテナ型の方が素早く試すことができます。
これは開発の効率化にとても大きく寄与します。
Dockerは基本的に、開発環境で開発したアプリケーションを、本番環境でいきなり稼働させるのではなく、試験環境できちんと動くかどうかを試す(テストする)ために使用します。
いきなり本番環境で動くかどうかを試すのは、エンタープライズの信頼性が要求されるシステムの開発ではご法度。必ず、試験環境できちんと動くかどうかテストしてから、きちんと動くことが分かった段階で本番環境にデプロイするようにしましょう。
Dockerを使えば、本番環境と同等の試験環境を開発環境の中に再現できます。ミドルウェアの構成からバージョンまですべて同じ環境を仮想マシンの中に再現し、壊れたら仮想マシンごと削除し、簡単にDockerfileから仮想マシンを再作成できます。コンテナ型は軽いため、コンテナを起動したりするオーバーヘッドも少なく済み、アプリケーション開発の生産性を高めることができます。
2023.09.10
Kubernetesを参照のこと。
Red Hatなどが推し進めている、オープンソースで開発されているクラウド環境構築用のフリーソフトウェア。
基本的に、OpenShift & OpenStackとDockerを組み合わせて、Ansibleで自動化する、といった風に使う。
OpenStackはNova(全体のオーケストレーション)、Neutron(ネットワーク)、Cinder(ブロックストレージ)、Keystone(認証)、Glance(マシンイメージの管理)、Swift(オブジェクトストレージ)、Horizon(Web管理)などのコンポーネントから構成される。AWSを自分で作れるソフトという感じの位置づけ。
後日注記:最近はクラウドサービスはAWSが一強となっていますが、AWSに対して二位以下の企業がOpenStack連合を作っています。中国企業も参画しているようです。
構成管理を参照のこと。
最近のクラウド市場は、猫も杓子もDockerとKubernetesです。
まず、クラウドを作る場合、Amazon EC2に登録して、クレジットカードを登録して従量課金制の契約を結び、OSはサポートが必要ならRHEL、必要ないならUbuntuにして、root権限が得られるためWebサーバやデータベースをインストールします。ApacheやNginx、あるいはNode.js+Reactです。
仮想サーバの構築は、ホストのLinuxの上でDockerとKubernetesを用いて行うため、どんな仮想サーバ向けのOS(注意:Linuxに限る)でも導入できます。インフラのDockerとKubernetesが何から何まで全部やってくれるので、クラウドサーバの運営業者も楽です。DockerとKubernetesの上で動くRHELあるいはUbuntuを導入して、root権限で何でも好きなようにできるのです。
あるいはRed HatやUbuntuなどが力を入れているのがOpenStack。これはAWSを自分で作れるという位置づけです。
なぜDockerとKubernetesが流行るのか。それは、単純で簡単で、なおかつ軽量でパフォーマンスが良いからです。手元の開発環境のLinuxマシンで開発し、Docker上の本番環境と同等の試験環境で動くかどうかを試して、開発が終わったら本番環境にデプロイ。これを簡単かつスピーディに行えて、必要なことは全部DockerとKubernetesがやってくれる、というわけです。
また、JavaScript環境がとても優れたものになってきつつある現在、JavaやPHPのような従来の言語は必要なくなってきています。サーバ側はNode.js、クライアント側はReact。あるいは、Ruby on RailsやDjangoのようなWebフレームワークを使います。
僕も経験が豊富にあるわけではありませんが、最近のLinuxによるWebサービス開発は、そのようにどんどん進歩していて、最新が本当は何なのか、正しい情報は何なのか全くわかりません。僕が書いたこの情報も、ほとんどが書いてすぐウソになってしまいます。ですから、最初からネット上の情報などあてにしないことです。自分でやってみて、駄目なら駄目だと自分で判断し、自分で調べて自分で考えること、それがIT業界の鉄則です。Do-it-yourself、自分以外のものを信じないようにしましょう。
クラウドサーバも参照のこと。
(以下の文章は、Dockerやコンテナ型仮想化について何も分かっていない、経験や知識のない自分の書いた文章であるため、一般的な良識と比較して間違ったことを教えています。注意してご覧ください。)
僕は、Dockerが使われるようになった背景には、ソフトウェアの複数のバージョンをインストールしたり、切り替えたりできないLinuxやUNIXだからの事情があると思います。
Linuxでは、ソフトウェアの複数バージョンをインストールすることは、原則できません。aptなどを用いて入れるソフトウェアも、基本的は最新の安定バージョンのみです。
この理由は、ファイルシステム階層に理由があります。UNIX標準のFHSでは、/usr直下にbinディレクトリがあり、/usr/gimp/2.10/bin/gimpのようになっていないため、複数のバージョンを同時に導入することができません。
Python 2系列とPython 3系列には互換性がありませんが、このような場合には標準のpythonコマンドとpython2コマンドを区別する、半ば強引なやり方が必要となります。しかしながら、システムに導入されているpythonコマンドが2なのか3なのかを判断するには、python --versionを実行しなければなりません。
Dockerを使えば、このような問題が解決できます。すなわち、特定のバージョンの環境を、コンテナという「隔離された仮想環境」の中で再現し、ほとんどの設定はホストを引き継いだ上で、必要な環境(バージョンやビルド構成などを含む)でコンテナプロセスを動作させることができます。
Docker以外にも、バージョン管理を楽にしようとする試みは多く存在します。たとえば、
・Node.jsでは、Node.jsのバージョン切り替えシステムnodebrewを使うことで、複数のNode.jsのバージョンを導入して切り替えられる。Node.jsも参照のこと。
・Fedora Modularでは、OSの更新サイクルとアプリケーションストリームの更新サイクルを分離し、OSで用意されているパッケージのバージョンとは別に、任意のバージョンのパッケージを導入できる。Fedoraも参照のこと。
・OSTreeでは、OSのファイルシステムツリーをGitと同様の技術で管理し、複数のツリーを切り替えたり、リビジョン管理やロールバックができる。OSTreeも参照のこと。
・FHS準拠ではない新しいファイルシステム階層を採用したGoboLinuxでは、パッケージごとのディレクトリを用意し、複数のバージョンのアプリケーションを導入できる。GoboLinuxも参照のこと。
しかしながら、ソフトウェアのバージョンを複数管理できるのであれば、/etc以下に存在するような設定ファイルも同時に管理できると便利です。場合によっては、そのソフトウェアだけではなく、周辺のソフトウェアも一緒に管理できるといいかもしれません。また、設定構成の内容をイメージファイルにして、別のマシンにも簡単に再導入できると管理がしやすくなります。このようなことができるのがDockerです。Dockerでは、そうしたすべてをコンテナの中に「隔離」し、システムとは別の「隔離された環境」で実行できます。Dockerを用いることで、開発・テスト・デプロイ・運用・保守の管理がとても楽になります。
DockerはホストのLinuxカーネルを共有して、その上で別のディストリビューションを動かすのにも使えますが、これには注意が必要です。なぜなら、Linuxカーネルのバージョンが違うことに起因するバグや不具合がでてくるかもしれないからです。また、UbuntuとDebianでカーネルのバージョンが違う場合、Ubuntuで作ったイメージをDebianで使うといった場合にも注意が必要となります。Ubuntuのカーネルバージョンで動くことが保証されたイメージが、Debianのカーネルバージョンでも動くとは限りません。
しかしながら、コンテナ型の仮想化は、ホストのLinuxカーネルを使うため、とても軽量に動かすことができ、開発の中ではこの「軽量さ」が大きく貢献します。簡単に素早く起動し、不要になったら即座に削除し、必要になった段階で簡単に新しい仮想マシンを構築できるのです。
後日注記:ただし、コンテナ型仮想化を使うメリットとは、「本番環境と同じ環境をどの環境でも再現できる」ということです。わざわざ本番のサーバにデプロイしなくても、すべての開発者が同じ環境を開発環境の中で再現することができます。このため、DevOpsと相性がいいのです。決して、ソフトウェアのバージョンを切り替える機能ではありません。ソフトウェアには、バージョンだけではなく、ライブラリや設定、ミドルウェアやランタイム、サーバやデータベース管理システムなどさまざまな環境が存在します。Dockerを使うことで、こうした環境をコンテナの中で再現し、隔離した環境で仮想的に実行することができます。
このようなDockerを、いったいなんのために使うのでしょうか。
それは、開発環境とテスト環境と運用環境を分け、すぐさま運用環境にサービスをデプロイするのではなく、テスト環境できちんと試す、ということです。
ですが、なんのために、テスト環境できちんと試すのでしょうか。
たとえば、メインフレーム環境で、Javaで膨大なバッチ処理をかける場合を考えてみてください。
開発環境で作ったバッチを、いきなり運用環境で試したとして、もし失敗したら、すべてのデータが壊れてしまいます。
これをいきなりやってしまうと、もう終わりです。壊れたデータをどうしようもできなくなってしまいます。
このような時に、復旧が必ずしもできるとは限りません。
なので、運用環境の前に、まず開発環境でサービスを開発し、それをテスト環境できちんと試すという工程がとても大切なのです。
Dockerのよい点は、このようなテスト環境を作る際に、運用環境と同じ環境を再現できるということですが、それだけではなく、「壊れたらすぐに棄てて、再度作り直す」ということが、素早く簡単にできることです。
テスト環境は、言ってしまえば「壊れて使えなくなってしまうのが常」なのです。だから、テスト環境を簡単に作ったり壊したりできるということはとても便利なのです。
Docker Desktopのライセンス体系が一新され、大企業での利用については有料になりました。Dockerはとても使われるソフトでありながら、ビジネス的にはうまくいっていないようです。
今回有料化されるのはDocker Desktopであり、これはWindowsやMac向けに簡単にDockerをインストールするソフトウェアです。Docker CLIやDocker Composeは引き続き無料で提供されます。
実際のところ、Dockerにはさまざまな利用方法があります。
僕個人は、インフラ系のエンジニアでもアプリ開発系のエンジニアでもないため、実際の業務でDockerを使った利用方法を提示することはできません。
ですが、以下のような記事で、Dockerがどのように使われていて、どのような場面でDockerが力を発揮するのか、ということが詳しく書かれています。
僕自身、IT業界の技術や経験が少ないため、この記事のすべてを理解することはできませんが、僕の書いたこの文章よりもはるかに多様で高度な利用方法があり、Dockerは素晴らしいのだということを分かっていただければ幸いです。
2023.04.06
僕も詳しく知らないため、不確かな情報かもしれませんが、どうやらDockerでWindowsアプリも動くようです。
DockerはWindowsにも対応しており、WSLなどでも動きますが、Linux上でDockerを使って、MS-Officeなどを動かしている猛者が、以前どこかのネット情報で多く見られました。
以前そのような記事がネット上のどこかにあったのですが、今検索して調べても、どこにあったのか分からなくなってしまいました。申し訳ありません。
残念ながら、僕もDockerについて全然詳しくないので、そのような情報がどのような理由と原理で動いているのか分かりません。ですが、MS-OfficeはDockerで、Linux上で動くようです。もし、嘘あるいは誤情報であったら申し訳ありません。
2024.03.15
プロジェクトに重要な変更をした時は、まずはDockerで試しましょう。
プロジェクトからなんらかの重要なコンポーネントが、「不要になったから取り除きたい」となった時に、いきなり本番環境から取り除くとどこかで問題が起きます。
あるいは、書いたコードが、最初に書いた時点から動くとは期待できません。何度も繰り返して試すために、テスト環境を幾度となく作り直す必要があります。
なので、そういう時は、Dockerのテスト環境で試します。
Dockerのテスト環境は、本番環境と同じ環境を作り出せるため、本番環境でいきなり試さなくても、テスト環境で試すことができるのです。
2024.11.18
最近は、Dockerのおかげで、Linuxデスクトップが見直されています。
なぜなら、Linuxデスクトップなら、Dockerがネイティブに動くのです。
Windowsで仮想化システムを使うと、VM型の仮想化システムの上でLinuxを動かし、その上でDockerを動かすようになってしまい、結果重たくて使い物になりません。
Dockerを使うなら、最初からLinuxデスクトップを使ったほうが楽です。Linuxなら、軽量なDockerがネイティブで動きます。
それこそ、最近のLinuxはX11やudevやsystemdからgrubまで多くが自動化されており、GNOMEの環境も整っていて、まるでWindowsよりもはるかに快適に使えるようになっています。昔のような「まったく使い物にならないデスクトップ環境」ではなくなっているのです。
特に、LinuxではVimやEmacsがaptコマンドなどから導入できるので、VS-Code以外のテキストエディタを使いたいのであれば最高の環境です。GCCのようなコンパイラも簡単に導入できます。
なので、なんなら、「最初からLinuxデスクトップを使ったほうがいいじゃん」となってしまうのです。
注意点として、最近はDockerもWindowsでも動きますが、これは参考情報です。WindowsのDockerは本当にきちんと動くのか、怖くて使えません。ただし、Windowsでも動くということは、Docker自体の価値をさらに高めているので、とてもいいことだとは思います。
Linuxの面白い点は、黒画面でコマンドから操作すること、そしてソースコードがオープンソースで公開されていることです。昔は「コマンドのOSが無料で使える」程度の利点でしたが、今の時代、インフラのIT化が進んでいて、オープンソースでコードが公開されていることはとてもメリットがあります。
それから、黒画面でのコマンドの操作はGUIよりも賢いため、Windowsが完全に普及した今さらながらに、その利点が見直されているのです。その一例がgitだと思います。Windowsの移植版のBashで動かさなくても、LinuxにはBashがネイティブで動くため、Windowsでgitを使うよりも快適です。僕もWindowsでgitを使っていますが、Bashで日本語の文字の表示がおかしいなどの問題点があったりします。
2024.11.18
Podmanを参照のこと。
Linuxの上で仮想コンテナ環境・コンテナプロセスが動く。
ホストのLinuxカーネルを共有するためオーバーヘッドが少なく軽量。
本番環境を開発環境で再現するなどDevOpsと相性がいい。
必要なくなったら簡単に削除でき、再構築も簡単。
コンテナのイメージを作るための命令と設定を書く。
コンテナのイメージを簡単に作成・再利用できる。
コンテナのイメージを共有するサービス。
Railsサーバを導入するならDocker Hubからdocker runコマンドで簡単にRails仮想サーバを導入できる。