golangの日記

Go言語を中心にプログラミングについてのブログ

dockerを使ったgolangの開発

golang.png


dockerを使ったGo言語の開発する手順(docker-composeなし)

日本語ドキュメント


ホスト側にディレクトリとファイルを作成

  $ mkdir ~/go/src/hello
  $ vim ~/go/src/hello/main.go

    package main

    func main() {
        println("hello from docker!")
    }


オフィシャルでgolangのイメージが用意されているので、pullする。 https://hub.docker.com/_/golang

  $ sudo docker pull golang
  $ sudo docker images
    REPOSITORY  TAG    ...
    golang      latest ...





コンテナを起動

$ sudo docker run -td --name godev -v ~/go/src/hello:/go/src/hello -w /go/src/hello golang

  • -t, --tty TTYをtrueにして起動後すぐに終了しないようにする
  • -d, --detach コンテナをバックグラウンドで実行する
  • --name [名前] IDの代わりに名前を付ける
  • -v, --volume ディレクトリを同期。ホストで編集した内容をコンテナ側にも反映させる
  • -w, --workdir コンテナ側での作業ディレクトリ


確認

  $ sudo docker ps
    CONTAINER ID     IMAGE    COMMAND ...
    28633bc88bac     golang   "bash"  ...


ワーキングディレクトリを確認

  $ sudo docker exec godev pwd
    /go/src/hello


プログラムの実行

  $ sudo docker exec godev go run main.go
    hello from docker!


ホスト側のファイルの内容を適当に書き換える

  $ vim main.go
  
    package main

    func main() {
        println("docker! docker!")
    }


再度実行

  $ sudo docker exec godev go run main.go
    docker! docker!


コンテナ側でビルドする

  $ sudo docker exec godev go build


コンパイルして生成された実行ファイルがホスト側にもある

  $ ls
    hello
  
  $ ./hello
    docker! docker!