SHOYAN BLOG

Dockerのコンテナ間を繋ぐLinksを使ってPHPとMySQLコンテナを連携させる

DockerはLinksというコンテナ間のネットワークを繋ぐ仕組みを持つ。
例えば、アプリケーションコンテナとデータベースコンテナを連携して使いたいときに有用だ。
今回はMySQLとPHPのコンテナを連携させる方法を紹介する。

MySQLコンテナの作成

まずは、mysqlコンテナを作成する。
バックグラウンドで起動させるための --detachオプションと3306ポートを解放するための exposeオプションを指定している。

1
$ docker run --detach --expose=3306 --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" mysql

以下のようにコンテナが起動していることを確認できるはずだ。

1
2
3
⇒  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b18a5159fe7c        mysql               "docker-entrypoint.sh"   1 minutes ago      Up 1 minutes       3306/tcp            test-mysql

PHPコンテナの作成

次にPHPコンテナを作成する。
以下のDockerfileと確認用のconnect.phpを用意しておく。

Dockerfile

1
2
3
4
FROM php:7.1
RUN apt-get update
RUN docker-php-ext-install pdo_mysql mbstring
ADD . /app

connect.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$dsn = 'mysql:host=' . $_ENV['MYSQL_PORT_3306_TCP_ADDR'];
$user = 'root';
$password = $_ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD'];

$dbh = new PDO($dsn, $user, $password);

$sql = "SELECT version();";

foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) {
    print_r($row);
}

ビルドする。

1
$ docker build -t mysql-php .

以下のように --link 連携したいコンテナ名:エイリアス名 でPHPコンテナを起動すると、起動したコンテナの環境変数に連携したいコンテナに関する情報が登録される。

1
2
3
4
5
6
7
8
9
10
11
$ docker run -it --link test-mysql:mysql mysql-php bash
# root@9ec43f759596:/#
# env
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP=tcp://172.17.0.3:3306
MYSQL_ENV_MYSQL_VERSION=5.7.15-1debian8
MYSQL_NAME=/big_shirley/mysql
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_PORT_3306_TCP_ADDR=172.17.0.3
MYSQL_ENV_MYSQL_MAJOR=5.7
MYSQL_PORT=tcp://172.17.0.3:3306

最後にPHPのコンテナでconnect.phpを実行して接続できることを確認してみる。
version名が表示されれば成功だ。

1
2
3
4
5
6
# php /app/connect.php
=>
Array
(
    [version()] => 5.7.15
)

ポモドーロ・テクニックを使ってみた感想

最近、仕事中はポモドーロ・テクニックを使っている。
ポモドーロ・テクニックは25分集中して5分休憩するサイクルを繰り返すことでメリハリをつけて集中力を高める手法だ。

どのようにやるのか

タイマーさえあれば簡単にできる。
私はPomodoro Timeというアプリを使っている。

image

やってみた感想

やってみた感想としては、たしかに一定の時間を集中することで集中力が高まることを感じた。
気分的にのれなくても25分集中するんだと気合をいれてやれば、けっこう集中できるものだ。
効率よく仕事をこなす方法としてポモドーロ・テクニックはよい手法だと思う。

しかし、走ると歩くを繰り返すと疲れるようにポモドーロ・テクニックを使うと神経を消耗する。
実際、途中に長めの休憩をとるようにと解説もしてある。

ただし、これは慣れもあるのではと思う。
走ると歩くことを繰り返すのはたしかにしんどいがそれが習慣化してしまえば、最初に感じた負荷よりもぐっと負担は減るはずだ。
もうしばらくポモドーロ・テクニックを使っていくつもりだ。

英語の勉強をはじめて4ヶ月の記録

英語の勉強時間をStudyPlusに記録しはじめて4ヶ月がたった。
StudePlusに関しては以下の記事を参照してほしい。
勉強が楽しく続くようになるStudyplus

勉強時間は合計91時間。
最近は英語の勉強のルーティンが生活の中に確立して自然にできるようになった。
いまやっていることは以下のような感じ。

家から駅まで

NHKのラジオ英会話(アプリ版)を聞きながら15分歩く。
アプリ版は好きな時間に聞けるので重宝している。

会社

休み時間にマジタンという英単語アプリで英単語を覚える。

駅から家まで

超右脳つぶやき英語トレーニングを聞きながら15分歩く。
(現在は廃盤になっており、現行は超速つぶやき英語トレーニングという名前で出版されている)

寝る前

データベース3000基本英単語・熟語を30分。
発音とリスニングをする。

以上でだいたい1時間くらいだ。

語彙数を増やすこととリスニング力の向上を目指している。
理由は以下の通り。

  • 英語の勉強に関する著書を読むと語彙数が必要と書いてあることが多い
  • 英会話をやってみて、そもそもリスニングができないと会話が成り立たないことを痛感した

英単語学習についての考え方は以下の記事が大変参考になった。

4ヶ月前と比べて

4ヶ月前と比べ、以下のような変化があった。

