技術共有

【Docker-compose】php環境を構築する

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Docker-composeコンテナオーケストレーション

1. とは

Compose は Docker 社が発表したツール ソフトウェアで、複数の Docker コンテナを管理してアプリケーションを構成できます。 YAML 形式で構成ファイル docker-compose.yml を定義し、複数のコンテナ間の呼び出し関係を記述する必要があります。その後、コマンド 1 つでこれらのコンテナを同時に起動/停止できます。

  • · Docker-Compose は、Docker の公式オープン ソース プロジェクトであり、Docker コンテナ クラスターの迅速なオーケストレーションの実現を担当します。

2.何ができるの?

Docker では、各コンテナーで 1 つのサービスのみを実行することを推奨しています。Docker コンテナー自体が使用するリソースはほとんどないため、各サービスを個別に分離することが最善です。しかし、その場合、別の問題が発生します。

複数のサービスを同時にデプロイする必要がある場合、サービスごとに個別の Dockerfile を作成してからイメージとコンテナーを構築する必要がありますか? これは面倒なので、docker は docker-compose マルチサービス デプロイメント ツールを公式に提供しています。 。

たとえば、Web マイクロサービス プロジェクトを実装するには、Web サービス コンテナ自体に加えて、多くの場合、バックエンド データベース mysql サービス コンテナ、redis サーバー、登録センター eureka、さらには負荷分散コンテナなどを追加する必要があります。 。 。 。 。 。

Compose を使用すると、ユーザーは別の docker-compose.yml テンプレート ファイル (YAML 形式) を通じて、関連するアプリケーション コンテナーのセットをプロジェクトとして定義できます。

構成ファイルを使用してマルチコンテナー アプリケーションを簡単に定義し、単一のコマンドを使用してアプリケーションのすべての依存関係をインストールし、ビルドを完了することができます。 Docker-Compose は、コンテナーを管理および調整する方法の問題を解決します。

3. どこへ行くか

  • 公式サイト・https://docs.docker.com/compose/compose-file/compose-file-v3/
  • インストール

高速ダウンロード アドレス

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

実行可能権限を追加する

chmod +x /usr/local/bin/docker-compose
  • 1

インストールが成功したかどうかを確認する

docker-compose --version
  • 1
  • アンインストール

    sudo rm / usr/ local/ bin/docker-compose
    
    • 1

4. 核となる概念を構成する

  • Compose を使用するための 3 つのステップ

    各マイクロサービス アプリケーションを定義し、対応するイメージ ファイルを構築するための Dockerfile を作成します。

    docker-compose.yml を使用して完全なビジネス ユニットを定義し、アプリケーション全体でさまざまなコンテナ サービスを配置します。

    最後に、 docker-compose up コマンドを実行してアプリケーション全体を起動および実行し、ワンクリックでデプロイを完了してオンラインにします。

  • 共通コマンドを作成する

    docker-compose -h # ヘルプを表示

    docker-compose up # すべての docker-compose サービスを開始します

    docker-compose up -d # すべての docker-compose サービスを開始し、バックグラウンドで実行します

    docker-compose down # コンテナ、ネットワーク、ボリューム、イメージを停止して削除します。

    docker-compose exec yml のサービス ID # コンテナ インスタンス内に入力します

    docker-compose exec docker-compose.yml ファイルに書き込まれたサービス ID /bin/bash

    docker-compose ps # docker-compose によって現在調整されている実行中のコンテナをすべて表示します

    docker-compose top # docker-compose によって調整された現在のコンテナ プロセスを表示します

    docker-compose ログのサービス ID yml # コンテナ出力ログの表示

    docker-compose config # 構成を確認する

    docker-compose config -q # 構成を確認し、問題がある場合にのみ出力します

    docker-compose restart # サービスを再起動します

    docker-compose start # サービスを開始します

    docker-compose stop # サービスを停止します

docker-machine コマンドのインストール

 base=https://get.daocloud.io/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  • 1
  • 2
  • 3

5. 実戦:LinuxでDNSサーバーを設定し、lemp環境を構築(Nginx + MySQL (MariaDB) + PHP)

