はじめに
急な依頼が舞い込んだ。今までリリース検証しかしていなかった新人君は環境構築を任された。
ゴールはいつも行うリリース検証を新しい環境で行うこと。
タイムリミットは3週間。今回はDockerfileについてアウトプットしていく。
Dockerと仮想化技術の違い
仮想化技術 :物理的なマシンを仮想的に用意している。
CPU、メモリなどの物理的な部品をソフトウェアで補っていて、OSは何を入れてもOK。
Docker:OS(Linux)機能の一部を持ったもので、足りない他の機能を物理的なホストマシンのOSの機能に頼っている。頼っている物理的なマシンにもLinuxが必要で、コンテナにもLinuxが必要。
Dockerとは?
Dockerとは、Docker社(旧dotCloud)が開発するコンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)
実行環境を他のプロセスから隔離し、その中でアプリケーションを動作させる技術。コンテナが利用するリソースは他のプロセスやコンテナから隔離されている。そのため、コンテナに構築されたアプリは独立したコンピュータでアプリが動作しているように見える。よく、 コンテナ型仮想化技術 と言われる。
コンテナを用いることで、異なるサーバでも、同じ構成の環境を簡単に構築することができる。
⇒ 各コンテナホストOSのカーネルを利用しているという点
Dockerのメリット
・開発ライフサイクルの改善に強い
・開発環境が簡単に用意でき、かつ本番環境と共通化できる
⇒開発環境と本番環境が同じのため運用コストも下がる
・アプリケーション実行環境を高速にデプロイできる
・リソースの消費が少ない
Dockerのデメリット
・Linux環境でしか動かない
・完全な分離ではない
⇒ハードウェアをエミュレーションしているわけではない
それぞれのコンテナのCPU利用率やメモリー消費量を制限し、ほかのコンテナに影響を与えない仕組みがあるが完璧じゃない
Dockerの全体の流れ
①DockerHubなどのレジストリからイメージをPullする
②DockerfileでPullしたイメージをもとに設計図を作成する
③DockerComposeでDockerfileをビルドしてコンテナ起動する
「作る」→「起動する」→「停止する」→「破棄する」→「作る」....
Dockerコンテナとは?
Dockerコンテナとは、Dockerエンジンのの上で動いている仮想環境のこと。
Dockerコンテナには、OSからミドルウェア、アプリケーションまで、様々な環境を作ることができる。
そして、このコンテナは「ホストOSのカーネル=Linuxカーネルを利用して動いている」という特徴がある。
Docker Desktopとは?
Docker Desktopとはインストールが簡単なアプリケーションであり、コンテナ化したアプリケーションとマイクロサービスの構築と共有が簡単になる。
主な機能
・あらゆるクラウド・プラットフォーム上で、あらゆる言語やフレームワークを用いる、あらゆるアプリケーションのコンテナ化と共有を可能にする
・簡単なインストールで、完全な Docker 開発環境をセットアップする
・Kubernetes の最新バージョンを含む
・自動更新によって、最新版かつ安全性を保つ
・Windows では、アプリケーション構築のために Linux と Windows Server 環境を相互に切り替え可能
・Windows マシン上の WSL 2 を通し、Linux 上でネイティブに動作する能力
・サポートしている統合開発環境を用い、コンテナ内での開発やデバッグ
DockerHubとは?
Docker HubはDocker imageを管理するレジストリ。
レジストリには「パブリックリポジトリ」と「プライベートリポジトリ」が存在する。
ちなみにレジストリはDockerHub以外にもAWSやGCP、Azureといったパブリッククラウド上にも存在しているので使い分けが可能である。
※DockerHubは、GitHubやBitbucketと連携ができる。連携すると、GitリポジトリにDockerfileをコミットした時に、自動的にdocker buildしたものをDockerHubに登録ができる。
用語集
・エミュレーション:ある装置やソフトウェア、システムの挙動を別のソフトウェアなどによって模倣し、代替として動作させること
・コンテナ:Docker上で動作するアプリケーションの単位
・レジストリ:Dockerイメージの貯蔵庫。
・Docker Engine:コンテナ化及びコンテナを動作させるためのアプリケーション
Dockerの核となる部分
・Dockerfile:Docker imageをビルドするための手順が記載されたファイル
・DockerHub:Dockerイメージの貯蔵庫
・Docker image(イメージ):コンテナを作成するための依存関係や情報を含むデータ
コンテナはこのイメージが元になって作成される