すみません。
Docker初学者です。
Dockerfileでイメージを生成し、docker-compose.ymlファイルに記述して、その2つのファイルをチームの人に共有させることで、チームの環境開発ができるという認識で大丈夫でしょうか?
また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。
どうぞよろしくお願いします。
ちなみに今はLaravel5.6、php7.2,mysql5.7系の環境を作ろうと思っています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
開発イメージ
結論から書きますが、ざっくり以下のように共有して開発を進めることが多いです。
0. Dockerfileでイメージ作成
0. DockerイメージをDockerレジストリ(Docker Hub等)にプッシュ
0. プロジェクトにdocker-compose.ymlを含め、Gitリポジトリ(Github等)にプッシュ
0. Dockerfileとdocker-composeを含んだプロジェクトをGitリポジトリからプル
0. docker-composeを実行(ここで2でプッシュしたイメージが自動的にプルされます)
※1,2に関しては、Dockerの基礎知識が必須な上、学習コストも低くはないので、
kawaxさんの言うようにlaradockのようなオープンソースを利用する人も多いと思います。
回答
Dockerfileでイメージを生成し、docker-compose.ymlファイルに記述して、その2つのファイルをチームの人に共有させることで、チームの環境開発ができるという認識で大丈夫でしょうか?
上記の通り、認識は合っているように思います。
Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。
前提として別にDocker Composeを使わなくても開発できます
。
それなのに、なぜDocker Composeを使って開発するかというと作業を効率化するため
です。(みんな使ってるから使ってるという人も多いと思いますが。。。)
イメージやコンテナ名以外にdocker-compose.ymlに何を記述するかというと、基本的にはdocker実行コマンドと同等の内容
です。
だからDocker Composeを使わなくても開発できるのです。
例えば、docker-composeのportsはdocker runコマンドの-pオプションに該当します。
上記は数多くのオプションの中の一例ですが、このようなオプションをdocker実行の度にコマンドで実行するのは面倒だと思いませんか?
しかも自分だけでなくみんなに実行方法を共有するとなるとなおさら面倒ですよね。
そこでDocker Composeが登場するわけです。
可読性の高いyml形式で、あらかじめ実行時のオプションを定義し、それをメンバーと共有することで、開発作業の効率化が図れるわけです。
上記の他にもdocker-composeには多くの機能がありますが、ここでは質問に対する回答にとどめさせていただきます。
投稿2018/05/08 11:00
総合スコア4258
0
また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。
一言で言ってしまえばdocker-compose.ymlはdocker run
のパラメータを記述するファイルです。
(他にも様々な恩恵はありますが、docker run
を別ファイルに逃がす役割が最も大きいでしょう)
質問文にMySQLとありますのでMySQLサーバを見ていきましょう。
MySQL - Docker Hubに要件が色々と書いてあります。
これを元にdocker run
コマンドを作りましょう…最初からDBや各種テーブルは作成しておいたほうが良いですよね。
できました。大体こんな感じのコマンドを毎回打ち込んでください。
docker run --name mysql -v /my/custom:/etc/mysql/conf.d -v /my/sqlfiles:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=testdb -d mysql
……って長っ!!こんな呪文覚えきれないですよ。
続いてWebサーバのコンテナです。
コンテナ(仮想マシン)が切り離されてしまっているので、vagrantみたいにlocalhost:3306で繋ぎに行けません。
そこでDockerではdocker run
と同時にネットワークに所属して、nameで指定したコンテナにアクセスに繋ぐ事が可能です。
基本的にDocker流儀に従う場合はDBへの接続情報等は環境変数で管理するのが良いとされているので、これまた長い呪文を使って立ち上げる事になります。
ま、まぁ、一回っきりなら許せますね。
1ヶ月経過し、開発が中盤に差し掛かった所で同僚がこう話しかけてきました。
「MySQLのカラム更新したからよ。定義ファイル修正したから適用しておいてくれ」
まじかよ…折角立ち上げたMySQLのコンテナを削除して立ち上げ直しです。
1ヶ月前に打ち込んだMySQLコンテナを起動するdocker run
のコマンド、覚えていますか?
まぁ、覚えていませんよね。
じゃあシェルスクリプトにMySQLのdocker run
コマンドをベタッとコピペして…
それもいい選択肢ですが少し待って下さい。
こんな時の為に用意されているのがdocker-composeです。
さっきのdocker run
コマンドを元に、こんな感じでdocker-compose.ymlを作っておきましょう。
何となくdocker run
で出てきたオプションが盛り込まれてる事が分かります。
YAML
1version: "3" 2services: 3 mysql: 4 image: mysql 5 environment: 6 MYSQL_ROOT_PASSWORD: my-secret-pw 7 MYSQL_DATABASE: testdb 8 volumes: 9 - ./custom:/etc/mysql/conf.d 10 - ./sqlfiles:/docker-entrypoint-initdb.d 11 ports: 12 - 3306:3306 13 expose: 14 - 3306 15 networks: 16 - back 17 web: 18 image: debian 19 # 貴方のWebサーバの情報 20 depends_on: 21 - mysql 22 networks: 23 - back 24networks: 25 back:
使う時はdocker-composeコマンドを利用します。
Bash
1# コマンドの確認 2$ docker-compose 3Define and run multi-container applications with Docker. 4 5# 定義ファイルで記述したコンテナの一覧のみ表示される 6$ docker-compose ps 7 8# 定義ファイルの順番にコンテナを順次立ち上げ、-dなのでバックグラウンド扱いにする 9$ docker-compose up -d 10 11# mysqlのログを参照、-fはtailと同義(Ctrl+cで抜ける) 12$ docker-compose logs -f mysql 13 14# あ、ちょっとコンテナの中に入りたい 15$ docker-compose exec mysql bash 16 17# 終わったら停止 18$ docker-compose stop 19Stopping web_1 ... done 20Stopping mysql_1 ... done 21 22$ docker-compose rm -f 23Removing web_1 ... done 24Removing mysql_1 ... done
毎回この長ったらしいコマンド名を入力するのは疲れると思いますのでaliasでも作っておくと捗るかもしれませんね。
docker-composeの旧名はfigらしいので、aliasを作るならfigがオススメです。
コマンドの豊富さを見れば何となく分かるかと思いますが、
起動パラメータや依存コンテナが分かるということは、コンテナの立ち上げ順番を保証してくれたり、
一緒に起動や停止処理までしっかり面倒見てくれるので、様々な恩恵を受ける事ができます。
(シェルスクリプトにベタッとrunコマンドを貼り付けるだけとは大違いですね)
同僚が環境の事を質問してきたとしても、
「docker-compose.ymlを見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。
こんな風にDockerfileと併用することでサーバの要件としても使えますので、とても便利です。是非覚えましょう。
投稿2018/05/08 11:10
編集2018/05/08 16:09総合スコア21400
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
そもそもLaravelならHomesteadでいいのでは。
公式が用意してる完璧な開発環境があるのにわざわざ自分で作る理由がない。
Docker使うとしてもlaradockのようなものを使う。
https://github.com/laradock/laradock
投稿2018/05/08 10:03

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/08 12:47