以下文章未设置 go代理 ,即链接
go env -w GO111MODULE=on
go env -w GOPROXY=https://proxy.golang.com.cn,direct
或
# 配置 GOPROXY 环境变量
export GOPROXY=https://proxy.golang.com.cn,direct
# 还可以设置不走 proxy 的私有仓库或组,多个用逗号相隔(可选)
export GOPRIVATE=git.mycompany.com,github.com/my/private
继续上一篇文章提到的 docker-compose, 这一次我们根据配置文件直接拉起配置环境以及所需要的redis环境。
以下构建的环境,只要不重新构建容器,都是一次设置,后续使用都是会保存数据的。
配置文件
层级目录如下图:
与上篇文章相比,我们创建了 .devcontainer 文件夹,把 .devcontainer.json 文件移动到了 .devcontainer 文件夹下,并且把 .devcontainer.json 文件名称换成了 devcontainer.json,同样的 Dockerfile 文件 也放到了 .devcontainer 文件夹下。新增了 .env 文件,用于配置环境变量 以及 新增了 docker-compose.yml 文件,用于配置 docker-compose 环境。
Dockerfile
与上篇文章完全一致。
FROM golang:1.18.3-bullseye
# Configure to reduce warnings and limitations as instruction from official VSCode Remote-Containers.
# See https://code.visualstudio.com/docs/remote/containers-advanced#_reducing-dockerfile-build-warnings.
RUN apt-get update
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install git iproute2 procps lsb-release
.env
此文件为新增的,我只是象征性的增加了一个测试环境变量
testenv=qqq
docker-compose.yml
version: '3.8'
volumes:
redis-data:
# services.redis.volumes下有引用 redis-data:/data
services:
app:
build:
context: .
# 引用 Dockerfile 文件 (同级目录)
dockerfile: Dockerfile
env_file:
# 引用环境变量配置文件
- .env
volumes:
- ..:/workspace:cached
command: sleep infinity
network_mode: service:redis
# forward_port:
# 80:80
# 端口映射
redis:
image: redis:7.0.2
restart: unless-stopped
volumes:
- redis-data:/data
environment:
- TZ=Asia/Shanghai
env_file:
- .env
# forwardPorts:
# - "6379:6379"
# 端口映射
devcontainer.json
// https://code.visualstudio.com/docs/remote/devcontainerjson-reference#_general-devcontainerjson-properties
// https://code.visualstudio.com/docs/remote/devcontainerjson-reference#_docker-compose-specific-properties
// https://code.visualstudio.com/docs/remote/devcontainerjson-reference
{
"name": "Go & Redis",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace",
// Indicates whether VS Code and other devcontainer.json supporting tools should stop the containers when the related tool window is closed / shut down. Values are none, stopContainer (default for image or Dockerfile), and stopCompose (default for Docker Compose).
//"shutdownAction": "stopCompose",
//配置工具特定的属性。
//在创建容器时添加要安装的扩展的 ID。
"extensions": [
"golang.Go",
"ms-vscode.go",
"GitHub.copilot",
"mrcrowl.hg",
"oderwat.indent-rainbow",
"VisualStudioExptTeam.vscodeintellicode",
"mohsen1.prettify-json",
"johnstoncode.svn-scm",
"zxh404.vscode-proto3"
],
"settings": {
"go.toolsManagement.checkForUpdates": "local",
"go.useLanguageServer": true,
"go.gopath": "/go",
"go.goroot": "/usr/local/go"
},
"customizations": {
"vscode": {
// 在容器创建时设置 *default*容器特定的 settings.json 值
"settings": {
// "go.toolsManagement.checkForUpdates": "local",
// "go.useLanguageServer": true,
// "go.gopath": "/go",
// "go.goroot": "/usr/local/go"
},
"extensions": [
// "golang.Go",
// "ms-vscode.go",
// "GitHub.copilot",
// "mrcrowl.hg",
// "oderwat.indent-rainbow",
// "VisualStudioExptTeam.vscodeintellicode",
// "mohsen1.prettify-json",
// "johnstoncode.svn-scm",
// "zxh404.vscode-proto3"
]
}
}
// 使用 "forwardPorts" 在宿主机可以访问 端口映射
// "forwardPorts": [5432],
// 创建容器后使用 "postCreateCommand" 运行命令。
// "postCreateCommand": "go version",
// 远程访问默认以 root 用户访问,打开注释以 vscode 用户访问。https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
}
其余文件,与上篇文章 相同。
当我们使用 vscode 的 reopen in container 时,容器会自动拉起。第一次时我们执行 sh command_init_env.sh 初始化环境,go mod tidy 更新依赖。然后就可以在debug里执行 cmd/main.go 了。
注意修改 cmd/main.go 里的redis连接代码:
rdb := redis.NewClient(&redis.Options{
Addr: "redis:6379",
Password: "", // no password set
DB: 0, // use default DB
})
Addr 的 ip 是 redis的原因是,我们在 docker-compose.yml 里面,使用 network_mode: “service:[service name]” 方式,service name 是 ridis .所以这里写的是 service name.