web-dev-qa-db-ja.com

Dockerを使用してCentOでPHP-FPM、Nginx、Mariadbをセットアップする

開発環境としてのVirtualBoxの使用からdockerに移行しようとしています。

VirtualBoxでは、主にPHP-FPM、Nginx、Mariadbをインストールしますが、Dockerでは、数日間試しても同じスタックを複製できません。

すべてのLEMP/LAMPスタックドッカーガイドのうち、これだけが機能します chentex/docker-nginx-centos 私には:

これがDockerfileのコードです

FROM centos:centos7
LABEL maintainer="Vicente Zepeda <[email protected]>"

ENV nginxversion="1.12.2-1" \
    os="centos" \
    osversion="7" \
    elversion="7_4"

RUN yum install -y wget openssl sed &&\
    yum -y autoremove &&\
    yum clean all &&\
    wget http://nginx.org/packages/$os/$osversion/x86_64/RPMS/nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
    rpm -iv nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
    sed -i '1i\
    daemon off;\
    ' /etc/nginx/nginx.conf

CMD ["nginx"]

これは箱から出してすぐに機能し、http://localhostにデフォルトのページが表示されます。

唯一の問題は、PHP-FPMとMariadbが含まれていないことです。

ファイルを変更してPHP-FPMとMariadbを追加しようとしましたが、redditで、nginx用のコンテナーとphp用のコンテナーのように、各コンテナーがサービスを提供する必要があることがわかりました...そしてその方法に迷いましたそれを作る

7
samayo

私のdocker-composeファイル(mariadb、php-fpm、nginx)を使用できます

https://github.com/matchish/skeleton

ただ走れ

docker-compose up -d

http:// localhost に「Helloworld」が表示されます。envファイルで環境変数を編集できます。

また、私はお勧めします https://laradock.io/

ターミナルはどのサービスでも実行できます

docker-compose exec db bash
docker-compose exec php-fpm bash
docker-compose exec nginx bash 

また、データベース初期化ファイルを追加することもできます。このファイルのマニュアルを読むhttps://github.com/matchish/skeleton/blob/master/mariadb/docker-entrypoint-initdb.d/createdb.sql.example

サービスを再開するには、コンテナを停止してから再開します

docker-compose stop nginx 
docker-compose up -d nginx

nginx confを編集する必要がある場合は、イメージを再構築する必要があります

docker-compose build nginx 
docker-compose up -d

Phpmyadminが必要な場合は、ファイルを作成するために追加できます

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  environment:
    PMA_Host: db
    PMA_PORT: 3306
  ports:
    - '8181:80'

これで、 http:// localhost:8181 でアクセスできます。