必要とする

1) Linux 仮想マシンで、IP アドレスを 192.168.90.215 (x は学生 ID の下 3 桁、y は自分で指定します) に構成すると、仮想マシンはインターネットに正常にアクセスできます。

2) DNS サーバーを構成します。ドメインは cr.com (abc は名前のイニシャルです) です。構成が完了したら、nslookup を使用して順方向および逆方向の解決を確認します。

3) LEMP (つまり、Nginx + MySQL (MariaDB) + PHP) を構成し、実際のホストを通じて www.cr.com (abc はイニシャル) にアクセスして、構築された LEMP にアクセスします。 (ローカル解決のためにホスト ファイルを変更することはできませんが、独自に構成された DNS を使用する必要があります)

6.DNS解決の構成

まず、Linux の静的 IP を設定します http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip (開けない場合は、以下のアドレスを変更してください)

//やること

/etc/named.conf ファイルを編集する

vim /etc/named.conf
  • 1

リッスンオンとクエリの値を任意に変更します

cr.com を 192.168.90.215 に解決するように DNS を構成する

vim /etc/named.rfc1912.zones 
  • 1

ファイルの最後に追加

zone "cr.com" IN {
   type master;
   file "cr.com.zone";
  allow-update { none; };
};
zone "215.90.168.192.in-addr.arpa" IN {
        type master;
        file "com.cr.loop";
        allow-update { none; };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

:wq 保存する

対応する構成ファイル vim /var/named/com.cr.loop を編集します。

以下を追加します

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     cr.com.
        NS      ns.cr.com.
ns      A       192.168.90.215
201     PTR     www.cr.com.
201     PTR     email.cr.com.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

vim /var/named/cr.com.zone を編集します

以下を追加します

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.90.215
        AAAA    ::1
        NS      ns.server.com.
ns      IN A    192.168.90.215
www     IN A    192.168.90.215
email   IN A    192.168.90.215
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

DNSを再起動します

systemctl restart named
  • 1

DNSステータスの表示

systemctl status named
  • 1

正常に開始されました

nslookup cr.com の順方向解析

nslookup 192.168.90.215 の逆解析

lemp を構成する

docker-compose.yml ファイルを /mydocker/lemp に書き込みます

vim /mydocker/lemp/docker-compose.yml 次の内容を入力します

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: bookmarks
        MYSQL_USER: cr
        MYSQL_PASSWORD: cr123

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

/mydocker/lemp/ に nginx/Dockerfile を作成します

埋める

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf
  • 1
  • 2
  • 3

default.confを作成する

以下の内容を入力してください

 

server {

  listen 80 default_server;

  root /var/www/html;

  index index.html index.php;

 

  charset utf-8;

 

  location / {

try_files $uri $uri/ /index.php?$query_string;

  }

 

  location = /favicon.ico { access_log off; log_not_found off; }

  location = /robots.txt  { access_log off; log_not_found off; }

 

  access_log off;

  error_log  /var/log/nginx/error.log error;

 

  sendfile off;

 

  client_max_body_size 100m;

 

  location ~ .php$ {

  fastcgi_split_path_info ^(.+.php)(/.+)$;

  fastcgi_pass php:9000;

 fastcgi_index index.php;

 include fastcgi_params;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_intercept_errors off;

fastcgi_buffer_size 16k;

 fastcgi_buffers 4 16k;

  }

 

  location ~ /.ht {

 deny all;

  }

}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

/mydocker/lemp/ に php/Dockerfile を作成します。

埋める

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Dockerコンテナをオーケストレーションする

 docker-compose up -d 
  • 1

コンテナーの実行ステータスを表示する Docker ps

正常に開始されました

このマシンはIP経由でphp環境とnginx環境にアクセスします。

アクセス成功

ローカル DNS サーバーを仮想マシン (192.168.90.215) として構成します。

cmd ウィンドウを開き、cr.com で ping テストを実行します。

ping に成功しました

ドメイン名を介して構築されたphp環境にアクセスします

nginx設定ファイルを変更する

最終的なドメイン名は Web サイトに直接アクセスします