質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

解決済

1回答

2190閲覧

Dockerにおいてタスクランナーを使用するWEBサイト制作の構造のベストとは・・

kishiasa

総合スコア12

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

0クリップ

投稿2022/05/09 09:05

前提・実現したいこと

WEBサイトの制作をしています。
Wordpressのテーマ(PHP)と、scssやjs画像圧縮をgulpで行っています。

dockerを使用すると開発者のnodeやgulpのバージョンに依存しなくなるとみたので、導入を試みています。
チュートリアルなどで、wordpressとデータベースは立ち上げられました。とても簡単で感動しています。
そこからscssのコンパイルはどういうふうに設定するのかがわからず、ご助力いただければと思っています。。。

今までのフォルダ構成(今回のdockerを導入する前のです)

- public(srcのコンパイル出力先/wordpress themeフォルダにアップ) - src   L phpファイル群   L scssファイル群   L jsファイル群   L imgファイル群 -package.json -package-lock.json -gulpfile.js -node_modules

作成したdocker-compose.yml

docker

1version: '3' 2 3services: 4 wordpress: 5 image: wordpress:latest 6 depends_on: 7 - db 8 ports: 9 - "8001:80" 10 restart: always 11 environment: 12 WORDPRESS_DB_HOST: db:3306 13 WORDPRESS_DB_USER: wordpress 14 WORDPRESS_DB_PASSWORD: wordpress 15 volumes: 16 - ./src/php:/var/www/html/wp-content/themes/folder 17 18 db: 19 image: mysql:5.7 20 volumes: 21 - db_data:/var/lib/mysql 22 restart: always 23 environment: 24 MYSQL_ROOT_PASSWORD: somewordpress 25 MYSQL_DATABASE: wordpress 26 MYSQL_USER: wordpress 27 MYSQL_PASSWORD: wordpress 28

質問事項

  • 開発者環境に依存させないように、dockerで立ち上げるコンテナ内にnodeやgulpをインストールして、コンパイルさせていきたいのですが、方法がわかりません。
  • フォルダ構造も今までの状況で使っていたものなので、dockerに合わせた形があれば知りたいなと思っています

皆様のお知恵をぜひお貸しくださいませ。。。m(_ _)m
よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず解決方法から
私の思いつくところだと方法は2つあります。

1.起動中のcontainerに直接インストールする(初心者向け)
起動しているwordpress containerに対して直接nodeやgulpをインストールし、そのコンテナをイメージ化します。
流れとしては

  • sshでコンテナにログイン
  • 必要な物をインストール(node, gulp)
    • docker imageは最小限のミドルウェアで構成されている為、付随して必要な物をインストールする必要があると思います。
  • node, gulpの動作確認
  • docker コンテナのイメージ化
  • dockerimageを開発者に共有

上記の方法はdockerの利点であるdockerfileによるInfrastructure as Code(IaC)の恩恵を受けられませんが、最初のとっかかりとしてはやりやすいと思います。

2.dockerfileによるdockerimageの作成
dockerfileを作成し、独自のdockerimageを作成する方法です。
1のIaC版です。
ただ、ある程度dockerの知識が必要かと思います。

  • dockerfileの作成
    • wordpressをベースイメージに指定
    • 必要な物をインストールするコマンドを記述
    • portやwordpressの起動コマンドを記述
  • dockerfileを指定してdockerimageを作成
  • 問題なければdockerfileと関連ファイル(あれば)を開発者に共有

こちらは、docekrfileの作成部分にある程度知識が必要です。
例えば、今は試しなのでwordpress:latestを指定しているかもしれませんが、dockerfileにも同じ記述をすると今実行した人と半年後に実行した人では(最新バージョンが異なり)インストールされるwordpressのバージョンが異なります。なのでこれを考慮してバージョンを指定して記述をしたほうがいいなどの知識です。
docekrをついでに学びたいのであればこちらから試したほうがいいと思います。

ディレクトリ構成に関しては、wordpressでの開発経験はないので一般的なコメントしかできませんが、そのままのディレクトリをcontainerのどこかディレクトリにマウントすればいいと思います。
マウントしてホストOS側でエディタを使用し開発しつつ、dockerコンテナ内ではwordpressを立ち上げながらgulpの監視プロセス(watchとか)を走らせればよいかと思います。
また、コンテナの起動コマンドにwordpressの立ち上げ+gulpのコマンドを合わせてもよいでしょう。
ホストOSからgulpのコマンドを実行する方法もあります。(docker-compose exec サービス名 gulp実行コマンドでできると思います)
この辺は経験者からの回答を待った方がよいかと思います。

