はじめに
以下の教材に取り組む際、Windowsでcurlコマンドを実行しようとするとオプションを変える必要があったりとストレスを感じ、Dockerで開発環境を作成しました。その際の設定を簡単に記録しておきます。
環境
- Windows10
- Docker Desktop:26.1.1
ディレクトリ構成
project
├ src
│ ├ Dockerfile
│ ├ go.mod
│ └ main.go
└ compose.yaml
各ファイル
Dockerfile
最低限の構成です。将来的にデータベースを入れるのでイメージはGoではなくUbuntuにしています。
主に使いたいのはcurl, gitで、確認用にvim, tree, lsofを入れています。
Dockerfile
FROM ubuntu:22.04
RUN apt update && \
apt install -y golang-go
RUN apt install -y curl git vim tree lsof
compose.yaml
WindowsのVSCodeで開発をし、それを即コンテナに反映させるためバインドマウントしています。
compose.yaml
services:
app:
container_name: my-go-api
build:
dockerfile: src/Dockerfile
context: .
tty: true
volumes:
- type: bind
source: ./src
target: /src
ports:
- '18001:8080'
ファイル名は「docker-compose.yml」ではなく「compose.yaml」が推奨されているようです。
また、compose.yamlにバージョンを書く必要もないそうです。
main.go
動作確認用に簡単なmain.goファイルを作っておきます。
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
動作確認
起動
docker compose up --detach
Dockerfileを修正した場合は、イメージを作り直す必要があるので$ docker-compose up --build --detach
しましょう
起動確認
docker compose ls
NAME STATUS CONFIG FILES
myapi running(1) {前略}\project\compose.yaml
main.go実行
まずコンテナに入ります。
docker container exec `
--interactive `
--tty `
my-go-api `
bash
Shellの場合はバックスラッシュ\
で改行してください
一応Goが入っているか確認します。
# go version
go version go1.18.1 linux/amd64
main.goを実行します。
# cd src
# go run main.go
Hello, world!
おわりに
このあと教材のサンプルコードに従ってmain.goを作成し、curlコマンドを実行したところ上手くいきました。
参考