Docker/K8S実践コンテナ開発入門@3日目

今回もDocker/K8Sの実践本の続きを対応します。

今回は実際に作ったWebサーバが稼働することを確認していきます。

 

■書籍

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

 

 

Dockerコンテナを実行する

■コマンド

docker container run example/echo:latest

f:id:lawrence-twin:20200412174343p:plain

 

動かない、、、昨日作成したmain.goがおかしかったか?

VSCodeを参照すると以下の通り

f:id:lawrence-twin:20200412203439p:plain

宣言は正しいよなーと思っていたのですが、

main.goという名称をやめると本来のエラーが表示されました。

 

f:id:lawrence-twin:20200412203247p:plain

ResponceWriterはパッケージ内で宣言されていないということなので、

...

あ、Respon"s"eをRespon"c"eと書いていました。。。

修正してエラーが解消しました。その後ファイル名をmain.goに戻しましたが特に問題な買ったです。なんだったのか???

 

goファイルを修正したので、

dockerイメージを再ビルドし、もう一度Dockerコンテナを動かします。

f:id:lawrence-twin:20200412204145p:plain

この動かし方はフォアグラウンドでの実行ですが、

バックグラウンドで稼働させたい場合は-dオプションをつけることでコンテナを実行させることができます。

 

ポートフォワーディング

最後にこのDockerコンテナ上のアプリケーションが正しく稼働しているかを確認します。

■コマンド

curl http://localhost:8080/

f:id:lawrence-twin:20200412205250p:plain

 

ここでは接続できないのが正しいのですが、これはDockerコンテナによる特徴によるものです。

Dockerコンテナは仮想環境ですが、外から一つの独立したマシンのように扱える特徴があります。echoアプリケーションは8080を公開していますがこれはコンテナ内の限定ポートです。

直接8080は接続できないため、ポートフォワーディングによって接続する必要があります。

 

まずは以下のコマンドでDockerコンテナを停止させます。

■コマンド

docker container stop $(docker container ls --filter "ancestor=example/echo" -q)

f:id:lawrence-twin:20200412205618p:plain

 

今度はポートフォワーディングされるように以下のコマンドでDockerコンテナを起動します。

■dockerコンテナをポートフォワーディングで起動するコマンド

docker container run -d -p 9000:8080 example/echo:latest

■接続確認コマンド

curl http://localhost:9000/

f:id:lawrence-twin:20200412205906p:plain

 

Hello Dockerが返却されたので稼働したことが確認できました。

今度はポート番号を指定しなかった場合のパターンも検証してみます。

■コマンド

docker container run -d -p 8080 example/echo:latest //dockerを起動

docker container ls  //dockerのポート番号を特定

curl http://localhost:32768 //接続確認

f:id:lawrence-twin:20200412230957p:plain

 

ポート番号が、上記結果から"32768"->8080 となっていることが分かったので、

32768で接続できることを確認します。

一応ログファイルにも出力されているか確認してみます。

■コマンド

docker container ls //NAMESを取得する

docker logs <dockerName> // Dockerのログを取得する

 

f:id:lawrence-twin:20200412231644p:plain

 

received requestというログも実装した通り出力されていることが確認できました。

 

Dockerイメージ操作及びコンテナ操作をざっくり行いました。他にも操作系の基本コマンドがあるのですがそちらは別途整理します。

明日以降はdocker-composeを利用していきます。