- 新卒ブログとは?
- 2024年4月に新卒入社したLIGメンバーが、日々の学びや気づきを綴るブログです。彼らがふだんどんなことを学んでいるのか、気軽にのぞいてみてください。
こんにちは、テクニカルディレクターのチェです!
本記事は、Dockerの基礎から実践的な使い方までをわかりやすく解説するシリーズです。
前回の記事では、Dockerの基礎知識やメリット・デメリット、そしてDocker Composeの基本コマンドについて紹介しました。

Dockerとは?概念や基本用語をまとめてみた
今回は、実際にDockerイメージをビルドし、docker-compose.ymlを使ってLaravelのアプリケーション環境を立ち上げる手順を解説していきます。
目次
Dockerfileの書き方
まずは、LaravelアプリケーションをDocker化するためのDockerfileを作成します。
Dockerfileとは?
Dockerfileとは、Dockerコンテナのイメージを作成するためのテキストファイルです。
このファイルは、Dockerイメージの設計図のようなもので、コンテナのベースイメージや環境設定、アプリケーションのインストール手順、実行コマンドなどが記述されています。
イメージはDocker Hubなどの外部レジストリからダウンロードして使うことも可能ですが、自分が作成するアプリケーションに適切な環境を構築するために、Dockerfileでカスタムイメージを作成することが一般的です。
Dockerfileの記述例
それでは、実際に簡単なDockerfileを作成してみましょう。
FROM php:8.3 WORKDIR /app RUN apt-get update && apt-get upgrade -y \ && apt-get install -y libzip-dev unzip git \ && docker-php-ext-install pdo_mysql \ && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ && php -r "if (hash_file('SHA384', 'composer-setup.php') === trim(file_get_contents('https://composer.github.io/installer.sig'))) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \ && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \ && php -r "unlink('composer-setup.php');" COPY composer.json composer.lock /app/ RUN composer install EXPOSE 8000 CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
Dockerfileの主要コマンド
各コマンドの役割を、一つひとつ解説します。
FROM
Dockerfileで最初に書くべき命令で、ベースイメージを指定できます。これによって、8.3バージョンのPHPがインストールされた状態でスタートすることができます。
WORKDIR
コマンドを実行する作業ディレクトリを指定するコマンドです。これによって読みやすくなり、パスを何度も書く手間を減らすことができます。
RUN
イメージをビルドする際に実行するコマンドです。今回RUNで実行しているコマンドは、以下になります。
- パッケージ一覧を最新の状態にしたうえで、必要なソフトウェアをインストールする。
- PHPの拡張機能をインストールする。
- Composerをインストールし、/usr/local/bin/composerに保存するようにする。
COPY
ホストのプロジェクトのファイルやディレクトリをコンテナ内にコピーして使用できます。
この場合、composer.json と composer.lock をコンテナ内の /app/ ディレクトリにコピーしています。
RUN (composer install)
composer.jsonに記載された依存関係をインストールし、動作するために必要なパッケージがコンテナ内にセットアップされます。
EXPOSE
コンテナが外部に公開したいポートが設定できるコマンドです。
CMD
コンテナが起動したときに実行するコマンドを指定できます。ここでは開発サーバをポート8000で起動するように設定しています。
docker-compose.ymlの書き方
今回はdocker-compose.ymlを使って、Laravelで作成したアプリケーションとデータベース(MySQL)をコンテナで実行できるように設定していきます。
その前に、まずdocker-compose.ymlの意味やメリットについて説明していきます。
docker-compose.ymlとは?
docker-compose.ymlとは、複数のコンテナをまとめて管理するための設定ファイルです。
通常、Dockerはdocker runコマンドでコンテナを起動しますが、docker-compose.ymlを使うと複数のコンテナを簡単に起動・管理できます。
docker-compose.ymlのメリット
複数のコンテナを一括管理できる
Webサーバーとデータベースなど、複数のコンテナを一つの設定ファイルでまとめて管理することができるため便利です。
設定をYAML形式でまとめて書ける
docker runの長いコマンドを書かなくても、docker-compose.ymlに環境変数やポート設定を整理して記述できます。それにより設定が見やすくなり、あとから修正もしやすくなります。
一つのコマンドで起動・停止できる
docker compose upですべてのコンテナを一括起動、docker compose stopで一括停止をすることにより、複数のコンテナを個別に管理する必要がなく、手間が省けます。
docker-compose.ymlの記述例
それでは、実際に簡単なdocker-compose.ymlを作成してみましょう。
services: app: build: . volumes: - .:/app ports: - "8000:8000" depends_on: - db db: image: mysql:8.0 environment: MYSQL_DATABASE: laravel MYSQL_USER: sail MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: root_password ports: - "3306:3306" volumes: - db_data:/var/lib/mysql volumes: db_data:
docker-compose.ymlの主要構成要素
上記のコードを一行ずつ確認していきましょう。
service
ここでは、作成したいサービスを定義できます。今回は、”app”と”db”というコンテナの設定をそれぞれ記述しています。
appコンテナ
まず、appというコンテナから見ていきましょう。
- build
Dockerfileが置いてあるパスを指定します。この設定によってdocker-compose.ymlから直接コンテナイメージをビルドできます。 - volumes
volumesの設定が行えます。ホストのカレントディレクトリ(./)とコンテナ内の /app ディレクトリが同期され、ファイルの変更がリアルタイムに反映されます。 - ports
ホストのポートをコンテナのポートにマッピングします。指定の書き方はホストのポート:コンテナのポートなので、書き方に注意しましょう。 - depends_on
サービス間の起動順序を制御します。これにより、先に起動すべきサービスが起動し、その後に指定したサービスが起動するよう順序を指定できます。
DBコンテナ
次は、MySQLデータベースを管理するDBコンテナの設定を見ていきましょう。
- image
MySQL8.0のイメージを使用するように設定します。 - environment
コンテナ内で使用する環境変数の設定ができます。ここではDBの名前やパスワード、データベース名、rootユーザーのパスワードなどを設定しています。 - ports
ホストからMySQLにアクセス可能にするためにポート番号を設定しています。 - volumes
ホストのdb_dataボリュームをコンテナ内の /var/lib/mysqlにマウンドして、MySQLのデータを永続的に保存する設定です。
コンテナのビルドと起動
作成したDockerfileとdocker-compose.ymlをもとに、実際にビルドしてコンテナを起動します。
イメージのビルド
まず、以下のコマンドでDockerイメージをビルドします。
docker compose build
コンテナの起動
ビルドしたら、以下のコマンドでコンテナを起動します。
docker compose up -d
コンテナの確認
起動したら、以下のコマンドで確認をしましょう。
docker compose ps
動作を確認
確認が終わったら、実際にhttp://localhost:8000にアクセスしてみましょう。
ビルドや起動以外にも、Docker Composeに関するコマンドについては前回の記事「Dockerとは?概念や基本用語をまとめてみた」で確認できるので、興味のある方はぜひ確認してください。
まとめ
Dockerを学習している方や使い始めたばかりの方に向けて解説しましたので、今回の記事が役に立てば幸いです。
今回は簡単な設定について紹介しましたが、より詳細を知りたい方はDocker公式サイトをご覧ください。
- 日本・フィリピン・ベトナムでの活躍チャンス
- 最先端技術と多言語環境での成長
- 有識者による月1回の勉強会
現在、海外拠点(フィリピン、ベトナム)に関われるエンジニアを募集しています。日本だけじゃなく世界で活躍することに興味のある方は、以下よりぜひご応募ください!