覚えた英単語は3500。
4ヶ月前はネイティブが話す速度の英語はほとんど聞き取れなかったが、いまは単語として聞き取れる割合が増えた。
超右脳つぶやき英語トレーニングに付属しているCDはネイティブが普通に話すスピードなのでさっぱり聞き取れなくて愕然としたが、いまは6割くらい聞き取れてていると思う。何度も聞いて内容を覚えてしまっているからでもある。
しかし、聞き取れる単語は増えてきたが、意味がわからないことが多い。

リーディング、ライティングはほとんどやっていないが、語彙数が向上したことでリーディングもあがっていると思う。
しかし、語彙数3500程度だとわからない単語が多く理解できない部分が多い。
当然、日本語のように英語を読むことは不可能である。
ライティングはほとんど向上していない。

今後は語彙数をもっと増やして10000語を目指すつもりだ。

Php-idnkitをインストールする

php-idnkitをインストールしたのでメモ。
OSはubuntu、PHPのバージョンは5.6.24で行った。

php-idnkitはidnkitをPHPから使えるようにするPHPの拡張モジュール。
拡張モジュールなのでPHPをコンパイルし直す必要はない。モジュールをコンパイルして、php.iniのextensionに指定すれば使えるようになる。

idnkitのインストール

php-idnkitはあくまでidnkitをPHPから使えるようにする拡張モジュールなのでidnkitがないと動作しない。
まずはidnkitをインストールする。

idnkitはJPNICが提供しており、以下からソースコードをダウンロードすることができる。

1
2
3
4
5
6
$ wget https://www.nic.ad.jp/ja/idn/idnkit/download/sources/idnkit-1.0-src.tar.gz
$ tar -zxf idnkit-1.0-src.tar.gz
$ cd idnkit-1.0-src && \
    ./configure && \
    make && \
    make install

php-idnkitをインストール

続いてphp-idnkitをインストールする。
そのままではエラーとなったので以下のパッチをあてた。

php-idnkit.patch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--- xxx/idnkit.c
+++ yyy/idnkit.c
@@ -36,7 +36,11 @@ static int le_idnkit;
  *
  * Every user visible function must have an entry in idnkit_functions[].
  */
+#if ZEND_MODULE_API_NO >= 20100525
+zend_function_entry idnkit_functions[] = {
+#else
 function_entry idnkit_functions[] = {
+#endif
    PHP_FE(idnkit_decodename,   NULL)
    PHP_FE(idnkit_encodename,   NULL)
    PHP_FE(idnkit_errno,        NULL)
@@ -104,7 +108,7 @@ PHP_MINIT_FUNCTION(idnkit)
    idn_nameinit(1);

    /* get idnkit version */
-   REGISTER_STRING_CONSTANT("IDNKIT_VERSION", (char*)idn_version_getstring(), CONST_CS | CONST_PERSISTENT);
+   REGISTER_STRING_CONSTANT("IDNKIT_VERSION", "1.0", CONST_CS | CONST_PERSISTENT);

    /* idnkit actions */
    REGISTER_LONG_CONSTANT("IDNKIT_DELIMMAP",       IDN_DELIMMAP,       CONST_CS | CONST_PERSISTENT);
1
2
3
4
5
6
7
8
$ wget http://www.sera.desuyo.net/idnkit/php-idnkit-20031204.tar.gz
$ tar -zxf php-idnkit-20031204.tar.gz
$ cd idnkit && \
    patch -lsp1 < /tmp/php-idnkit.patch && \
    phpize && \
    ./configure && \
    make && \
    make install

php.iniにextensionを指定

最後にphp.iniにextensionを指定を指定する。
以下は、/usr/local/lib/php.ini にphp.iniがある場合の設定例。

1
$ echo "extension=idnkit.so" >> /usr/local/lib/php.ini

以下のコマンドが動作すればOK。

1
2
$ php -a
> echo idnkit_encodename(mb_convert_encoding("日本語JPドメイン名.jp", "UTF-8", "auto"));

高任和夫の「起業前夜」を読了した

私は本が好きで常に何かしらの本を読んでいる。

最近、高任和夫の「起業前夜」を読了した。
商社のサラリーマンが会社の闇に気づいて、それをなんとかしようとする話しだ。
その過程で様々な人と出会い、主人公は自分の人生や幸福について考えることになる。

社会人になってから小説は読むのに時間がかかるのでそれとなく敬遠していたのだが、小説を読む必要性があるのではないかと考えを改めた。
最近、視野が狭くなっていると感じている。
同じオフィスで働く毎日を繰り返すと、どうしてもその日常での視点で物事を見てしまう。
その組織の常識が自分の常識となり、それはどうもおもしろくない。
そんなことを考えず、ただ目の前の仕事をこなしそれでうまくいけばいいのだが私はそうではないので、視野を広げてみようと思ったのが小説を読むきっかけである。

そういう理由なので、サラリーマンが題材の小説を中心に読むつもりだ。
職種は違えど、会社に勤めるサラリーマンであれば皆似たような悩みや問題を持っていると思う。
それをどのように解決し成長していくのかを学び、あわよくば取り込んでしまおうと思っている。

「起業前夜」の次は何を読むのかというと、楡周平の「プラチナタウン」だ。
寂れた地方を元気にしていく内容の小説。
色々と学べることがありそうで楽しみだ。