morito

個人的に勉強したことのメモを投稿していく技術ブログ。最近はWebアプリ開発と量子コンピュータの勉強をしてます。

Docker + GitでGoの開発を始める

環境

  • Docker Version 20.10.2
  • docker-compose version 1.27.4, build 40524192

Githubリポジトリを作る

f:id:sakanamori:20210309154953p:plain

URLをとってきて任意のディレクトリで

Git clone [URL]

Docker環境作成

Dockerfileを記述
FROM golang:1.14.0-alpine3.11

# ビルド時にashを使う
SHELL ["/bin/ash", "-c"]
WORKDIR /go/src/app
COPY ./ ./
# EXPOSE 8080

# Go Modulesを使うと明言する
ENV GO111MODULE=on

# apkはalpine linux(超軽量なLinux)の独自のパッケージ管理システム
RUN apk add --no-cache alpine-sdk
docker-compose.ymlを記述
version: '3' # composeファイルのバーション指定
services:
  app: # service名
    build: . # ビルドに使用するDockerfileがあるディレクトリ指定
    tty: true # コンテナの起動永続化
    volumes:
      - .:/go/src/app # マウントディレクトリ指定

dockerコンテナの中で作業していく

docker-compose up -d
docker-compose exec app /bin/ash

bashではなくashというSHELLを利用していることに注意。alpineベースだとBashはないらしくて怒られた。

touch main.go
go mod init main

main.goを作り
Go modulesで初期化する
ローカルディレクトリにもファイルが作られていたら成功

main.goにはとりあえずHelloWorldを書く

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
/go/src/app # go run main.go 
Hello, World!

ちゃんと出力されました。

ここまででディレクトリ構成はこんな感じになってます。

.
├── Dockerfile
├── README.md
├── docker-compose.yml
├── go.mod
└── main.go

とりあえずGoのコードを実行するところまで環境構築できました。
次はDocker+Goでアプリ開発していきます。
Go Modules周りとかで詰まりそうで怖い〜