開発環境としての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用のコンテナーのように、各コンテナーがサービスを提供する必要があることがわかりました...そしてその方法に迷いましたそれを作る
私の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/ )
本番環境にデプロイするときは、ファイルのアクセス許可を保持することを忘れないでください
Dockerコンテナーは、仮想システム全体ではなく、コンテナー内で単一のサービスを実行するように設計されています(仮想ボックスや仮想マシンで見られるように)。
これは、理想的には、それぞれに1つのコンテナが必要であることを意味します。
さらに、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 path
:container folder path
をマッピングすることで機能します。一方が変更されると、もう一方もコピー/貼り付けのように更新されます。ファイルのアクセス許可を更新する必要がある場合があることに注意してください。
Mariadbの場合は、別のvolume
を追加して、コンテナー内のデータファイルをホストフォルダーにマップできます。さらに、mysqlポートを開いて、ports
セクションに示すようにポート3306
にweb
セクションを追加することにより、mysqlワークベンチなどのツールでデータベースに問い合わせることができます。 mysql_root_password
の値は、rootユーザーのパスワードを設定します。
これは、プロジェクトディレクトリからコマンドdocker-compose up
を使用して起動できます。
Nginx(または他のサービス)を手動で再起動する必要がある場合は、コンテナーを停止して開始します。あなたはコマンドでそれをすることができます:
docker-compose up
-コンテナを開始しますdocker-compose down
-コンテナを停止します実行中のコンテナをバックグラウンドに送信する場合(ターミナルウィンドウを使用しないようにするため)、次を使用します:docker-compose up -d
ご不明な点がある場合や不明な点がある場合はお知らせください。回答を更新させていただきます。
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からダウンロードしてください。
ここには、2つの非常に正確なことを示唆するいくつかの答えがあります。
docker-compose
ファイル、またはVagrant、Laravel、Lando、LaraDockなどのプロビジョニングツールを使用してスタックにさらに別のレイヤーを追加します...しかし、もっと重要なことは、このような単純なLEMPスタックサーバー(アプローチに関係なく複雑)のサービスごとに複数のDockerコンテナーをセットアップしようとして、これほど多くの困難とフラストレーションを経験している場合は、コンテナーアプローチ全体を捨てることを検討してください。 。
プロファイルによってWordPressサーバーを設定していると仮定すると、PHP Composer、またはEasyEnginev4にはDockerもすでに統合されているRootsTrellisのようなオプションがあります。
さらに軽いオプションは、私のチームの SlickStack で、コンテナーがなく、LEMPスタックサーバーをデプロイするために必要なのはBashコマンドの基本的な知識だけです。
あなたは、あまりにも多くのサードパーティのアプリに依存することに警戒していると言っているので、これらはそれらを削除します。