VSCode 使用 docker-compose 进行 golang 开发
O 前言
在网上搜索使用 vscode 进行 golang 的 docker 配置,有大量的文章,在官网也有很详细的说明,但我就是看不明白!!
自己搞了一晚上,总算把所有的坑填上了。记录一下,聊以自慰。
一、 前置操作
安装 vscode 略
安装 golang 略
golang 使用 module 模式而非 GOPATH, 略
vscode 中安装 remote-containers 插件,略
二、新建 go 项目
-
创建文件夹
/golang/study.06, 并使用 vscode 打开。 -
新建
main.go
我这里使用`
package main
import (
"fmt"
"log"
"net/http"
)
func homepage(w http.ResponseWriter, r *http.Request) {
// 显示内容
fmt.Fprintf(w, "Hello golang http in docker!")
}
func main() {
// 设置路由
http.HandleFunc("/", homepage)
// 启动web服务,监听 9090
log.Fatel(http.ListenAndServe(":9090", nil))
}
- 初始化模块
# 初始化模块
go mod init study06
# 下载依赖模块
go mod tidy
- 测试
# 启动服务
go run .
在浏览器查看http://localhost:9090 ,可以看到效果。
5. 文件目录
study.06
|-- go.mod
|-- main.go
三、添加 docker-compose 支持
1. 添加模板
执行 F1, Remote-Containers: Add Development Container Configuration Files,依次选择 Go, default,lts(default),确定。
此时,添加了 .devcontainer/.devcontiner.json和.devcontaier/Dockerfile两个文件。
2. 使用docker-compose
在.devcontainer中添加docker-compose.yml,也可以多添加几个配置,如docker-compose.dev.yml。
# docker-compose.yml
version: "3"
services:
study-06:
build:
context: .
dockerfile: Dockerfile
# docker-compose.dev.yml
version: "3"
services:
study-06:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace:cached
ports:
- 9090:9090
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
command: /bin/sh -c "while sleep 1000; do :; done"
3. 修改 devcontainer.json
默认配置是使用Dockerfile的,修改devcontainer.json 以使用docker-compose。
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.209.6/containers/go
{
"name": "Go",
"dockerComposeFile": ["docker-compose.yml", "docker-compose.dev.yml"],
"service": "study-06",
"workspaceFolder": "/workspace",
"shutdownAction": "stopCompose",
// "build": {
// "dockerfile": "Dockerfile",
// "args": {
// // Update the VARIANT arg to pick a version of Go: 1, 1.16, 1.17
// // Append -bullseye or -buster to pin to an OS version.
// // Use -bullseye variants on local arm64/Apple Silicon.
// "VARIANT": "1-bullseye",
// // Options
// "NODE_VERSION": "lts/*"
// }
// },
// "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],
// Set *default* container specific settings.json values on container create.
"settings": {
"go.toolsManagement.checkForUpdates": "local",
"go.useLanguageServer": true,
"go.gopath": "/go",
"go.goroot": "/usr/local/go"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["golang.Go"],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "go version",
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
}
4. 修改Dockerfile
最后添加 Expose 9090 绑定端口
5. 在容器中打开文件夹
F1 执行 Open Folder in Container,选择 study.06目录,此时vscode会编译并运行镜像,进入镜像中的环境。
执行 go run .,就可以在 http://localhost:9090 中看到结果了。
6. 更新
如果对docker文件进行任何修改后,可以执行 F1 -> Rebuild 重新生成镜像。
文章写于 2022-01-10, 于2023-03-21 迁移到掘金。