Docker入門|初心者に向けて使い方や環境構築を解説

Docker入門|初心者に向けて使い方や環境構築を解説

この記事の対象者

  • 初めて Docker での環境構築を検討している。
  • 複数のローカル環境を1台の開発マシンで構築していて、管理を煩雑に感じている。
  • Docker をしっかり勉強する時間は無いが、とりあえず概要を知って使えるようになりたい。

前提条件

開発環境は Mac 基準で記事を書いています。
Windows でも動くとは思いますが、若干の専用対応が必要になるかもしれません。

必須知識

Laravel や cakePHP、Rails といった開発環境の構築経験。
※本記事は Docker Project の作成方法を解説する記事となるため、各種 Framework を用いた Project の生成手順には言及しておりません。

所用時間

15 分 ~ 30 分

そもそも Docker って何がすごいの?

従来の手順では開発 Project ごとに環境を用意するのは非常に大変でした。
1つのマシンの中で複数の環境を作ろうとしたら他の開発環境で行っていた設定が邪魔をしたり、かといって仮想マシンで作成しても動作が重くて開発が難しかったり。


Docker は煩わしい操作の殆どをカット可能なことに加え、環境構築もコマンドをたった1行実行するだけで完了し、何より動作が非常に軽いことが特徴です。
簡単にまとめると以下のような利点がありますね。

  • 土台 の用意さえしてしまえば誰でも扱えるため、チーム開発にも向いている。
  • 既存環境を流用しやすく、新しいプロジェクトがスタートした時にもローカル環境を用意しやすい。
  • 本番環境やテスト環境でも同じ手順で環境を起動できる。
  • 仮想マシンより処理速度が圧倒的に早い。

本記事は上記における 土台 の部分を作ってみようといった内容となります。

Docker を用いた環境構築ステップ

Docker での環境構築には以下のステップがあります。

  1. 作りたいサービスの内容を考える。
  2. サービスの単位を細分化して考える( 例えば gw / db / app の構成等 )
  3. docker-compose.yml ファイルを作成し、container 作成プロセスの定義
    ※ container とは仮想化技術における VM( Virtial Machine ) のようなものだと思ってください。
  4. 微調整を入れつつ構築

さて、それでは早速構築に参りましょう。
今回作成するのは以下の環境です。

  • gw ( nginx )
  • app ( php / laravel )
  • db ( MySQL 8.0 )

とりあえず動かしてみる

事前準備

  1. M1 チップの Mac を使っている場合、事前に以下のコマンドを実行しておいてください。

Docker Project のダウンロード

最終形があると分かりやすいと思うので、こちらの github repository を git clone してください。
Laravel Project も含まれるため、新規に Laravel を立ち上げる必要はありません。
sample_docker_web

Docker Project の起動

まず terminal を起動しましょう。
clone した repository のフォルダ直下へカレントディレクトリを移動し、以下のコマンドを実行してください。

エラーが発生しないかをしっかり確認しましょう
既知の問題とし「buildkit」の使用を true としている場合に MySQL の image が見つからない時があります。
ERROR [internal] load metadata for docker.io/library/mysql:8.0」といったエラーが発生した場合、Docker の Preferences を開き、Docker Engine の設定から buildkit を false に設定してください。

build でエラーが無くなったら以下のコマンドを実行してください。
このコマンドで docker project が生成され、バックグラウンドで起動します。

Laravel Project の composer install 実行

起動した container へ接続し、Laravel の composer install を行います。
まず以下のコマンドを実行し、container への接続に必要となる container id を取得します。

実行すると以下のような結果が表示されるかと思います。
一番左のデータが container id です。

以下のコマンドを実行し、container へ接続します。

接続に成功すると「/var/www/sample_web」がカレントディレクトリの状態で、ssh 接続した時のような表示になったかと思います。
composer install を実行します。

ブラウザで表示検証

「http://localhost:10080」にアクセスし、Laravel!! と表示されれば成功です。

具体的な解説

さて、ここからは具体的な設定ファイルの解説に移ります。
docker は難しく見えがちですが、意識すべきファイルは少なかったりします。

意識すべき 3 つの要素

Docker Project の構築において重要な要素は以下の3つです。

  • Docker-Compose.yml
  • DockerFile
  • Docker Image

1つずつ詳しく見ていきましょう。

その1「 Docker-Compose.yml 」について

Docker-Compose.yml は言うなれば「この Docker Project で作成する container と Host OS の関連付け」や「container の初期設定」を定義するファイルです。

まずは実際の記述を見てみましょう。

重要なところパラメータにコメントを設定しているため、それらを読めば内容がざっくり理解できるかと思います。
基本的には上記のようなベースとなる Docker-Compose.yml を作成し、カスタマイズして使うのが基本となりますね。

続いて DockerFile の説明です。

その2「 DockerFile 」について

app container に設定している「./docker/app」の DockerFile を例に見てみましょう。

この例で言えば Laravel を実行できる環境を作る上で、WebPack の実行環境構築に伴い TypeScript の実行環境も用意している形になりますね。

例を見て「Linux で環境を構築する時と同じ」と感じた方もいるのではないでしょうか。
その認識は正しくて、Docker における container の基本構造は「作成する container と Host OS の繋ぎ込みは Docker独自の設定だが、内部の実装は通常のサーバ構築とほぼ同じである」となります。

上記の理由から Docker container は簡単に立ち上げと停止のルール付けができる軽い VM であると言って差し支えありません。
Docker 化したいサービスに応じ、初期設定を適切に記述しましょう。

使用しているコマンドの概要を以下に記載させていただきます。

  • FROM ・・・ container のベースとなる image の指定
  • RUN ・・・ container に実行させたいコマンドの指定
  • COPY ・・・ container にファイルをコピーしたい場合に使用
  • WORKDIR ・・・ RUN で記述するコマンドを実行するカレントディレクトリの変更

その3「 Docker Image 」について

さて、ここまで色々と説明したのですが全ての基本となる Docker Image の説明を最後にさせていただきます。
一言で表すなら Docker container の構築を想定し最適化された container の template ファイルとなります。

Docker Hub で Image を探したり、以下のコマンドでダウンロード可能な Image を探すことができます。
用途に応じ必要な Image を探し、使用しましょう。

Image の自作も可能なため、慣れてきたら自分で作ってみてもいいかもしれませんね。

まとめ

以上となります。
今回の記事はいかがでしたでしょうか。

要約すると、実際の Docker Project の構築手順は以下の形となりますね。

  1. DockerFile 作成で必要となる実行コマンドを調査する
    ※ 本記事の例であれば npm や composer の設定コマンド等ですね。
  2. Docker Project の中心となる Docker-Compose.yml ファイルを作成する
  3. DockerFile を作成する
  4. Docker-Project を立ち上げる

ローカル環境を複数立ち上げる際の vendor ファイルの配置や衝突を意識する必要もなく、Docker Project を配布するだけで全員が同じ環境を共有できる Docker は非常に便利です。
是非使ってみてください。

今回の記事はここまでとなります。
良き Docker ライフを!

関連記事として筆者がよく使うコマンドをまとめた記事もございますため、よければそちらもご利用ください。
Docker でよく使うコマンドまとめ

Dockerカテゴリの最新記事