boot2dockerのポートフォワードで一瞬ハマる
ご無沙汰しております。 とっしぃです。
ホントにブログ続けられてる人ってすごいと思います。
こんな適当な、ぐぐればそこら中に転がってそうなネタでも 書かないことには続けられそうにないのでメモがてら書いておきます。
まぁDockerもboot2dockerもだいぶ今更感のあるネタではあるんですが、 今更感があるだけにちゃんと触ったことないのもどうかと思ってやりはじめたというのがきっかけです。
boot2dockerとは
とりあえず前提から。
- macとかwindows上で、virtualboxのVM使ってその上でDockerを動かすためのクライアント
Dockerとは
コンテナ技術による仮想環境ツール。
VMみたいなサーバまるごと仮想化ではなく、コンテナという単位で動作するので色々サクサク。
ちなみに言語はgoで書かれてるらしい。
本題
ポートフォワーディングのこと
本題です。
このboot2dockerを使ってDockerのコンテナをローカルのmac上で構築、httpサーバを動かした時に、 いくらやってもローカルのmacからhttpでアクセスできない、と。
Dockerのポートの設定としては、
- Dockerfileに書く
EXPOSE 80 443
- docker runする時に-pオプションでホストとバインドする
$ docker run -p 8080:80 image_name
があるんですが、とりあえず上記設定をしてローカルのterminalから
$ curl localhost:8080
とやっても一向に取得できない(´・ω・`)
調べてみると、boot2dockerはVirtualBox上のVMで走ってるので、 VMのポートフォワード設定もしないといけないらしい。
なんかCLIからもいけるみたい。
$ VBoxManage controlvm "boot2docker-vm" natpf1 "nginx,tcp,127.0.0.1,8080,,80"
GUIコンソールから見てみても確かにできてるぽい。
もっかいチャレンジ。
.
.
.
取得できない(´・ω・`)
なんでやねん(´・ω・`)
ん?そういえばVM上でboot2dockerが走ってるってことは、
コンテナのポート -> VMのポート -> ローカルのポート
って3段階(2段階?)のポートフォワーディングかましてるってことか
つまり現状だと
コンテナ:80 -> VM:8080 -> ローカル:8080
になっちゃってるわけか。
さっきVirtualBoxでやった設定は、VM:80 -> ローカル:8080だから、
コンテナ:80 -> VM:80 -> ローカル:8080
にしないとダメってわけね。納得。
ということでdocker runのオプションを
docker run -p 80:80 image_name
にしてみたら見事に取得できた。
多分これがLinux上とかだと コンテナ:80 -> ローカル:8080 だけでいいんだろうな。
とりあえず解決したのでこれからDocker使ってAPIサーバとWebサーバとDBサーバ立てて フロントはReactでAPIはgoでとかやろう。
夏だしgolang始めてみました
ご無沙汰してます。
とっしぃです。
一度書くの止まっちゃうともう無限に止まっちゃうんですよねブログ。
その円環の理を破るためにもたまには更新します。
まえがき
最近の業務的には特にネタになるようなものがなく、淡々と改修やらなんやらやってたんですが、 プライベート、というかtwitter界隈でよく目にしていたgolang(GO言語)がなんか良さそうってんで ちょっとやってみっかと思ったのでその話でも。
なんでgolang?
そもそもなんでgolangかっていうとこなんですが、理由は何点か。
- 就職した時から転職するまではずっとjavaだったけど最近はphpとjavascript、たまにbashくらいしか触ってなくて、もっかい静的な言語やりたいと思った
- ちょっとしたサービス作りたくて、バックエンド・フロントエンドと考えたらバックエンドはAPIサーバ、フロントエンドはjsでのSPAが理想型(個人的には)だなーと思った
- APIサーバだったらViewとか要らなくて、CakePHPやらLaravelやら、RoRやらDjangoやら、Expressやらは要らない、つまりphpとかrubyとかpythonじゃなくていい
- だったら静的言語にしよか
- でも今更Javaもなー。記述量は多かったしモダンさはないよね。仕事ならともかく趣味なら趣味に走ろう
- js界隈、python界隈の人がgolanggolang言ってて気にはなっていた
- 同じく名前よく聞いていたのはRustだけど、これはホントに文献なくて困った
- んじゃもうgolangかなぁ
てな感じ。
調べてたらあのカヤックさんもgolang推進派ぽくて、これは今後やっといて損はないのかなとも。
golangてどんな言語やねん
ものすげーざっくりと、
- 静的型付け言語
- C系言語、Python辺りに影響を受けたらしい Go (プログラミング言語) - Wikipedia
- セミコロン要らない
- スライスっていう便利な配列みたいなのがある
- ループはforだけ
- switchで式が使える
- switchでbreakいらない
- runeなんていう厨二心をくすぐる型がある(int32と同じらしい)
- 例外(Exception)がない
- 構造体(struct)がある
- 型定義ができる(type)
- 継承がない
- interfaceはある
- 変数定義と代入を同時にやる:=って演算子がある
- 並列処理が得意らしい
- goルーチンてのがある
とりあえず何すりゃいいんだろう
まずはここと
ここ見ながら、
この演習やればよさそう
あとWeb系やるなら
とか
Atom(エディタ)の設定
とかって感じすかね。
今後
サービスの進捗とかgolangの発見とかあったらまた都度書いていきます。
CentOS7系のコマンド
おはようございます。
最近はCentOSとCoreOSが混ざって大変なとっしぃです。
「DockerとCoreOSの決別」みたいなエントリが、
「DockerとCentOSの決別」に見えてもうわけわからんことになってました(´・ω・`)
まぁそれはおいといて、
ちょこちょこVagrantで適当なVM作って遊んで捨てるのが日課……ではないですが
そんなことしてまして、
そういえばCentOS7出てコマンドも色々変わって大変とか聞くけどまだ触ってないな−
と思い、Vagrantならちょこっと入れて遊べるのでやってみました。
まぁVagrantの使い方は色んなとこで詳しく載ってるので今回は割愛。
……どうでもいいですけど「かつあい」ってタイプしたはずが「かあつあい」になってて、
変換したら「加圧愛」。
加圧トレーニング中のはるな愛が浮かんでしまって今脳内が大変です。
……どうでもいいですけど。
んで、とりあえずターミナルで他のサーバの作業とこんがらがるのが怖いのでhostnameだけでも変えとくかーと思って
$ sudo vim /etc/sysconfig/network
って打ってみると、
# Created by anaconda
……ん?
NETWORKING=yes
HOSTNAME=localhost.localdomain
みたいな感じじゃないの?
ここからして違うのかーと、7系への道のりが長そうだなと思ってしまったわけです。
ちなみにhostnameの変更は
$ sudo vim /etc/hostname
で、中身は
localhost.localdomain
わかりやすい。
あと大きいのはserviceコマンドですよね。
serviceとchkconfigが一緒になって、systemctlに統合されたのはいいんですが、
まず「systemctl」が打ちにくいっていう(´・ω・`)
serviceは1単語だけどsystemとctlで2単語っぽいのがね。
あと英単語なら子音子音て続くのあんまないけど略語になると子音だらけで打ちづらい。
までも6系までは色んな設定ファイルの場所覚えて変更箇所覚えないといけなかったのが、
今度は基本的にコマンドでやるみたいな方針ぽいので、そこは--helpでどうにかなりそうなのがいいかな。
業務だとしばらくは6系だろうから頭の切り替えが辛いけどそこはしょうがないね……。
# 追記
こんなのあった。
iptabled > firewalldとかNICのUP/DOWNとかファイルシステムの変更とか色々あんのね。
もっと触ってこ(´・ω・`)
vimのtags設定(セミコロンの意味的な)
vimrcでtaglistの設定をごちゃごちゃといじくってる時に、下記サイト
Re: vimの勉強〜タグジャンプの勘どころ〜 - daffy log - 永遠に未完成
2009-07-22 - daffy log
を見つけて、
最後のセミコロン重要。
'tags'オプションに指定するセミコロンは便利なのに割と知られていないので紹介してみた。詳細は :help file-searching
って書いてあったので実際に調べてみた。
:help file-searching
をとりあえず叩いてみる。
1637 2) Upward search:
1638 Here you can give a directory and then search the directory tree upward for
1639 a file. You could give stop-directories to limit the upward search. The
1640 stop-directories are appended to the path (for the 'path' option) or to
1641 the filename (for the 'tags' option) with a ';'. If you want several
1642 stop-directories separate them with ';'. If you want no stop-directory
1643 ("search upward till the root directory) just use ';'.
1644 /usr/include/sys;/usr
1645 will search in:
1646 /usr/include/sys
1647 /usr/include
1648 /usr
1649
1650 If you use a relative path the upward search is started in Vim's current
1651 directory or in the directory of the current file (if the relative path
1652 starts with './' and 'd' is not included in 'cpoptions').
1653
1654 If Vim's current path is /u/user_x/work/release and you do
1655 :set path=include;/u/user_x
1656 and then search for a file with gf the file is searched in:
1657 /u/user_x/work/release/include
1658 /u/user_x/work/include
1659 /u/user_x/include
あ、ちなみにVimはCentOSに7.4入れたやつです。
neocomplete使いたかったので(*´艸`*)
んで多分L1639の最後のThe辺りからがそれっぽいこと書いてそう。
まずはGoogle翻訳にぶち込んでみましょう。
';'ストップディレクトリはと( 'path'オプションのために)パスに、または( 'タグ'オプション用)のファイル名に付加されます。必要に応じていくつかのストップディレクトリがで区切り';'。
日本語でおk(´・ω・`)
拙い英語力(しかも読むのonly)で超意訳してみると、
「上方向に検索するならセミコロンで区切って、そのストップディレクトリ指定するといいよ。
ストップディレクトリ指定しない(Rootディレクトリまで遡る)ならセミコロンだけつけてね」
ということだろうか。
と思ってもうちょい検索したらこんなん出てきてしまった。
2) 上向き検索:
この方法ではディレクトリを指定すると、そのディレクトリから上に遡ってファイ
ルを探す。上向き探索の上限となるディレクトリが指定できる。それはパス (オプ
ション 'path') かファイル名 (オプション 'tags') の末尾に ';' で区切って指定
する。複数のディレクトリを指定したいときはそれらを ';' で区切る。上限ディレ
クトリを指定したくないときは (ルートディレクトリまで上向き検索したいとき)
';' だけを付ける。
めっちゃわかりやすい!!!
でもまぁさっきの超意訳とそんなに違うことは言ってない気がする。
よかったよかった。
VimのNeobundleで「neobundle#rc() is deprecated function.」
お久しぶりです。とっしぃです。
最近家庭の事情もありましてなかなか記事が書けてないです(´・ω・`)
でとりあえず軽いテーマが一つあったのでちょろっと更新。
普段使ってるエディタは基本的にVimなんですが、最近部署が変わったこともあって新しいMacBookProが支給されたのでそれにもVimの設定しとこうと思ったわけです。
そしたら
[neobundle] neobundle#rc() is deprecated function. [neobundle] It will be removed in the next version. [neobundle] Please use neobundle#begin()/neobundle#end() instead.
なんだこれ(´・ω・`)
上のメッセージをよく読んでみると、
neobundle#rcは次のバージョンでなくなるから、neobundle#begin()/neobundle#end() 使ってね
と。
調べてみるとまぁちょこちょこ出てきますね。
ここ(
neobundle#rc()がdeprecated functionになる場合 - Qiita
)を参考に
call neobundle#begin(expand('~/.vim/bundle/')) NeoBundleFetch 'Shougo/neobundle.vim' call neobundle#end()
これで出なくなりました。やったね!
他の参考:
Shougo/neobundle.vim · GitHub
VimでNeoBundleのアップデートに伴いプラグインのデフォルトブランチをmasterに変更 - rcmdnk’s blog
MySQLのクエリキャッシュ
ご無沙汰しております。とっしぃです。
私事になりますが5月末に結婚しました(๑╹ڡ╹๑)
式が終わって6月頭にちょっとした旅行、8月に引っ越しと、
未だかつてないバタバタ具合で行っておりました。
なのでこのブログ(ただのメモですけど)もだいぶ滞ってしまいました(´・ω・`)
色々と一段落はしたので、またちょこちょこと更新していこうと思います。
その一発目として、今までめんどくさそうと思ってあんまり手を出してこなかったMySQLのクエリキャッシュについてのメモでも。
クエリキャッシュで何ができるのか
MySQLのクエリキャッシュでは、発行されたSQLのうち、SELECTステートメントのテキストを結果と共に格納します。
全く同じクエリを受け取った際には、その格納されたクエリキャッシュの中から結果を返し、一からクエリの解析や実行を行いません。
クエリキャッシュの設定
まずは現在クエリキャッシュが有効かどうかを調べます。
mysql> show variables like 'query_cache_%';
もしくは
# mysqladmin -uroot -p variables | grep query_cache
その結果のうち、
query_cache_size
を見て、値が 0 でなければ有効な状態です。
これが 0 だった場合にはこれを設定しなければなりません。
Linuxで一般的な設定ファイルの場所である
/etc/my.cnf
の [mysqld]セクションに、
query_cache_size=16M
と記述し、mysqlを再起動します。
値は環境によって変わりますが、後々稼働状況を見て変更していくのでもいいと思います。
query_cache_size以外にも、
query_cache_limit
query_cache_min_res_unit
と言った項目も設定できます。
query_cache_limitはキャッシュする結果のサイズ上限を、
query_cache_min_res_unitはキャッシュするデータのブロック単位サイズを表します。
参考:
[ThinkIT] 第6回:query_cache_sizeの違いによるパフォーマンス比較 (1/3)
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.12.3 クエリ キャッシュの設定
効果測定
mysql> show status like 'Qcache%';
もしくは
# mysqladmin -uroot -p extended-status | grep Qcache
などとして、現在のキャッシュ状態を確認します。
Qcache_free_blocks 1 空きブロック数 Qcache_free_memory 5489800 空きメモリサイズ(バイト) Qcache_hits 1944 クエリヒット数 Qcache_inserts 649 キャッシュされたクエリ数 Qcache_lowmem_prunes 0 メモリが足りずにキャッシュから削除されたクエリ数 Qcache_not_cached 171 キャッシュされなかったクエリ数 Qcache_queries_in_cache 649 キャッシュされているクエリ数 Qcache_total_blocks 1353 キャッシュ内のブロック数
これのうち、
Qcache_free_memory
Qcache_lowmem_prunes
を見ることで、キャッシュを必要としているクエリとそのクエリに対するメモリサイズが分かります。
これにより、必要に応じてキャッシュサイズの増減を行います。
SSL証明書の発行
お久しぶりです。とっしぃです。
長らく間が空いてしまいました。
まぁそれというのも来月辺り、ちょっと人生的な大きなイベントがあってその準備に奔走してるというのがあるんですがそれはまた別の話として。
今回もまた備忘録的なメモです。
たまーにサーバのSSL証明書発行するんですが、その度にコマンドとか忘れるのでとりあえずここに書いときます。
- 鍵作成
openssl genrsa 2048 > server.key
- CSR作成
openssl req -new -key server.key > server.csr
- 証明書作成
openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
- CSR確認
openssl req -text < server.csr
- 証明書確認
openssl x509 -text < server.crt
※コマンドオプションの意味とかはまた追記するかも。
ちなみに略語は
CSR | Certificate Signing Request(署名要求) |
CRT | Certificate |
DER | Distinguished Encoding Rules形式 |
PEM | Privacy Enhanced Mail形式 |
ということだそうです。