Dockerの中で go をビルドして、Hello World することがゴールです。
手順をシンプルに書いていきます。
まず Docker と Docker-compose を入れておきます。これは省略します。
Dockerディレクトリを作成
以下のようにファイルを作ります。
./docker
./docker/.env
./docker/docker-compose.yml
./docker/go
./docker/go/Dockerfile
./src/
./src/go
Dockerの設定
Docker全体用の設定
今回はコンテナは1つしか作りませんが、
今後の拡張を考えたつくりにはしておきます。
常にクセづけておくことで、迷うことがなくなります。
.env
COMPOSE_PROJECT_NAME=go-docker-starter
goビルド用コンテナ
docker-compose.yml
version: '3'
services:
go:
build: ./go
container_name: '${COMPOSE_PROJECT_NAME}-go'
tty: true
volumes:
- "../src/go:/opt/src"
Dockerfile
FROM golang:1.14.0
Dockerコンテナ作成
cd ./docker
docker-compose build
docker-compose up -d
これで Dockerコンテナが起動します。
docker-compose build せずとも、 up -d だけでもビルド一緒にしてくれているのですが、
それは気を利かせてくれているだけなので、動きを理解するためにも build してみましょう。
go の初期ソースコード作成
./src/sample.go
package main
import "fmt"
func main() {
fmt.Printf("Hello World\n")
}
sample のビルド
デバッグ用ビルド & 実行
変更する度に行うビルドです。
docker exec go-docker-starter-go bash -c "cd /opt/src/ && GOOS=linux GOARCH=amd64 go run sample.go"
ビルド
docker exec go-docker-starter-go bash -c "cd /opt/src/ && GOOS=linux GOARCH=amd64 go run sample.go"
sample.go と同じディレクトリに出力されます。
-o
オプションで出力先を指定することもできます。
github