$ git clone --depth=1 -b v5.5.1 https://github.com/LaraDock/laradock.git $ cd laradock $ cp env-example .env $ vi .env …とこのようにまずはドキュメントに従って導入を行っていました しかし
問題1:Laradockを導入したが起動しない
$ docker-compose up -d nginx mysql ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`. $ docker-machine start default Host does not exist: "default" defaultを設定しないといけない?
$ docker-machine create --driver virtualbox default をすればよい、とのことだったので実行してみたけれどエラー発生 そもそもDocker for Macはvirtualbox使わなくても良くなった、との記述を見かけた気が…
解決:boot2dockerとDocker for macが混在していた
Laradockの問題ではなく、dockerの問題でした どうやらDocker for Macを入れる前にboot2dockerをhomebrewで入れていたようで、 PC内にdockerが2つある状態でした ということでboot2dokerを削除
brew uninstall docker boot2docker docker-compose docker-machine 念のためDocker for Macもアンインストールして入れ直し、もう一度動かしてみた所無事にLaradockを動かすことができました! まぁこんなことしでかすなんて自分くらいしかいないと思うので参考にはならないかもしれませんが、思い出の一つとして…
$ docker-compose up --build -d nginx mysql $ docker-compose exec mysql bash ERROR: No container found for mysql_1 ログを確認
$ docker logs laradock_mysql_1 2017-08-01T08:01:50.339823Z 0 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800! 解決:MySQLのデータファイルを削除このエラーに関しては.envファイルを確認し、MySQLのデータファイルを削除した所、起動に成功しました
$ vi .env ⇐ laradock/.envを確認 10 ### Data Path: 11 # For all storage systems. 12 13 DATA_SAVE_PATH=~/.laradock/data $ cd ~/.laradock/data $ mv data data.old Laradockが動かない…動かない…と入れ直しを繰り返した時にゴミファイルとして残ってしまっていた模様
$ docker-compose exec mysql bash # mysql --version mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper # exit exit EC2側環境作成PHP、MySQL、nginxインストール後… 以下のファイルを編集
$ vi /etc/php-fpm.d/www.conf 24 user = nginx 25 ; RPM: Keep a group allowed to write in log dir. 26 group = nginx
48 listen.owner = nginx 49 listen.group = nginx 50 listen.mode = 0660 $ vi /etc/nginx/nginx.conf 40 server {
$ docker volume ls DRIVER VOLUME NAME local 17e11ebb9fc56e18d99b175d77b0c37b90da561bff07d601279ab7bfc0b0f414 local test-volume と言った感じでデータボリュームがホスト上に出来ます。 ランダム文字列な名前のほうは前記docker runのように名前未指定な場合によろしくやってくれてるわけです。問題なのが、コンテナを削除しても基本的にこれが残るってこと。
$ docker-compose up -d Creating mariadb-datastore Creating mariadb-db 起動状態の確認。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad95de15a67a mariadb_jp:10.1 "docker-entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:23306->3306/tcp mariadb-db 3515029a71b5 busybox "sh" About a minute ago Exited (0) About a minute ago mariadb-datastore Sequel Pro を使いポートフォワードした23306にユーザーfooでfoodbデータベースに接続して初期化スクリプトが動作していることを確認できました。
クライアントコンテナでの接続用に作成したclientスクリプトを調整。
client
docker run -it --link mariadb-db:mysql --rm mariadb_jp:10.1 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' 接続して動作確認します。
$ ./client Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 5 Server version: 10.1.16-MariaDB-1~jessie mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | foodb | | information_schema | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)
MariaDB [(none)]> select Host, User from mysql.user; +------+------+ | Host | User | +------+------+ | % | foo | | % | root | +------+------+ 2 rows in set (0.00 sec)
MariaDB [(none)]> USE foodb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed MariaDB [foodb]> SHOW TABLES; +-----------------+ | Tables_in_foodb | +-----------------+ | users | +-----------------+ 1 row in set (0.00 sec)
MariaDB [foodb]> SELECT * from users; +------+--------+ | id | name | +------+--------+ | 1 | first | | 1 | second | +------+--------+ 2 rows in set (0.00 sec)
$ docker-compose up -d Creating percona-datastore Creating percona-db 起動状態の確認。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b39630e2fd38 percona_jp:5.7 "docker-entrypoint.sh" 35 seconds ago Up 33 seconds 0.0.0.0:33306->3306/tcp percona-db ea4c9a0a21b5 busybox "sh" 35 seconds ago Exited (0) 34 seconds ago percona-datastore Sequel Pro を使いポートフォワードした33306にユーザーfooでfoodbデータベースに接続して初期化スクリプトが動作していることを確認できました。
クライアントコンテナでの接続用に作成したclientスクリプトを調整。
client
docker run -it --link percona-db:mysql --rm percona_jp:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' 接続して動作確認します。
$ ./client mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.13-6 Percona Server (GPL), Release '6', Revision 'e3d58bb'
Copyright (c) 2009-2016 Percona LLC and/or its affiliates Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | foodb | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
mysql> select Host, User from mysql.user; +------+------+ | Host | User | +------+------+ | % | foo | | % | root | +------+------+ 2 rows in set (0.00 sec) せっかくのPercona Serverなのでレスポンスタイム分布の取得をやってみましょう。
$ docker run -it --link mysql55:mysql --rm mysql:5.5 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.5.51 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec)
mysql> select Host, User from mysql.user; +------+------+ | Host | User | +------+------+ | % | root | +------+------+ 1 row in set (0.00 sec)
RUN apt-get update && apt-get install locales -y && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 ENV LANG ja_JP.utf8 公式イメージにはlocalesが入っていなかったのでlocaledefの前にapt-getで導入するようにしました。
日本語化されたイメージ、mysql_jp:5.5を作ります。
$ docker build -t mysql_jp:5.5 ./ 確認
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql_jp 5.5 42465a1c94d5 22 minutes ago 284.5 MB 設定ファイルの調整/etc/mysql/conf.d/ にバインドするディレクトリconf.dを作成して追加の設定を書いたcnfファイルを置きます。
CREATE TABLE foodb.users (id int , name varchar(255)); GRANT ALL ON foodb.users TO foo; INSERT INTO foodb.users (id, name) VALUES (1, 'first'), (1, 'second') foodbデータベースにusersテーブルを作成しユーザーfooに権限を与え、usersテーブルに初期値をINSERT文で投入というシナリオです。
mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $MYSQL_DATABASE <<-EOSQL CREATE TABLE users (id int , name varchar(255)); EOSQL このようなスクリプトでテーブル作成は行われるのですがshスクリプト実行後にコンテナがExitしてしまうという症状が発生。解決出来ずにハマりまくり、sqlファイルでの初期化に方針変更しました。