🐥
go言語の開発用コンテナ
はじめに
- go言語開発用のコンテナです
- sshd も入れて、vscode から直接接続する
- git もコンテナ内に入り込んだ状態でする
- コンテナの起動停止は compose でする
- ssh-key は手動て作成した
- wsl のフォルダとつないでないので、ssh-key を再作成することもあるけどまぁいい
コンテナ
Dockerfile
- 作業用ユーザは useradd しておいた
- ssh-key はとりあえず自力で作って github に都度追加した
FROM golang:1.24-bookworm
RUN echo 'export PATH="/usr/local/go/bin:${PATH}"' > /etc/profile.d/go_path.sh
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
sudo \
openssh-server \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /run/sshd && ssh-keygen -A
RUN useradd -m -s /bin/bash yukip \
&& usermod -aG sudo yukip \
&& echo "yukip ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN su - yukip -c 'mkdir /home/yukip/.ssh'
COPY authorized_keys /home/yukip/.ssh/
RUN chmod 700 /home/yukip/.ssh \
&& chmod 600 /home/yukip/.ssh/authorized_keys
COPY yukip.bashrc /home/yukip/
RUN echo "source ~/yukip.bashrc" >> /home/yukip/.bashrc
RUN su - yukip -c 'git config --global user.name "yukip"' \
&& su - yukip -c 'git config --global user.email "yukip@chottodake.dev"'
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D", "-e"]
compose.yaml
- docker run でもいいんだけど、ポートの指定とかホスト名とかあるので compose にしておいた
services:
ssh:
image: con01
build: .
container_name: con01
hostname: con01
ports:
- "2221:22"
go アプリ
- 上で作ったコンテナに vscode の remote-ssh で入り込んでから作業する
- gcp の gce で開発するときとおんなじ感じで作業できる感じ
- リポジトリは非公開だけど内容はこれ
- go言語の拡張機能と dlv は vscode の画面で自分で追加する
- go で作った web アプリ用のポートは開かなくても vscode が通してくれるみたい
- vscode でデバッグできた
go.mod
module github.com/free-chottodake-dev/go06
go 1.24.5
main.go
package main
import (
"fmt"
"log"
"net/http"
)
func handleFunc(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "ok")
log.Print("handleFunc")
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Print("start")
http.HandleFunc("/", handleFunc)
log.Print("http://localhost:8080 ...")
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Print(err)
return
}
}
vscode launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}"
}
]
}
Discussion