🎃

DockerでGoの実行環境を作る

2022/10/14に公開

DockerでGo言語の実行環境を作成します。
windows11のwsl2 ubuntuを実行構築としています。

実行環境

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy

バージョン

$ docker -v
Docker version 20.10.18
$ docker-compose -v
Docker Compose version v2.11.2

構成

tree
.
├── Dockerfile
├── app
│   └── main.go
└── compose.yml

treeコマンドは入っていなければ、インストールします。
wsl2のubuntuには入ってませんでした。

$ sudo apt update
$ sudo apt install -y tree

vscodeが薦めてきたアドオンWSLを紹介


ターミナルから現在の階層でcode .コマンドを実行すると、VSCODEがその階層エクスプローラーで立ち上がるので、ファイルを修正したいときに便利です。

Dockerfileを作成します。

ここを参考にします。
https://docs.docker.jp/engine/userguide/eng-image/dockerfile_best-practice.html

Dockerfile

# https://hub.docker.com/_/golang からイメージを選ぶ
FROM golang:1.19.2-alpine3.15
# ホストのファイルをコンテナの作業ディレクトリにコピー
COPY . /go/src/app
# ワーキングディレクトリの設定
WORKDIR /go/src/app/

compose.yaml

services: 
    app: # サービス名
        build: . # ビルドに使うDockerfileの場所
        tty: true # コンテナの永続化
        volumes:
            - ./app:/go/app # マウントディレクトリ

動かしたいgoファイル
main.go

package main

import "fmt"

func main() {
	fmt.Println("Hello aaaworld")
}

dockerをバックグラウンドで起動します。

$ docker compose up -d
[+] Running 1/0
 ⠿ Container app  Running                                                                0.0s

dockerが動いてるか確認できます。

$ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS          PORTS     NAMES
4fb6ff3b6e5a   go-app    "/bin/sh"   41 minutes ago   Up 41 minutes             go-app-1
# コンテナに入る
$ docker exec -i -t go-app-1 sh
# exitで抜ける
/go/app # exit

これでmain.goが実行できるか試します。

$ docker compose exec app go run main.go
Hello world

コンテナを終了させます。

$ docker-compose down
[+] Running 2/2
 ⠿ Container go-app-1  Removed                                        10.3s
 ⠿ Network go_default  Removed   

DockerでGoファイルを動かすまでに発生したエラー

1.dockerが動いてないときに、dockerのコマンドを打つと発生します。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解決策として、dockerを動かします。

$ sudo service docker start
 * Starting Docker: docker 

2.dockerのファイル名が間違ってたときに発生しました。

failed to solve: failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount219234493/Dockerfile: no such file or directory

参考
https://zenn.dev/tomi/articles/2020-10-14-go-docker

Discussion