🎃
DockerでGoの実行環境を作る
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を作成します。
ここを参考にします。
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
参考
Discussion