Dockerの勉強はここが良いなあ

Dockerについては、Kindleで書籍購入し、たくさん勉強していますが、やはりプロ相手の書籍ということになりますので、なかなか素人が手を出すのには敷居が高いものがあります

それでも分からないながらも読んで色々と試していくとだんだんとその世界に馴染んできて何となく動かせるようになってきます もっとも今はそのとっかかりなのですが・・・

色々なサイトも調べているのですが、なかなか良いサイトがありません 要するに「自分は何をするために、Dockerに手を出しているのか?」 その問が明確でないことに原因があるのです

そこで目標を以下のように設定しました

  1. まずは Dockerを用いて MacBook Proに LAMP環境を構築する
  2. それがうまくいけば、Docker Imageを Windows10環境に持ち込んで動作を確認する
  3. それがうまく行けば root権限のある rental serverあるいは Amazon Web Serviceなどの Cloud Serviceに Docker Imageを持ち込んで、Cloudないし rental serverで LAMPを作動させる

という目標となります

まず第一の難関については、このサイトが非常に分かりやすいので助かります とりあえず MacOSで phpinfo()までは動作することができました ありがとうございます

Vagrantについて記録し始めたけどすぐに Dockerへ

Vagrantも Dockerも仮想サーバーを走らせるソフトとしてプロの間では最近流行り、とても有名なソフトです うーん ソフトというのは語弊があるかも知れません もっと大きな基盤ソフトなのですから
Vagrantについては、この前のポストでも触りの部分を記録しておきましたが、この日曜日に Dockerにもチャレンジしました

まずは Windows10 machineである SurfacePro4の上で試みました こちらでは Docker-Toolbox for Windowという簡単一発インストールソフトを用いましたよ Web検索すればすぐに出てきます とても可愛らしいクジラあるいは浮きドックのマスコットが良いですね 素敵です

こちらは走らせれば勝手に VirtualBoxもインストールされます といっても VirtualBoxは最新版ではないので、VBの画面に行くと、「upgrade版がありますよーーー、upgradeしませんか???」と呼びかけてきます 僕は馬鹿だからすぐにこのような勧誘に屈してしまいます そして upgradeすると、折角 Docker installerが色々とややこしいことをセットしてくれた設定が全てパーになり、Dockerがうまく走らなくなるのです ですから、VB upgradeはもっとよくDockerのことを知ってからしましょうね

という訳で Docker-toolboxを再度走らせ、その前に VBを uninstallしてようやく DockerでLinux環境が立ち上がりました

そして今朝は早朝から Macで Dockerをインストールしました こちらは、既に VirtualBoxで仮想マシンをいい具合に走らせている(Vagrantを用いて)ので、Toolboxを使用せず Docker Installerを用いたのです そして

$docker run -d -p 80:80 --name webserver1 nginx

