惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
D
Docker
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - 司徒正美
博客园 - Franky
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
AI
AI
O
OpenAI News
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Secure Thoughts
博客园 - 聂微东
L
LINUX DO - 最新话题
U
Unit 42
SecWiki News
SecWiki News
A
Arctic Wolf
Schneier on Security
Schneier on Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
量子位
The Cloudflare Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
B
Blog
博客园 - 【当耐特】
C
CERT Recently Published Vulnerability Notes
Scott Helme
Scott Helme
Last Week in AI
Last Week in AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
Latest news
Latest news

文章列表 on polarisxu

通过一个例子让你彻底掌握 Go 工作区模式 这道题正确率竟然只有 22% Go 开源项目推荐:一个简单的 Go 练手项目 go test 如何禁用缓存? Go1.18 快讯:constraints 包被移除标准库 跟着 Go 作者学泛型 「2022 版」轻松搞定 Go 开发环境 鹅厂小哥用行动反对加班:程序员加班能被终结吗? Go 为什么选择 Gopher 作为吉祥物? 本地如何配置多个 GitHub/Gitee 账号? 为 Java 开发者准备的 Go 教程 02:Java 有而 Go 无 GitHub 发现了 studygolang 项目依赖的漏洞 Typora 宣布收费后,这款开源 Markdown 编辑器火了 为 Java 开发者准备的 Go 教程 01:漫游了 我的 2021 年终总结 泛型版 singleflight:Go 中如何防止缓存击穿? 2021 年你写了多少代码?这个 Go 工具帮你统计 Go1.18 新特性:TryLock Go 泛型入门教程 程序员瑞士军刀:各种结构的转换工具 终于有 Go 版的 Elasticsearch 了 Go泛型系列:maps 包讲解 Go 1.18 中的 any 是什么? Go1.18 快讯:新的 IP 包 Go编程模式:详解函数式选项模式 Go泛型系列:slices 包讲解 Nginx 竟然也有 playground — Go 语言构建的 Go泛型系列:Go1.18 类型约束那些事 Go1.18 快讯:Module 工作区模式 Go1.18 快讯:新增的 Cut 函数太方便了 Go1.18 快讯:废弃了这个 API Go1.18 快讯:新增字符串 Clone API Go:如何获得项目根目录? Go 如何获取和设置环境变量 重磅变动:更快找到微信公众号里的Go文章 Go 这样设置版本号:我们的项目也可以 假期结束,推荐 2 本 manning 出的 Go 图书 Go Fiber 框架系列教程 04:测试应用 Go Fiber 框架系列教程 03:中间件 Go泛型系列:提前掌握Go泛型的基本使用 推荐一个 Go GUI 实战项目 Go Fiber 框架系列教程 02:详解相关 API 的使用 Go Fiber 框架系列教程 01: 和 Express 对比学习 Go Module:私有不合规库怎么解决引用问题 Go1.17 新特性:go get 变了 Go1.17 新特性:testing 包的相关变化 StackOverflow 上关于 Go select 死锁的问题 新书推荐:用 Gin 框架构建分布式应用 Go 官网要变天。。。 Gin 这是要成为 Go 官方框架? 扬眉吐气:刚刚,Go 已经默认支持泛型了 Go 1.17 新特性:Module 有哪些变化? Go 第三方库推荐:类型转换如此简单 担心密码提交到 GitHub?建议使用这个 Go 开源工具 Go 的时间格式化为什么是 2006-01-02 15:04:05? GitHub 为 Go 社区带来安全支持 Go开源项目推荐:500行代码确认请求时间花在哪 一道关于 len 函数的诡异 Go 面试题解析 厉害了我的 Go:推荐系统都有开源实现 Go1.17 新特性:新版构建约束 这个工具真好:看看你的Go项目依赖有无漏洞 网友很强大,发现了Go并发下载的Bug Rust 劝退系列 09:函数 Go项目实战:一步步构建一个并发文件下载器 这本 Go 新书挺期待的:100 个常见错误 Go 启用新的官方问答社区 这是要干嘛?!微软招 Go 编译器全职开发人员 Go1.17 快报之标准库越来越注重易用性 Go1.17 新特性之切片变数组 回顾 Go 官网的演变史 站长8年前的Go代码竟然进入大厂的项目里了 Go图书翻译:一个好消息,一个坏消息 不怕烂尾!决定组织翻译这本 Go 图书 Rust 劝退系列 08:模式匹配 一本花了2.5年写成的Go免费在线图书 被黑惨了:一句话,说明自己会 Go,咋整? Go1.16 中的新函数 signal.NotifyContext 怎么用? Go 1.17 新特性提前学之测试执行随机化 Rust 劝退系列 07:流程控制 官方的 Go 多版本管理:使用和原理 Rust新书:给你一个劝退的理由 周刊题解:常量表达式这个规则应该了解下 盘点那些使用 Go 语言的国外公司 编写了50万行Go代码是一种什么体验 Rust 劝退系列 06:常量 Uber 使用 Go 的规模这么大?!都自己定制的 Go 编译器了 Go Team Leader — rsc 大神新开源了一个库,增强模板功能 再一次看到了 Go 的节制:int128 类型要不要支持? Rust 劝退系列 05:复合数据类型 「卷」有理论依据:海勒姆定律—Go又是怎么卷的 Go 真的也可以进行 GUI 开发:还有这样的图书呢 Rust 劝退系列 04:基本数据类型 我的 Go 语言书单 Rust 劝退系列 03:变量 我又来推荐免费 Go 新书了:一本用 Go 讲架构的书 注释竟然还有特殊用途?一文解惑 //go:linkname 指令 这个功能,公众号、微信群会不会被玩坏? 一道 Go 闭包题,面试官说原来自己答错了:面别人也涨知识 Rust 劝退系列 02:第一个 Rust 程序 Rust 劝退系列 01:打造开发环境
基于 GoLand 使用 Docker 容器进行 Go 开发
2020-05-04 · via 文章列表 on polarisxu

