見出し画像

Dockerって何?素人でも簡単に15分で理解できる!

Dockerとは

Dockerは、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較されます。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。

画像1

Dockerを使うメリット

コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。作成した環境を配布しやすい。スクラップ&ビルドが容易にできる。

例えば、開発環境(Windows上)では動いていたけどLinuxで動かなかった、といったケースも、開発工程からDockerを活用していくことで防ぎやすくなります。そして、開発工程の中で使っていた環境をそのまま本番環境に持っていくことも可能なため、環境差分が少なく、環境による問題を減らすことができます。

作成したDockerイメージを他の人にも渡して使ってもらうことで、各自の環境のバージョンずれ防止や、開発環境準備の短縮化にもつながります。開発環境の準備で、説明不足や手順ミスで、丸一日かかったとなってしまうのはもったいないですよね。私自身も、開発環境からDockerを使っていて、新規メンバ参画時のコスト削減や、環境依存問題を減らせて、役立っています。

さらに、コード化したDockerfileを構成管理し、それをCIツール(JenkinsやCircleCIなど)で、ビルド(Dockerイメージの作成)、デプロイ(コンテナの起動)、環境のテスト(Serverspecなど)、画面試験(Seleniumなど)を毎日実行すれば、環境面の確認も含めて安心して開発を進められるようにもなります。このサイクルを回せると、いざ環境を構築するとなった際に「アプリを動かすのに何のパッケージが必要なの?」と慌てることも減らせて、開発・リリースサイクルも安定します。

実際に使ってみよう

インストール作業は省きます。Dockerのイメージ(仮想マシンでいうところのVMイメージ)は、Web上のDocker Hubで公開されています。そこからDockerイメージを取得してくれば、すでに必要なミドルウェアなどがインストールされた状態のDockerコンテナを起動でき、すぐに使用できます。

例として、NginxのDockerイメージを使ってWebサーバーを立ててみましょう。Dockerがインストールされた環境で以下を実行します。

docker run --name some-nginx -d -p 8080:80 nginx

このコマンドを打つだけで、Nginxがインストール済みのDockerイメージを取得取得したDockerイメージでコンテナ起動し、コンテナの中でNginx起動
を実施してくれます。

あとはブラウザで「http://<IPアドレス>:8080/」を開けば、Webサーバーにアクセスできます。必要なファイルや設定を含めたDockerイメージを作っておけば、上記のコマンドくらいで、必要なWebサーバを起動することができます。

画像2

次はWordPressのコンテナを動かしてみましょう。

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
docker run --name some-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw --link some-mysql:mysql -d -p 8080:80 wordpress

これでWordPress環境が起動しました。あとはブラウザで「http://<IPアドレス>:8080/」とアクセスすれば、WordPressが使えてしまいます。

画像3

このように、数コマンドで簡単にWebサーバーや、あるアプリが動いた環境を構築できてしまいます!

ツールがインストール済みのDockerイメージはいろいろと公開されています。例えば、CIツールのJenkinsや、プロジェクト管理ツールのRedmineなどもDockerイメージとして公開されており、上記と同程度のコマンドで起動することができます。そのためDockerを使えば、ちょっと気になったツールを上記のようにすぐ使用できるので、とても便利に感じています。上記は一般に公開されているDockerイメージを使いましたが、自分でDockerイメージを作成することができます。それを他の人にも取得してもらえば、簡単に同じ環境を作ることができるのです。

また、上記はデータベースとしてのMySQLコンテナとWordPressコンテナが分かれています。そのため、「WordPressのバージョンを上げたい」といった場合には、WordPressの新しいバージョンのコンテナをもう一つ起動し、問題なければ、古いWordPressコンテナを削除する、という段取りを踏めば、切り戻しなどもしやすいため、バージョンアップなどの対応も敷居が下がるのもよいと思ってます。

画像4


よろしければサポートお願いいたします!現在仕事でAI技術を研究、開発、運営しています!未来の子供たちのために人とAI(ロボット)が手をつないで楽しくなれるよう支援に使わせてもらいます!