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

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

 

■書籍

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

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

 

 

 DockerイメージとDockerコンテナの基本

まずはgihyodocker/echo:latestというDockerイメージを取得します。

■コマンド

docker image pull gihyodocker/echo:latest

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

なぜかダウンロードに30分もかかった。。。。

嘘、、、私の家の回線弱すぎ、、、

 

次にダウンロードしたDockerイメージを以下のコマンドで起動します。

■コマンド

docker container run -t -p 9000:8080 gihyodocker/echo:latest

 

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

 

今回はポートフォワーディングの設定をで9000ポート経由でHTTPリクエストを受けられるようにしています。

今度はcrulコマンドで正常にレスポンスが取得できるかを検証します。

crul・・・client for URLの略で様々なプロトコル経由でアクセスを検証できる。

■コマンド

curl http://localhost:9000/

 

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

 

Dockerは以下のコマンドで停止させることもできるようなので試してみます。

■コマンド

docker stop $(docker container ls -q)

$(docker container ls -q)・・・起動中のコンテナIDを取得する

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

 

再度接続するとconnection refusedになることも確認できました。

 

 

簡単なアプリケーションとDockerイメージを作る

今度は簡単なWebサーバをGo言語でかき、Dockerコンテナ上で稼働させてみます。

今回以下のソースコードを作成しました。

■仕様

・HTTPリクエストに対してHello Docker!と返す

・8080ポートでサーバーアプリケーションとして動作する

・クライアントからリクエストを受けた際は、received requestのログを標準出力に表示する

 

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

 

上記ファイルをDockerコンテナに配置するためにDockerイメージを新たに作成します。

main.goと同じディレクトリにDockerfileを作成します。

■各設定の補足

FROM・・・Dockerイメージのベースとなるイメージ、ここで指定されたイメージをダウンロードするので最初に宣言する(今回はGo言語なのgolang:1.9を指定)

RUN・・・・Dockerイメージをビルドする際にDockerコンテナ内で実行するコマンドを定義する

COPY・・・ホストマシンのデータをDockerコンテナにコピーする仕組み(今回はRUNで作成したディレクトリにGo言語で作成したファイルをコピーする)

CMD・・・Dockerコンテナ起動時に実行されるコマンドを指定する

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

Dockerイメージをビルドする

Docker image buildでビルドできます。書式は以下の通りです。

■書式

docker image build -t イメージ名[:タグ名] Dockerfile配置ディレクトリパス

今回は以下のコマンドで作成します。

■コマンド

docker image build -t example/echo:latest .

 

example/echo:latest・・・exampleは名前空間

.・・・カレントディレクトリを指定

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

 

Dockerイメージが作成されていることを確認します。

■コマンド

docker image ls

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

 

example/echoのdockerイメージが作成できていることが確認できました。

 

明日は実際に作成したDockerイメージを実行してみます。