今天,我们开始撰写一系列有关 GoLand 内部对 Docker,Docker Compose 和 Kubernetes 的支持以及它如何帮助我们在 Go 中编写(微)服务的文章。

我们将研究如何在 IDE 中配置项目,如何使用 Docker 或 Kubernetes 运行或调试我们的项目,以及如何将项目连接到我们选择的数据库 PostgreSQL。

让我们从介绍普通的 Docker 工作流程开始,然后我们将构建容器并运行它。

在继续之前,我们需要 GoLand 2020.1.1 或更高版本,该版本带有最新的 Docker 插件。我们还需要一个相当现代的 Docker 版本,例如 17.06 或更高版本。注意:虽然旧版本的 IDE 在一定程度上可以使用,但是本文使用了新功能,并且 IDE 的外观可能有所不同。

项目设置

让我们开始设置我们的项目。

我们可以创建一个新的 Go Modules 项目,也可以使用现有的项目。

项目结构应类似于此仓库中的结构:https://github.com/dlsniper/dockerdev

本教程不会介绍如何为你的系统安装和配置 Docker。

相反,我们将从配置 Docker 服务器开始,以便我们可以运行我们的应用程序。将 Docker 安装到系统中后,转到 Settings/Preferences | Build, Execution, Deployment | Docker,然后单击 + 按钮添加新的 Docker 服务器连接。

默认情况下,该插件将创建与本地计算机 Docker 服务器的连接,对于我们的教程而言已经足够了。单击确定按钮以创建服务器配置。

使用 Dockerfile

首先,让我们在项目的根目录中打开 Dockerfile。

# Compile stage
FROM golang:1.13.8 AS build-env
 
ADD . /dockerdev
WORKDIR /dockerdev
 
RUN go build -o /server
 
# Final stage
FROM debian:buster
 
EXPOSE 8000
 
WORKDIR /
COPY --from=build-env /server /
 
CMD ["/server"]

该 Dockerfile 使用多阶段构建,该方式使我们能够生成最小的 Docker 映像,因为构建应用程序二进制文件的编译阶段与构建容器的最终阶段是分开的。

将上面的代码粘贴到 Dockerfile 中后,第一个 FROM […] 指令旁边会出现一个绿色箭头。这是运行容器的最快方法。

但是,我们需要进行一些编辑才能运行它,因为我们需要为容器公开正确的端口以接收连接。

02 - Dockerfile

为容器创建一个新的运行配置

我们可以创建一个新的运行配置,也可以编辑仓库中存在的配置。为了简单起见,直接使用现有的,因为它已经预先填写了我们需要的所有值。要对其进行编辑,请单击选项列表底部的 Edit ‘Docker – Web – Standalone’ 选项。

在这里,我们可以设置运行 Docker 容器所需的所有选项。我们的运行配置已经填上了重要内容,例如配置名称:“ Docker – Web Dev – Standalone”。容器名称设置为 docker-web-dev-standalone。最后,在“绑定端口”字段中,我们将“主机”端口和“容器”端口都设置为 8000,以便可以访问应用程序。

03 - Edit Dockerfile Run Configuration

现在,我们可以单击对话框底部的 “Run” 按钮,来启动我们的容器。

了解服务工具窗口

Docker 完成构建过程后,我们可以查看 “Services Tool Window” 窗口,并在 “Containers” 部分中看到新创建的容器。我们还将在 “Images” 部分中看到使用的镜像。

对于每个容器,有以下可用选项卡:

  • Build Log:它显示用于构建容器的日志;
  • Log:显示容器的输出;
  • Attached console:如果可以的话,这允许我们与容器的应用程序/shell 交互;
  • Properties:将显示有关容器的更多信息,例如 镜像 ID 或容器 ID;
  • Environment variables:显示容器使用的环境变量;
  • Port bindings:显示容器暴露给主机的所有端口;
  • Volume bindings:显示为容器安装的卷;
  • Files:如果它支持运行 ls 命令,则允许我们浏览容器中的文件。对于像我们这样的基于 Alpine 的容器,我们可以添加 RUN apk add –no-cache coreutils 指令来启用此功能;

在左侧,我们可以看到各种按钮。首先,有一个 “Redeploy” 按钮,它使我们可以再次运行容器的构建配置。

还有 “Edit Configuration” 按钮,可用于对容器的 “Run Configuration” 进行任何调整。

最后, “Start/Stop” 按钮,用于启动或停止容器,以及 “Delete” 按钮,用于删除容器。

容器上的右键单击操作可以访问一些其他有用的功能。我们可以使用 List Processes 看到正在运行的进程的列表,也可以使用 Exec 在正在运行的容器中执行命令。最后,Inspect 将提供有关容器及其当前配置的更多信息。

Pro tip:如果将鼠标悬停在容器名称上,则可以看到容器的正常运行时间。

Pro tip:要加快容器的构建速度,请使用 Go vendoring mode。在 IDE 终端中运行 go mod vendor 命令可确保 IDE 自动选择 vendor 文件夹。为此,您还需要在容器的环境变量列表中添加 GOFLAGS ="-mod = vendor"

总结

我们讨论了如何创建和运行 Docker 配置。在下一篇文章中,我们将介绍如何调试 Docker 中的应用程序。

原文链接:https://blog.jetbrains.com/go/2020/05/04/go-development-with-docker-containers/

作者:Florin Pățan

翻译:Go语言中文网 polaris