本番環境でcomposeを使用する最も簡単な方法は、プロジェクトディレクトリを本番サーバーにコピーしてdocker-compose up -dを実行することです。 logsディレクトリを除外できます。複数の作成ファイルを用意することをお勧めします( https://docs.docker.com/compose/production/

本番環境にデプロイするときは、ファイルのアクセス許可を保持することを忘れないでください

8
matchish

Dockerコンテナーは、仮想システム全体ではなく、コンテナー内で単一のサービスを実行するように設計されています(仮想ボックスや仮想マシンで見られるように)。

これは、理想的には、それぞれに1つのコンテナが必要であることを意味します。

  • Nginx
  • PHP
  • Mariadb

さらに、Centos dockerイメージは、他のユーザーが継承したり、OS固有のタスク(cURL呼び出しやシェルなど)を実行したりするためのベースとして設計されていますが、実際には必要ありません。

中間コンテナーを簡単にセットアップし、それらすべてを1つのプロジェクトとして管理できるdocker-composeを使用することをお勧めします。

docker-compose.ymlファイルの設定を次のように行うことをお勧めします。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./src:/(nginx config root folder)
      - ./config/site.conf:/etc/nginx/conf.d/site.conf
    links:
      - php
      - mariadb

  php:
      image: php:7-fpm
  mariadb:
      image: mariadb
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: example

次に、プロジェクトフォルダーに/config/フォルダーが作成されます。これには、nginx設定用のsite.confファイルが必要です。

また、プロジェクトフォルダに/src/フォルダが必要です。このフォルダには、プロジェクトのすべてのphp/webコードが含まれています。

docker-compose.ymlファイルのボリュームマウントは、それらをコンテナにロードします。ボリュームマウントは、Host folder pathcontainer folder pathをマッピングすることで機能します。一方が変更されると、もう一方もコピー/貼り付けのように更新されます。ファイルのアクセス許可を更新する必要がある場合があることに注意してください。

Mariadbの場合は、別のvolumeを追加して、コンテナー内のデータファイルをホストフォルダーにマップできます。さらに、mysqlポートを開いて、portsセクションに示すようにポート3306webセクションを追加することにより、mysqlワークベンチなどのツールでデータベースに問い合わせることができます。 mysql_root_passwordの値は、rootユーザーのパスワードを設定します。

これは、プロジェクトディレクトリからコマンドdocker-compose upを使用して起動できます。

Nginx(または他のサービス)を手動で再起動する必要がある場合は、コンテナーを停止して開始します。あなたはコマンドでそれをすることができます:

  • docker-compose up-コンテナを開始します
  • docker-compose down-コンテナを停止します

実行中のコンテナをバックグラウンドに送信する場合(ターミナルウィンドウを使用しないようにするため)、次を使用します:docker-compose up -d

ご不明な点がある場合や不明な点がある場合はお知らせください。回答を更新させていただきます。

8
Danoweb

Docker-composeは問題ありませんが、最も使いやすいわけではありません。開発環境をセットアップするのは絶対に簡単なので、実際に調べる必要があります Lando 。これは基本的にDockerの上のユーザビリティレイヤーであり、確かに洗練されています。

先に進む前に、WindowsバージョンのDockerはWin10 Proにのみ付属しているHyper-Vを使用しているため、LandoはWindows 10Homeでは実際には機能しないことを言及する必要があります。ただし、MacとLinuxは正常に動作します。

Landoには、作成する必要のある構成の量を減らすための開始点である「レシピ」があります。 DrupalまたはWordPressサイトを開発している場合は、そのレシピがあります。または、ゼロから何かを書いている場合は、LAMPとLEMPレシピ。

Landoをインストールした後に行う必要があるのは、アプリの構成ファイルを作成して起動することだけです。いくつかの質問をして構成を生成するlando initコマンドがありますが、難しいことではないので、.lando.yml構成ファイルを手動で作成することをお勧めします。

したがって、LEMPセットアップが必要な場合、構成は次のようになります。

name: put-your-site-name-here
recipe: lemp
config:
  php: '7.1'        # optional; defaults to the latest version
  webroot: web      # optional; defaults to the same directory as this file
  database: mariadb # technically optional but you did say you wanted this
  xdebug: true      # optional
  conf:             # optional; specify your own configs for nginx and/or php as follows
    server: my-config-path/nginx.conf
    php: my-config-path/php.ini

以上です!それを.lando.ymlファイルにダンプし、lando startを実行すると、すぐに実行中のアプリができます。

現在、最新のベータ版が最も安定したリリースですが、心配する必要はありません。毎日仕事で使っています。 GitHubからダウンロードしてください。

3
Garrett W.

ここには、2つの非常に正確なことを示唆するいくつかの答えがあります。

  1. 各サービスには、独自のDockerコンテナが必要です(ご存知のとおり)
  2. 一般的な方法には、カスタムdocker-composeファイル、またはVagrant、Laravel、Lando、LaraDockなどのプロビジョニングツールを使用してスタックにさらに別のレイヤーを追加します...

しかし、もっと重要なことは、このような単純なLEMPスタックサーバー(アプローチに関係なく複雑)のサービスごとに複数のDockerコンテナーをセットアップしようとして、これほど多くの困難とフラストレーションを経験している場合は、コンテナーアプローチ全体を捨てることを検討してください。 。

プロファイルによってWordPressサーバーを設定していると仮定すると、PHP Composer、またはEasyEnginev4にはDockerもすでに統合されているRootsTrellisのようなオプションがあります。

さらに軽いオプションは、私のチームの SlickStack で、コンテナーがなく、LEMPスタックサーバーをデプロイするために必要なのはBashコマンドの基本的な知識だけです。

あなたは、あまりにも多くのサードパーティのアプリに依存することに警戒していると言っているので、これらはそれらを削除します。

0
Jesse Nickles