LoginSignup
0
0

More than 3 years have passed since last update.

Dockerって何からスタート!(自分なりのアウトプット)

Posted at

Dockerって何??

開発者やシステム管理者が、コンテナでアプリケーションを 構築(build)、実行(run)、共有(share)するためのプラットフォームのことを指します。

イメージとコンテナについて

コンテナとは、ホストマシン(例: 自分のpc)の上に仮想的に利用する箱みたいなもの。ホストマシンとは別の世界を作る感じ。
イメージとは、コンテナの実行に必要な概念としてのパッケージ(ファイルやメタ情報の集合体)である。
参考サイトイメージとコンテナの違いについて
文字より下記の写真の内容のほうがわかるかもです!!
Dockerの内容.png

実際のコードを利用して

今回はPHPのDockerファイルとdocker-compose.ymlの情報を解説していきます!
その前にDockerfileとdocker-compose.ymlの違いについて
・Dockerfileには個々のコンテナを構築するために必要な細かい手順(どんなツールをインストールするかなど)を記載する場所
・docker-compose.yamlには個々のコンテナの起動定義(どんな感じで起動していくか)を記載する場所
・要は、Dockerfileは個々のコンテナに関する説明書、docker-compose.ymlはコンテナ全体に関する説明書
コマンド操作については、他の方の投稿内容を参考サイトとして使用します。
Dockerコマンド一覧

Dockerfileの記述

info/php/Dockerfile
FROM php:8.0-fpm-buster
#この記述でphp8.0のベースイメージを指定して利用しますよといった命令文
LABEL maintainer="ucan-lab <yes@u-can.pro>"
#LABEL命令はイメージに対してメタデータを追加します。
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
#シェル形式のコマンドに使用

# timezone environment
ENV TZ=UTC \
  # locale
  LANG=en_US.UTF-8 \
  LANGUAGE=en_US:en \
  LC_ALL=en_US.UTF-8 \
  # composer environment
  COMPOSER_ALLOW_SUPERUSER=1 \
  COMPOSER_HOME=/composer
#ENV命令は環境変数を設定します。

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer
#新しいファイルまたはディレクトリをコンテナのパスにコピーします。--from オプションを付けると別のイメージのファイルを指定できます。(マルチステージビルド)composer のインストールがとてもシンプルになっています。

RUN apt-get update && \
  apt-get -y install git libicu-dev libonig-dev libzip-dev unzip locales libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/* && \
  locale-gen en_US.UTF-8 && \
  localedef -f UTF-8 -i en_US en_US.UTF-8 && \
  mkdir /var/run/php-fpm && \
  docker-php-ext-install intl pdo_mysql zip bcmath && \
  docker-php-ext-configure gd --with-freetype --with-jpeg &&\
  composer config -g process-timeout 3600 && \
  composer config -g repos.packagist composer https://packagist.org && \
  docker-php-ext-install -j$(nproc) gd exif
#RUN命令は現在のイメージの上に任意のコマンドを実行した結果をコミットします。Laravelに必要なライブラリー等のインストールを行っています。


COPY ./infra/php/php-fpm.d/zzz-www.conf /usr/local/etc/php-fpm.d/zzz-www.conf
COPY ./infra/php/php.ini /usr/local/etc/php/php.ini
#ホスト側に置いているPHPの設定ファイルのコピーをしているだけです。

WORKDIR /work/laravel
#WORKDIR命令はワークディレクトリを設定します。

docker-compose.ymlの記述

app, web, db の3つのコンテナを定義しています。

docker-compose.yml
version: "3.3"
#docker-composeのバージョン
volumes:
  php-fpm-socket:
  db-store:
#名前付きボリューム(ボリュームとは、データを永続化できる場所のことである。外部HDDのようなイメージ。)をマウント(利用できる状態にすること)しています。
#unixソケット(php-fpm-socket)のボリュームは app コンテナと web コンテナで共用したいのでマウントしてます。
#unixソケットとは、まず、ソケットの意味「受け口、接合部」の意味。「UNIXドメインソケット」とは、LinuxなどのUNIX系OS(オペレーティングシステム)で実行されるプロセス間のデータ通信の終点に使われるインターフェースのことをいう。
#データベース(db-store)のデータはコンテナを破棄しても残しておきたいのでボリュームとして定義しています。
services:
  app:
    build:
      context: .
      dockerfile: ./infra/php/Dockerfile
    volumes:
      - php-fpm-socket:/var/run/php-fpm
      - ./laravel:/work/laravel
    environment:
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_PORT=3306
      - DB_DATABASE=${DB_NAME:-laravel_local}
      - DB_USERNAME=${DB_USER:-phper}
      - DB_PASSWORD=${DB_PASS:-secret}
#app(アプリケーションサーバ)コンテナの定義です。PHPを実行します。
#build で ./infra/php/Dockerfile を指しています。
#volumes で名前付きボリュームとホストパスをコンテナにマウントしてます。
#../Laravel:/work/backendはLaravelのソースコードをマウントしてます。
#environmentで環境変数を定義している。 

  web:
    build:
      context: .
      dockerfile: ./infra/nginx/Dockerfile
    ports:
      - ${WEB_PORT:-80}:80
    volumes:
      - php-fpm-socket:/var/run/php-fpm
      - ./laravel:/work/laravel
#web(ウェブサーバ)コンテナの定義です。PHP以外の静的コンテンツを返却します。
#ports ポートを公開します。(HOST:CONTAINER)
#volumes で名前付きボリュームとホストパスをコンテナにマウントしてます。
#nginxのデフォルトのポート番号は 80 番です。

  db:
    build:
      context: .
      dockerfile: ./infra/mysql/Dockerfile
    ports:
      - ${DB_PORT:-3306}:3306
    volumes:
      - db-store:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=${DB_NAME:-laravel_local}
      - MYSQL_USER=${DB_USER:-phper}
      - MYSQL_PASSWORD=${DB_PASS:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
#db(データベース)コンテナの定義です。
#build で ./infra/mysql/Dockerfile を指しています
#ports ポートを公開します。
#volumes で名前付きボリュームとホストパスをコンテナにマウントしてます。
#MySQLのデフォルトのポート番号は 3306 番です。
#environmentで環境変数を定義している。 

参考にしたサイト

この方の内容で解説していただいており、そちらを主に参考に使用しました。
ほとんど、この方の情報を基に書いたので感謝しかないですが、これを自分のものにしていきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0