volumesの指定とDB周りで失敗したのでメモ
docker-compose.yml
php+mysql
version: '3' services: nginx: image: nginx:latest ports: - 58080:80 volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./www/html:/var/www/html # access_log /var/log/nginx/access.log; # error_log /var/log/nginx/error.log; - ./www/log/nginx:/var/log/nginx depends_on: - php links: - php php: build: ./php volumes: - ./www/html:/var/www/html depends_on: - db db: image: mysql:5.7 ports: - 13306:3306 volumes: - ./mysql/data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d environment: MYSQL_ROOT_PASSWORD: secret command: --innodb-use-native-aio=0 phpmyadmin: image: phpmyadmin/phpmyadmin:latest ports: - 8888:80 depends_on: - db
services:
この下に記述されたものがコンテナとして作成される。
コンテナ間の通信はこれが使われる。
nginx→phpの呼び出し例)phpコンテナの9000番ポート指定
fastcgi_pass php:9000;
volumes:
「:」の左側にローカルのフォルダ指定。右側にコンテナ側のフォルダ指定
※VirtualBoxで動かす場合は共有フォルダに指定がないと"not a directory\\\"\""」の様なエラーが出る。Windows10Homeで構築すると「c:/Users」がデフォルト
左側のフォルダ、またはファイルは存在しないとエラーになる。
右側のフォルダは、使用するアプリ「mysqlやnginxなど」の構築例を参考にするか、https://hub.docker.com/ の説明を参照する。
KitematicなどでコンテナのとこのDOCS→から開ける。※自前でビルドしたものは除く
ここの 例にある「docker run … -v xxx:yyyy …」の「-v」ところがvolumesの指定。
mysqlのとこの指定
volumes: - ./mysql/data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d1行目はコンテナを作り直してDBが残るよう、データファイルの作成場所をローカルに指定
2行目は初回起動時にSQLなどを流したい時にshやsqlファイルを格納しておく。
https://github.com/docker-library/mysql/tree/master/5.7
ここのDockerfileにてENTRYPOINT ["docker-entrypoint.sh"]が指定されている。
そしてCMD ["mysqld"]で指定した文字「mysqld」が引数として実行される。
docker-entrypoint.shの92行目、98行目が実行されて、195-197行目にてこのフォルダの中にファイルが全部実行される。
※ENTRYPOINTの記載がないDockerfile(例えばtomcatなどは記載がない)の場合はシェル実行される模様。
environment: MYSQL_ROOT_PASSWORD: secret
このコンテナの初期設定や追加のSQL実行などに必要
command: --innodb-use-native-aio=0
Windowsで動かすとエラーになる。Linuxのファイルシステムの機能を使わないように指定すれば起動する。
使用したvscodeのプラグイン
・Docker Compose(p1c2u.docker-compose)
*.ymlのDown,Up,Restartの実行と、エディタの補完機能
実行時はフォルダを選択しないといけない。何か設定がある?
・Docker Explorer(formulahendry.docker-explorer)
実行中のコンテナがわかるので、起動失敗などがわかる。
※Kitematicがリアルタイムに反映されない?ので代わりに使用している。
シェルで入ったり、再起動や削除、ログの確認などはvscodeで行っている。
特にログはKitematicだと小さのでvscodeの方をよく使用している。
使用した感想
ひな型のdocker-compose.ymlとフォルダを作っておけば構築が楽になりそう。
ソースコードのとこはsubtree?で別のリポジトリを指定してもよさそう
0 件のコメント:
コメントを投稿