laravelの環境構築
これを参考にすすめていく
フォルダ構成
compose.yml についてざっくり理解
Docker Composeとは?
- 複数のコンテナを定義し実行する Docker アプリケーションのためのツール
- YAMLファイルを使い、アプリケーションのサービスを設定し、コマンドを1つ実行するだけで、設定内容に基づいた全てのサービスを生成・起動
コンテナを起動するまでの流れ
- DockerFileの作成
- docker-compose.ymlの作成
このファイルは通常、プロジェクトのルートディレクトリに配置されるのが一般的です - docker-composeコマンドでコンテナ起動
docker compose up
コマンドを実行すると、docker-compose.ymlファイルに記述された全てのサービス(コンテナ)をビルドし、起動することができます
docker-compose.ymlファイルの書き方
(1)services
作成したいサービス(コンテナ)を列挙します
services:
db: #サービス名
web: #サービス名
(2)image
image:に続いてDockerイメージを指定することで、そのイメージよりビルドします
image: mysql:5.7 # イメージ名:タグ
(3)build
build:へymlファイルが置いてあるディレクトリ(カレントディレクトリ)からDockerfileが置いてあるディレクトリへの相対パスを記述します
build: ./rails_project # Dockerfileがあるディレクトリへの相対パス
(4)volumes【サービス内にある方】
# (dbコンテナ)
volumes:
- db_data:/var/lib/mysql # ホストディレクトリ : コンテナ内ディレクトリ
# (webコンテナ)
volumes:
- .:/myapp # ホストディレクトリ : コンテナ内ディレクトリ
(5)volumes【トップレベルで指定されている方】
ここで定義されたボリュームはサービス内のvolumesで使用することができ、サンプルにおいてもdbコンテナにおいて使用されています
volumes:
db_data:
ボリュームを使うとデータはDockerコンテナの起動・停止のサイクルから独立して保存・管理できる
(6)environment
environmentは、Dockerのコンテナ内で使用される環境変数を設定するために使用します。
(7)ports
指定する形式はホストマシンのポート番号:コンテナのポート番号
となる
(8)depends_on
depends_on
はサービス間の依存関係を定義するために使用する。
Docker Composeは、そのサービスを開始する前に依存している全てのサービスが先に開始されていることを確認してくれます。
(9)command
command
はサービスコンテナが起動したときに実行するコマンドを指定します。
Docker Compose コマンド
(1)up 【コンテナ作成・起動】
$ docker compose up # イメージが存在しないときはビルドする
docker compose up [OPTIONS] [SERVICE…]
主なオプション
- 「-d」| バックグラウンドで実行する
- 「–build」| イメージを再構築する
(2)ps 【コンテナ一覧表示】
$ docker compose ps # コンテナの一覧を表示
$ docker compose ps -a # 停止中を含めたコンテナの一覧を表示
(3)logs 【ログを表示】
$ docker compose logs web # サービス名を指定
(4)run 【コンテナ作成後、コマンド実行】
$ docker compose run web ruby app.rb # サービスとコマンドを指定
(5)exec 【コマンド実行】
$ docker compose exec web /bin/sh # サービスとコマンドを指定
# appサービスでbashコマンドを実行する
docker compose exec app bash
(6)down 【コンテナを停止・削除】
$ docker compose down
Dockerfileの書き方
Dockerfileとは
Dockerfileとは、Dockerイメージを作成するためのテキストファイルです
各インストラクションについて
(1) FROM
(2) RUN
(3) CMD
「CMD」インストラクションは、Dockerコンテナが実行されたときにデフォルトで実行するコマンドを定義します。
(4) COPY
ホスト(ローカル)のファイルやディレクトリをDockerイメージにコピーします。
(5) ENV
(6) WORKDIR
コマンドを実行する作業ディレクトリを指定します。
RUNとCMDの違いとは?
インストラクションで受け取る引数にあるコマンドを実行する点では似ている「RUN」と「CMD」ですが、大きな違いは**「RUNはレイヤを作る」、「CMDはレイヤを作らない」**ことです。
レイヤは再生可能であり、Dockerは一度ビルドされたレイヤをキャッシュして再利用することができるため、ソフトウェアのインストールやファイルのコピーなどイメージの構築に必要な手順を「RUN」で指示することによりベースイメージにキャッシュさせ覚えさせることで、何度もダウンロードせず済みます。
apt-getって何?
apt-getは、Debianとその派生物(Ubuntu、Linux Mintなど)で使用されるコマンドラインツールで、パッケージの管理を行うために使用されます。
apt-getを使用すると、ソフトウェアパッケージを検索、インストール、更新、削除することができます。また、依存関係の解決やパッケージのバージョン管理などの機能も提供されます。
例えば、以下のようなコマンドを実行することで、Apacheウェブサーバーをインストールすることができます。
sudo apt-get update # パッケージリストを最新の状態に更新
sudo apt-get install apache2 # Apacheウェブサーバーのパッケージをインストール
apt-get install~から始まると、build中にエラーが発生する可能性があるため、apt-get update
してからinstallした方がおすすめです
docker composeとdocker-compose、ハイフン有無で何が違うのか?
PHPのライブラリ管理ツール「Composer」
Composer は、PHP のプロジェクトが必要とするライブラリやパッケージを管理する「ライブラリ依存管理ツール」
composer create-project xxx
とお決まりのコマンドを実行することが多いです。
npmやYarnでいうnpm initやyarn initみたいなもの
chownコマンド
chown [オプション] ユーザー[:グループ] ファイル
オプション
-R
指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権を再帰的に変更します。