Docker初心者ですが頑張りたいと思います。
よろしくお願いします。
#目的
Dockerの勉強がてらGoの勉強をする
Hello Worldを出力するまでやろうと思います。
#動作環境
Windows10 Pro
Docker for windows
#Goの環境を構築する
ファイル構成は以下のようになってます
-go_lang
│-docker-compose.yml
|
|-app_go
│-Dockerfile
|-app
今後DBコンテナ等を増やすかもしれないのでdocker-composeを用いています
version: '3'
services:
app:
#app_goの中にあるDockerfileの読み込み
build: ./app_go
container_name: "app_go"
tty: true
#ホストのディレクトリをコンテナにマウント
volumes:
- ./app_go/app:/go/src/app
ローカル側でファイルをいじりたいのでappディレクトリをマウントしています
tty: true
がないとコンテナが終了してしまいます。
FROM golang:1.8
WORKDIR /go/src/app
Dockerfileについては特に言うことはないでしょう
コンテナ作成に必要なファイルは揃ったのでbuildしていきましょう
ターミナルを開きdocker-compose.ymlがあるディレクトリまで移動して以下のコマンドを実行
PS C:\go_lang> docker-compose build
Building app
Step 1/2 : FROM golang:1.8
---> 0d283eb41a92
Step 2/2 : WORKDIR /go/src/app
---> Running in b2e6eb0d0fc5
Removing intermediate container b2e6eb0d0fc5
---> e142e671f39f
Successfully built e142e671f39f
Successfully tagged go_lang_app:latest
golangイメージがローカルにない場合はdockerhubからgolangイメージを取ってくるので2~3分程かかります
ビルドが終わったら実際にイメージが作られているか確認してみましょう。
PS C:\go_lang> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
go_lang_app latest febbabb91a83 About an hour ago 713MB
golang 1.8 0d283eb41a92 11 months ago 713MB
go_lang_appとgolangがビルドして作られたイメージです
確認ができたらコンテナを起動していきましょう
PS C:\go_lang> docker-compose up -d
Creating network "go_lang_default" with the default driver
Creating app_go ... done
PS C:\go_lang>
環境構築はできたのでGoのコードを書いていきます。
#Hello World
go_lang/app/go_appの中にsample.goを作成します。
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
作成したらコンテナの中に入りプログラムを実行します
コンテナに入るにはexecコマンドを使います
PS C:\go_lang> docker exec -it app_go bash
root@803babe23e01:/go/src/app# ls
sample.go
root@803babe23e01:/go/src/app#
go/src/appには先ほどローカルで作成されたsample.goがあります。
go runでプログラムを実行します
root@803babe23e01:/go/src/app# go run sample.go
Hello, world
できた!!ヽ(・∀・)ノ
コンテナから抜けて終了します
root@803babe23e01:/go/src/app# exit
exit
PS C:\go_lang> docker-compose down
Stopping app_go ... done
Removing app_go ... done
Removing network go_lang_default
PS C:\go_lang>
以上です
今回はこれで終わります