DockerはWebの開発をするためには必須の技術です。
Dockerの仕組みと使い方についてこの記事で紹介していきます!
Dockerとは何か?
Dockerとはコンテナ仮想化アプリケーションです。
仮想化とはPCやサーバーなどのマシンにインストールされているOSの上に、別のマシンを仮想的に立ち上げることです。
Dockerを利用することで、開発者はアプリケーションの開発だけに集中することができます。
インフラの整備はSREと呼ばれるエンジニアがすることが多いです。しかし、Dockerの仕組みや使い方を開発者も知っておくと便利です。
Dockerの概念
Dockerの使い方を理解するには、まず仕組みや概念を理解するのが早道です。
Docker イメージ
Docker イメージとはコンテナの大元です。簡単にいうとイメージはコンテナのレシピのようなものです。
イメージにはルート・イメージ(ベース・イメージ)とユーザ・イメージがあります。
ルート・イメージ(ベース・イメージ)
ルート・イメージはDocker社によって提供、構築、認証、サポートされています。
イメージ名が単一の単語名になっています。
ユーザ・イメージ
ユーザ・イメージはDockerコミュニティのメンバーによって作成されたイメージです。
イメージ名はユーザ名/イメージ名になっています。
Docker コンテナ
Docker コンテナとは、イメージが実行状態となったインスタンスのことです。
コンテナを削除すると、コンテナに対しての変更は全て消えてしまいます。
変更を保存するためには、ボリュームを作成して保存する必要があります。
Docker ボリューム
ボリュームはコンテナ内で特別に設計されたディレクトリです。
データの保持や共有のために、複数の便利な機能を提供しています。
Docker エンジン
Docker エンジンとはDockerのコンテナ化を行う技術です。アプリケーションの構築とコンテナ化を行うワークフローを実現しています。
Docker ネットワーク
Docker ネットワークとはコンテナが接続されるネットワークのことです。
コンテナを立ち上げるとデフォルト(bridge)のネットワークに接続されます。
Docker デーモン
Docker APIリクエストを受け付け、イメージ、コンテナ、ネットワーク、ボリュームといったDockerオブジェクトを管理します。
Docker クライアント
ユーザがDockerとのやりとりを行うために利用するものです。
Dockerクライアントはdockeredにそのコマンドを伝える。dockerdはその内容を実現します。
Dockerのインストール
公式サイトからDockerをインストールしましょう。
Dockerはコミュニティ版とエンタープライズ版の2つのエディションがあります。
- コミュニティ版・・・無償版
- エンタープライズ版・・・有償版
Dockerを勉強するにはコミュニティ版が最適です。
Dockerのコミュニティ版にはstable(安定版)とedge(最新版)の二つのチャンネルがあります。
- stable・・・3ヶ月ごとに安定した更新を行います
- edge・・・毎月新機能を追加します
edge(エッジ)版は最新の機能が使えますが、不具合が入る可能性があるので、安定板を使うことがオススメです。
インストールするDockerはコミュニティ版でstable(安定版)です。
インストールが完了したら、インストールしたDockerのバージョンを確認してみましょう。
docker version
Version: 20.10.11のようにdockerのバージョンが確認できればダウンロード完了です!
Dockerの使い方
コンテナイメージを構築する
イメージを構築するにはDockerfileを使用します。Dockerfileについては後述します。
docke buildコマンドを使用して、コンテナイメージを構築します。
docker build -t kumanatsu .
「-t」はイメージにタグをつける時に利用するオプションです。
docker buildコマンドの最後の「.」は現在のディレクトリ内にあるDockerfileを使用してね!と指示しています。
コンテナを起動する
コンテナを起動するにはrunコマンドを使用します。
docker run -dp 3000:3000 kumanatus
「-d」はデタッチモード(バックグラウンド)で新しいコンテナを起動するオプションです。
「-p」はホスト側のポート3000をコンテナのポート3000にマッピング(関連付け)しています。
docker psコマンドを使用することで起動しているコンテナを確認できます。
DockerFileの使い方
DockerFileは命令を順番に書きこむことで、自動的にイメージをビルドします。
DockerFileで使用される命令について紹介します。
FROM
FROM命令はベース・イメージを設定できます。
設定したベース・イメージに対して変更をしていく感じです。
ARG
FROM命令では、ARG命令によって宣言された変数すべてを参照できます。
FROMでイメージのバージョンを指定する時に、変数にいれてバージョンを管理することができます。
RUN
イメージの中で特定のコマンドを実行することができます。
ベース・イメージ以外の必要なプラグインをインストールすることが多いです。
CMD
コンテナが実行された時に実行するコマンドです。
コンテナ内で起動するアプリケーションの起動コマンドを設定することが多いです。
Railsなら、rails s -p 3000などです。
ENV
環境変数を追加できます。
本番環境や開発環境で差分があるところを環境変数を使うことで設定できます。
COPY
ホームからファイルやディレクトリを新たにコピーして、コンテナ内のファイルシステムのパスに追加します。
ホスト側でファイルの修正をして、それをコンテナ内に反映させるために利用します。
プロジェクトのディレクトリ全てを入れることが多いです。
DockerHubとは?
Docker HubはDocker イメージを共有し管理するためのサービスです。
Docker Hubは公開用のDockerイメージを提供し、Docker環境の構築と管理と手助けとなるサービスを提供しています。
DockerとDocker Hubの関係はGitとGit Hubの関係に近いです。