前回のまとめた資料から実際テストしてみた内容をまとめてみました。(人^─^)
会社のLaravelプロジェクトのdockerの開発環境で試してました。
問題になりそうなところ
先ずdocker-compose.ymlを分析して同期する対象を決めてみました。
version: '2'
services:
mysqldata: <- *1
image: busybox
volumes:
- ./docker/mysql/storage:/var/lib/mysql
mysql:
build: ./docker/mysql
volumes_from:
- mysqldata <- *1
ports:
- ${DOCKER_NUM}4306:3306
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=app_db
php:
container_name: web_php
build: ./docker/php
ports:
- ${DOCKER_NUM}8888:80
- ${DOCKER_NUM}443:443
volumes:
- .:/var/www/html <- *2
links:
- mysql
smtp:
image: phpdockerio/mailhog:latest
ports:
- ${DOCKER_NUM}1025:1025
- ${DOCKER_NUM}8025:8025
「*1」 : DBA
-
DBのファイルをDocker化する場合はvolumesが適切かと思います。SyncするとDatabaseファイルの構成上、大変なことになると思います。
-
Docker for Macの場合はvolumesが遅いのでMacに直接にインストールしてDockerから接続するか、Docker化するがvolumnsはしない(DB内容はDBAに接続してみるかDockerの中に入ってみる)と思います。
「*2 」: 今回はこれだけdocker-syncの対象にしてみいます。
現在の速度
Top画面を表示してみました。全体的に遅い(google developer toolsでみると20秒以上)です。特にHtml(DB関連かな)が遅いですね。Σ(´Д`)ハッ!!
100Mのファイルを作成します。Docker内部で実行します。
# time dd if=/dev/zero of=speedtest bs=1024 count=102400
102400+0 records in
102400+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 86.2196 s, 1.2 MB/s
real 1m26.162s
user 0m1.110s
sys 0m8.190s
ウヒャ━━ヽ(゚Д゚)ノ━━!!
では、docker-syncを利用して同期してみましょう。
同期するように変更
先ず、docker-syncをインストール
# gem install docker-sync
Fetching: thor-0.20.3.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
つ〜〜 ( ´з`)・∵.ブッ
# sudo gem install docker-sync
次は監視するための物ですが、今回は使ってません。
# brew install fswatch
自分のPCはrsyncがインストールされているので、省略します。(´∀`*)ウフフ
実際、テストしてみると大きく同期なのでファイルの権限的な部分の問題が多かったので他のファイルも一部修正しました。
version: '2'
syncs:
document-root:
sync_strategy: rsync
notify_terminal: true
sync_host_ip: 'auto'
sync_host_port: 10872
sync_excludes: [ '.git', '.idea', 'vendor', 'docker', '*.yml' ]
sync_args: '-v'
src: ./
sync_userid: '33'
「sync_userid」についてはContainerのユーザー番号です。
version: '2'
services:
mysqldata:
image: busybox
mysql:
build: ./docker/mysql
ports:
- ${DOCKER_NUM}4306:3306
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=app_db
php:
container_name: web_php
build: ./docker/php
ports:
- ${DOCKER_NUM}8888:80
- ${DOCKER_NUM}443:443
environment:
- APACHE_RUN_USER=www-data
- APACHE_RUN_GROUP=www-data
volumes:
- document-root:/var/www/html
links:
- mysql
smtp:
image: phpdockerio/mailhog:latest
ports:
- ${DOCKER_NUM}1025:1025
- ${DOCKER_NUM}8025:8025
volumes:
document-root:
external: true
修正後の速度
DBを同期&マウントしてないので、「初期のデータベースを更新」が比較的に早い(25分くらい)ですね。キタ━━(p゚∀゚q)━━!!
では、100Mのファイルを作成します。
# time dd if=/dev/zero of=speedtest bs=1024 count=102400
# time dd if=/dev/zero of=speedtest bs=1024 count=102400
102400+0 records in
102400+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 1.41639 s, 74.0 MB/s
real 0m1.432s
user 0m0.140s
sys 0m1.240s
同じくTop画面を表示してみました。全体的に2秒くらいで画面が表示されました。♪(´ε` )
課題&疑問点
- ログファイルやコンテイナーのファイルを見るのが面倒で、速度に問題がないまま共有する方法が必要かと思います。
- 結局DBの問題ではないのか?DB以外はマウント(volumes)を利用しても使えるのではないか? 検証しないとわかりません。(;´v_v)ゞ
- 次回は「CE 17.12 (edge) 」を試してみましょう!! -> 初期状態の「docker-composer.yml」で試してみました。結果としては4・5秒くらいでTop画面が表示されました(DBの使用頻度にもよると思います)。テストはできるレベルですね。
興味がある方はこちらへ
Laravel + Docker + 開発環境
Docker For Macが遅い:対策 - Mutagen編