Open9

laravelの環境構築

hato-codehato-code

compose.yml についてざっくり理解
https://qiita.com/gon0821/items/77369def082745d19c38

Docker Composeとは?

  • 複数のコンテナを定義し実行する Docker アプリケーションのためのツール
  • YAMLファイルを使い、アプリケーションのサービスを設定し、コマンドを1つ実行するだけで、設定内容に基づいた全てのサービスを生成・起動

コンテナを起動するまでの流れ

  1. DockerFileの作成
  2. docker-compose.ymlの作成
    このファイルは通常、プロジェクトのルートディレクトリに配置されるのが一般的です
  3. 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はサービスコンテナが起動したときに実行するコマンドを指定します。

hato-codehato-code

Docker Compose コマンド

(1)up 【コンテナ作成・起動】

$ docker compose up  # イメージが存在しないときはビルドする
docker compose up [OPTIONS] [SERVICE…]

主なオプション

  • 「-d」| バックグラウンドで実行する
  • 「–build」| イメージを再構築する

https://www.kagoya.jp/howto/cloud/container/dockercomposeup/

(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
hato-codehato-code

https://qiita.com/gon0821/items/f9e3bcbb6cb01d4ef7fa

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」で指示することによりベースイメージにキャッシュさせ覚えさせることで、何度もダウンロードせず済みます。

hato-codehato-code

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した方がおすすめです

hato-codehato-code

PHPのライブラリ管理ツール「Composer」

Composer は、PHP のプロジェクトが必要とするライブラリやパッケージを管理する「ライブラリ依存管理ツール」
https://weblabo.oscasierra.net/php-composer-1/

https://zenn.dev/ryuu/articles/what-is-composer-create-project
PHPのフレームワークなどでプロジェクトの雛形を作ろときに毎回composer create-project xxx とお決まりのコマンドを実行することが多いです。
npmやYarnでいうnpm initやyarn initみたいなもの

hato-codehato-code

https://webkaru.net/linux/chown-command/

chownコマンド

chown [オプション] ユーザー[:グループ] ファイル

オプション

-R 指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権を再帰的に変更します。