最終的には2の方法をとったほうが、開発しているソースとdockerfileをgitリポジトリを使用して共有する方法になると思います。
1の方法だとdockerimageとソースを別々に共有する必要があります。
(dockerimageのリポジトリとソースコードのgitリポジトリを使用する感じです)

最後に、個人的な考えですが、docekrは開発環境というよりは本番環境用のツールだと思っています。
dockerfileを使用するとイメージがわくかもしれませんが、基本的に完成したソースコードをdockerimageに固めてそれを本番環境にデプロイすることに特化しています。
他の利点として、スケールアウトや障害発生時の再起動など、同じコンテナをいくつも立ち上げたり、何度も立ち上げたりすることがあります。
なので、コンテナの中身をどんどん変えていく(開発環境)物としては少し扱いにくさを個人としては感じます。

開発環境としては、例えばvoltaなんかを全員が使用すれば、package.jsonの中に使用するnodeのバージョンが記載され、全員同じバージョンで開発ができます。
また、gulpに関してもpackage.jsonにバージョン情報があり、モジュールはnode_modulesにインストールされるので、環境依存は起こらない気がします。
(この辺は個人的な考えです)

そのあたり、うまくやっている人はいるかもしれませんが、とりあえず回答した1又は2の方法でやりたいことは実現できるはずです。

dockerは用意されたベースイメージを使う分には簡単ですが、自分の環境に合わせて作るとなるとある程度知識が必要です。
そうなるとdocekrでなくてもよくないか?となる(私は結構なった)ので、試して実感してもよいですが、すべてが楽になるわけではないと思っていることだけコメントします。

(長くなりすぎてしまいすみません。)

投稿2022/05/10 04:08

YuuT

総合スコア673

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kishiasa

2022/05/11 05:09

こんなに丁寧に回答をいただきありがとうございます・・・! ご提示いただいた2の方のやり方ができるように、改めて学習を進めてみたいと思います。 どう検索したらいいか行き詰っていたので、指針が見えてきました。本当にありがとうございます。 もう一つ、質問させていただいてもいいでしょうか。。。 docker-compose.ymlとDockerfileの使い分けがわかっていないのですが、 docker-compose.ymlに集約して記載することも可能なのでしょうか・・・? こちらも改めて調べてみたいと思っていますが、もしお時間があればご教示いただけると幸いです。
YuuT

2022/05/11 05:54

参考になる部分があり良かったです。 dockerfileとdocker-compose.ymlの使い分けに関してですが、そもそも両者役割が異なります。 今回使用したいと考えているdockerは単純に1つのコンテナを生成するツールであり、コンテナの構成をコードでdockerfileに記述し、そこからコンテナイメージを生成するのがdockerfileの役割です。(生成したイメージからコンテナを立ち上げます。) それに対して、docker-composeはdockerを便利に使用する為の別ツールで、複数のdockerコンテナを管理するものです。(冗長化/クラスタのように、さらに多くのコンテナを管理する際にはまた別のdocker swarmやkubernetesが使われます) docker-composeはdocker-compose.ymlに記述した複数のdockerimage(またはdockerfile)を一気に立ち上げる為のいわゆる管理ツールです。(コンテナのport設定などををファイルに記述ができ、必要に応じて変更できるといった利点もありますが) 今回の場合は、wordpressコンテナとmysqlコンテナをdocker-compose.ymlに記述し、1つのコマンド`docker-compose up`で立ち上げています。 dockerのみを使用する場合は、wordpressを立ち上げるコマンドとdbを立ち上げるコマンドを二つ実行する必要があります。 既存のイメージが(DockerHubに)存在する場合、ymlファイルに`image: wordpress:latest`と記述しますが、dockerfileから生成する自作イメージを使用する場合はimageタグは使用せず`build: [dockerfileのpath]`を指定します。 なので、docker-composeにdockerfileを集約することはできず、docker-composeからdockerfileを呼び出すイメージです。 色々なサイトで色々な方向から解説がされていると思うので、そちらも参考にしたり、実際に手を動かしてみるとより理解が深まると思います。 読みにくいかもしれませんが公式ページでも説明はされているので、そのあたりも抑えておくといいと思います。 https://docs.docker.com/compose/ (私以外からの回答も知りたい場合は、別途質問を立ち上げてもよいでしょう。) 余談ですが、今はdocker-composeの機能はdockerに取り込まれているようですね。 1年くらい前までは前述したように別のツールで、docker-composeというコマンドを使用する必要がありました。 今はdocker compose(docekrコマンドにcompose引数を渡す)コマンドで使えることをつい先ほど知りました。 確かにこれだとすみ分けなど少し混乱しそうですね。
kishiasa

2022/05/12 03:45

ご丁寧にありがとうございます。 dockerの書き方も変遷があるようですね。 まずは記述いただいた元の形でしっかり理解をしてみたいと思います。 お時間をいただき誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問