databaseUNIXzoneinfoコンテナソケット目次(クリックするとジャンプします)1:Dockerfileが読みたいの2:エラー時の挙動設定3:オプションの確認3.1:拡張的な変数展開3.2:特殊変数の書き換え4:特定のオプションがあった場合4.1:しらないarg4.2:ヘルプなどのオプションがあったら...5:条件分岐6:ゲットこんふぃぐ6.1:データディレクトリの取得7:$DATADIR/mysqlの存在分岐7.1:データベースがまだ作られていない場合...8:設定値の不足処理8.1:情報が不足していたら...9:ディレクトリの作成・ユーザ割り当て10:データベースイニシャライズ11:mysqldの起動およびネットワークの無効化・pidの取得12:クライアントの起動の準備12.1:コマンドの格納12.2:どんな出力になるのか12.3:結局なにが代入された?13:クライアント起動13.1:コマンドのうまい使い方13.2:確認用SQL文14:時刻の設定14.1:タイムゾーンデータの取得15:ランダムパスワードの生成16:データベースの準備16.1:バイナリログの無効化16.2:rootユーザの作成17:rootパスワードの追加18:データベースの作成19:ユーザを作った際の処理20:データベースの独自初期化用処理21:ワンタイムパスワードが有効な場合22:プロセスの終了23:分岐の最後24:まとめ関連するこちらの記事もオススメPHP正規表現で「言明」を使ってみるPHPにPECLからImageMagickをインストールするPHPでデザインパターンを勉強するなら参考にしたい書籍・WebサイトDockerComposeをインストールする[使い方基本版]DockerComposeでコンテナ立ち上げ・連携を楽にするSSHdの待ち受けポートを変更する【1の補数とか】補数を理解したいです【2の補数とか】なんでPHPはMySQLからのリザルトがint型のはずなのにstring型になってしまうん?Dockerfileが読みたいの今回は公式のMySQLのDockerfileを読んでみようと頑張りました。この記事は長すぎたので2つに分割しています。こちらの記事はDockerfileに付随しているdocker-entrypoint.sh編です。今回読んでみたのは以下です。docker-library/mysql/5.7/Dockerfile本体の記事はこちらです。Docker公式MySQLのDockerfileを頑張って読んで理解しようとしてみた[Dockerfile本体編]それではdocker-entrypoint.sh編の始まりです。pipefailこのシェルスクリプトではパイプ中のエラーでもちゃんと終了するようにpipefailオプションをつけています。落ちろということのようです。mysqldもしオプションがあったらmysqldを先頭に足しますとあるのでオプション関係の処理のようですね。拡張的な変数展開さっそく${0:1:0}の部分からわからなくてハマりましたが、この${0:1:0}は「bashの拡張的な変数展開」というものらしく、変数を細かくハンドリングしたい時に有用なのだそうです。意味としては以下の様になります。${変数:位置:個数}${1:0:1}の場合、$1(引数の1個目)の最初の文字(0)から1個分(1)という意味になります。引数がuncoだったらuを表すことになりますし、--set-server-caracterだったら-になります。then-と比較して真ならという意味ですから、$1(引数の一個目)の最初の文字(0)から1個分(1)が-だったらという意味になります。このコードでは-があるかどうかでオプションの有無を確認しているようです。setはシェルオプションの設定等に使いますが、ここでは変数の内容を変更するために使っています。--という不思議なオプションがありますが、これは「これ以降はオプションじゃないよ」という意味になります。これもなかなか情報が見つからず苦労しました。setはオプションが何もなくて値を与えられると、与えられた値は位置パラメーターに代入されます。$@の展開が新たに$@の内容になります。結果的に引数の先頭にmysqldが足された格好になるわけです。