init
This commit is contained in:
36
.devcontainer/Dockerfile
Normal file
36
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
FROM golang:1.21-bullseye
|
||||||
|
|
||||||
|
# 安装基本工具
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
vim \
|
||||||
|
sudo \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 创建一个非root用户
|
||||||
|
ARG USERNAME=vscode
|
||||||
|
ARG USER_UID=1000
|
||||||
|
ARG USER_GID=$USER_UID
|
||||||
|
|
||||||
|
RUN groupadd --gid $USER_GID $USERNAME \
|
||||||
|
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
|
||||||
|
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
|
||||||
|
&& chmod 0440 /etc/sudoers.d/$USERNAME
|
||||||
|
|
||||||
|
# Go工具设置
|
||||||
|
ENV GOPATH=/go
|
||||||
|
ENV PATH=$GOPATH/bin:/usr/local/go/bin:$PATH
|
||||||
|
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" "$GOPATH/pkg" \
|
||||||
|
&& chmod -R 777 "$GOPATH" \
|
||||||
|
&& go install -v golang.org/x/tools/gopls@latest \
|
||||||
|
&& go install -v github.com/go-delve/delve/cmd/dlv@latest \
|
||||||
|
&& go install -v honnef.co/go/tools/cmd/staticcheck@latest
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
WORKDIR /workspace
|
||||||
|
|
||||||
|
# 使用创建的非root用户
|
||||||
|
USER $USERNAME
|
||||||
23
.devcontainer/devcontainer.json
Normal file
23
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "Go Dev Environment",
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile",
|
||||||
|
"context": ".."
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
"go.toolsManagement.checkForUpdates": "local",
|
||||||
|
"go.useLanguageServer": true,
|
||||||
|
"go.gopath": "/go"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"golang.go",
|
||||||
|
"ms-vscode.go",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"forwardPorts": [8080],
|
||||||
|
"postCreateCommand": "go mod tidy",
|
||||||
|
"remoteUser": "vscode"
|
||||||
|
}
|
||||||
26
README.md
Normal file
26
README.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# DevContainer测试应用
|
||||||
|
|
||||||
|
这是一个简单的Go应用,用于测试DevContainer功能。
|
||||||
|
|
||||||
|
## 功能
|
||||||
|
|
||||||
|
- 提供一个基本的HTTP服务器
|
||||||
|
- 显示服务器时间和请求信息
|
||||||
|
- 包含健康检查端点(/health)
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
1. 在DevStar中启动该DevContainer
|
||||||
|
2. 容器启动后,访问映射的端口(默认8080)
|
||||||
|
3. 你应该能看到一个简单的问候页面
|
||||||
|
|
||||||
|
## 开发
|
||||||
|
|
||||||
|
DevContainer已经配置好了Go开发环境,包括:
|
||||||
|
|
||||||
|
- Go语言支持
|
||||||
|
- 代码补全
|
||||||
|
- 调试工具
|
||||||
|
- 常用命令行工具
|
||||||
|
|
||||||
|
只需在VS Code中打开,或通过DevStar提供的编辑器接口访问。
|
||||||
36
main.go
Normal file
36
main.go
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// 获取环境变量或使用默认值
|
||||||
|
port := os.Getenv("PORT")
|
||||||
|
if port == "" {
|
||||||
|
port = "8080"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建一个简单的HTTP服务器
|
||||||
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
hostname, _ := os.Hostname()
|
||||||
|
fmt.Fprintf(w, "Hello from DevContainer!\n")
|
||||||
|
fmt.Fprintf(w, "Server time: %s\n", time.Now().Format(time.RFC1123))
|
||||||
|
fmt.Fprintf(w, "Hostname: %s\n", hostname)
|
||||||
|
fmt.Fprintf(w, "Remote Address: %s\n", r.RemoteAddr)
|
||||||
|
fmt.Fprintf(w, "User-Agent: %s\n", r.UserAgent())
|
||||||
|
})
|
||||||
|
|
||||||
|
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
fmt.Fprintf(w, "Healthy")
|
||||||
|
})
|
||||||
|
|
||||||
|
// 启动服务器
|
||||||
|
log.Printf("Starting server on port %s", port)
|
||||||
|
log.Fatal(http.ListenAndServe(":"+port, nil))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user