2019年4月28日日曜日

dockerメモ

vscodeの拡張機能にdockerのプラグインがあったので試してみた。
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.d

1行目はコンテナを作り直して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

rootのパスワードの指定
このコンテナの初期設定や追加の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 件のコメント:

コメントを投稿