コンテナはイメージから作る
コンテナを作成するにはDocker Engineを使用するところまで学んだが、
その際には『イメージ』というコンテナの素から作成することになる。
イメージというのは、ISOファイル(昔流行ったPSPのゲームディスクのデータや、Windowsインストールの際に使用するディスクイメージ)のようなもののこと。
イメージは豊富な種類があり、コンテナの中に入れるソフトウェアによってそれぞれ用意されたイメージを使用する。
Apacheのコンテナを作りたいのであればApacheのイメージ。MySQLのコンテナを作るのであればMySQLのイメージを使用する。
そして、コンテナ自体は容量が許す限りは、Docker上に複数載せることができる。
DockerはLinuxマシンを使う必要がある
何かと便利なDockerだが、いくつかの制限もある。
・LinuxOSが存在しなければならない
・コンテナに入れるプログラムはLinux用の物である必要がある
WindowsでDockerを使用するためにはWLS2などLinuxが動作できる環境を用意し、そのLinux上でDocker Engineを使用する必要がある。
WLS2についてはこのリンク先で調べた。
そもそもなぜデータやプログラムを隔離する必要があるのか
Dockerはデータやプログラムを隔離する仕組みであると学習したが、そもそもなぜそんなことをする必要があるのか。
例えば1つの開発環境があったとする。
その環境はいくつものミドルウェアやフレームワークなどのプログラムが混在する形で成り立っている。
WordPressにしてもMySQLなどのDBソフトを別途用意したりしなければならないし、
複数のプログラムで同一フォルダやディレクトリを参照したりしている可能性もある。
この様な状況の場合、『環境を構成する要素のアップデートによって他の何かが動かなくなる』という事故が起きることがある。
これは開発環境あるあるであり、バージョンアップ対応をする際に影響範囲を調査してからバージョンアップを実施するということがざらに有る。
また、この様な問題はアップデート時だけに限らず、初回構築時にも起こる可能性がある。
設計時に問題ないとされたプログラム同士の組み合わせもバージョンによってはうまく行かないことが往々にしてある。
この様な不具合の原因はほとんどの場合は共有部分に関するトラブルである。
プログラムによっては異なるバージョン同士を同居させることができないものもあるので、きちんと動作するバージョン同士で合わせる必要があるが、OSSでは無く既製品のソフトウェア同士を同居させるような場合はそれが容易ではないこともある。
そこにデータやプログラムを隔離させる仕組みの意味がある。
2日目の感想
環境構築でうまく行かなくて結果バージョンが関係していたという経験は少なくとも今までに3回はあったと思う。
あの時Dockerで環境を用意する案を提案でき、それを主導できる知識とノウハウがあれば…と
思った。
今自分の部下がちょうどコンテナを使った環境構築をしている様で、「コンテナとか疎いんです…」と言っていた。
やはりどのような技術に触れるかは案件によって全く異なるので、機会がなければ触れることは無いし知らないままだったというものは出てくる。
幸いにも今の自分はかなり幅広い技術に触れる機会がある案件に入っているため、今まで触れてなかった技術を学ばないとなぁ…としみじみ思った