として nginx web serverを走らせ、ホストマシン(僕の場合、MacBook Proから Firefoxを用いて localhostと打ち込んだところ、見事に下記表示されました やったね

Dockerでnginx立ち上げ

忘れない内に記録しておきましょう、VirtualBox + Vagrant + CentOS6.7 を用いてLAMP環境構築し、phpMyAdminも走らせる

昨年暮れ以来 VirtualBoxで Vagrantを入れて、その boxを用いて CentOS 6.7を立ち上げ、そこで Apache Web Serve, PHP, MySQLを立ち上げ、最終的に phpMyAdminを走らせて これまで用いてきた XAMPPによる仮想インターネット環境構築と同じレベルに持っていくことと格闘してきました

しかし、何回かの挫折の後、色々な教訓を学びついに MySQLも PHPもきちんと走るようになったのです その過程を忘れないように Wordpressを用いて記録しておきましょう

(1) まずはどこかに仮想OSを立ち上げる場所を作成する (その前に、VirtualBoxと Vagrantの最新 versionはインストールしておくこと) – ここではその Folderを /user/myself/直下に作ることとする ちなみに、myselfとは僕のことですよ 作成する Folder名前を CentOS6-7にしておきます

$cd /usr/myself/    
#これにより current directoryを /usr/myselfに移動した
$mkdir CentOS6-7     
#これで新たに CentOS6-7という directoryを作成
$pwd        
#現在の directory名前が /usr/myself/ と表示される
$cd CentOS6-7      
#これで current directoryを /usr/myself/CentOS6-7に移動した

そうかついに分かったぞ

そもそも何で Webプログラム書くのに、いちいち Vagrantや Dockerなどを入れねばならないのでしょうか? どうして XAMPPではいけないのでしょうか?

そんな僕の素朴なギモンになかなか答えてくれるサイトは見つけられませんでした もちろん色々な理由を書いてあるのですが、「だから結局なに?」なのでした

本日激しい雪の札幌から千歳に脱出する途中でようやくひらめいたのです 結局これが真実でしょう

  • まず、通常のレンタルサーバーを借りて、そこに Web Siteを構築するのであれば、テストを走らせる local環境は XAMPPで良い 一番簡単だ
  • しかし、レンタルサーバーと言っても、root権限を持つことができる少し高級なものであれば、そこに php, mySQLその他をインストールせねばならず、ネットワーク環境の設定などややこしい問題が発生する、ここでは XAMPPを用いてプログラムを書いても、そのプログラムが自分で構築した LAMP環境で動くという保証が無い
  • だから、自分のマシンのローカル環境の中で仮想化ソフトである Vagrantや Dockerを用いて動く環境をつくり、そのコピーをroot権限のあるレンタルサーバーにそのまま持っていけば良い

ということなのでした 振り返り自分はどうか? とても root権限をてなづけることは能力的にできそうもありません 時間的にかな? そうなると XAMPPでプログラムを書き、それを通常のレンタルサーバーに持っていく、という戦略が正しいように思います

ああ 年末からかかりきりとなってきた VirtualBox + Vagrant + CentOSとの戦いは何だったのでしょうかね でも、ついにCentOSで phpMyAdminが動くようになったのです 遅々たる歩みではありますが進化していますね

本日の激しい札幌の雪はこんなでした

1月13日の激しい札幌の雪

やったね 難問解決

今、プログラミングをもっと効率的に行える自分になれるように Shellプログラミングの勉強をゆっくりと初めています

これを使いこなせるようになれば、自動で色々な変換をしたりできるようになる筈です

とはいうものの、なかなか厳しい世界です 簡単なことでもすぐに挫折してしまいます 実際昨日から今日にかけてぶち当たったのが

username$ brew install coreutils

このように homebrewを用いて coreutilsをインストールしたにもかかわらず symlinkができていない、というエラーが homebrewからはかれたのです

用いたいコマンドは sedとawkなのです そして、色々調べたところ以下のようにして解決しました

usename$ brew link coreutils

さてこのように symlinkを作成したところ、検証のために以下のコマンド入れると

username$ which awk
/usr/local/bin/awk
username$ ls -l /usr/local/bin/awk
lrwxr-xr-x 1 username admin 28  6  9 13:27 /usr/local/bin/awk -> ../Cellar/gawk/4.1.3/bin/awk*

とこのようにawkがgawkにリンクされたことが分かります

実際に以下のようにawkが正しく日本語を処理できる gawkにリンクされたことは検証できました

username$ echo 山田 | awk '{gsub(/^./,"上",$1);print}'
上田

このように”山田”という文字列が、正しく日本語として判定され、その第一文字目が”上”に変換され、その結果 “上田”がコンソールに出力されています

これは「小さな一歩であるが、未来に続く一歩である」なんてねね

お盆の季節はとても忙しい

何でしょうか 会社が休みだからでしょうか あるいは クリニックの多くもお休みをとられているからでしょうか まあその両方でしょうか この季節 外来診療をやっているととても忙しく また重症例が多いのです 今日の僕の外来診療だけでも入院指示どうでしょうか 20名ぐらいに発行しました その内の 3例は今日緊急入院です 一人は冠動脈にステントが入り、一人は巨大な易破裂腹部大動脈瘤に対して ステントグラフトが入り、お二人ともあっという間に元気に回復です

そうかお盆は既に旅立たれた人の魂との交流ですから、呼ばれるのでしょうか

僕も明日から週末まで短い休みを取ろうと思っていたのですが、急遽休みを取られた同僚の代わりに外来診療を行います でも緊急例が多い時期なのでやり甲斐がありますね

とわ言ってもプログラミングが中断したままです しかも悪いことに僕の浮気性が出てきて、それは何かと言えば、日本発の完全オブジェクト指向言語である Rubyの勉強なのです 実はこれまで数回行おうとしたのですが、なかなか進まず挫折していたのです その大きな原因は Windows環境での Ruby Programmingが相当やりにくい、ということがあったのです でもその初めてとりかかってから既に 10年以上が経過する間に状況は一変し、 Windows環境でもバッチリとなっていました それに何より僕の現在のプログラミング環境は OSXであり、Unixであるので Rubyはすいすい走るのです それに世界は Web開発は Ruby一色になりつつあります そんなこんなで再び Rubyの勉強を始めたので Qtによる DIB programmingは中断しています 結局こんな自分では何もものにならないのかも知れませんね

ようやく分かった – Unix/Linuxコマンド解説にある()で囲まれた番号の意味

Unix/Linuxのターミナル・コマンドの解説には必ず

$ls(1)

のようにコマンドの後ろにカッコで囲まれた数字がついてきます。これが何なのか? コマンドの解説本にも記載は無いのです。
ずっと疑問に思っていましたが、Linuxのメモリ管理Cライブラリである glib.c について勉強していてようやく分かりました。

セクション#	トピック
1	ユーザに利用可能なコマンド
2	 UnixとCのシステムコール
3	 Cプログラム用のCライブラリルーチン
4	特殊ファイル名
5	のUnixで使用されるフ​​ァイルのファイル形式と規則
6	ゲーム
7	ワープロパッケージ
8	システム管理コマンドと手順

ということらしいのです。要するにUnix/Linuxのオンライン・マニュアルである “man”コマンドで記載されているセクション番号なのです。このセクション番号は上記のように、その役割によって分類されているのです。