前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go 语言怎么使用 Docker 部署项目?

Go 语言怎么使用 Docker 部署项目?

作者头像
frank.
发布于 2022-05-17 03:46:36
发布于 2022-05-17 03:46:36
2.2K22
代码可运行
举报
运行总次数:2
代码可运行

01

介绍

Go 语言可以使用内置命令行工具 go build 编译生成可执行文件。自 Go1.5 版本开始实现自举后,交叉编译也很方便,只需使用 GOOSGOARCH 环境变量指定目标平台和架构。

部署 Go 项目,只需运行可执行文件,一般有三种方式,分别是使用 nohup 命令、使用 supervisord 进程管理工具、使用 Docker

本文我们介绍怎么使用 Docker 部署 Go 项目。阅读本文,需要读者朋友们了解 Docker 的基本操作。

02

web 项目

首先,我们开发一个简单的 Go Web 项目,使用 Go 内置命令行工具 go build 编译生成可执行文件 ./hello

项目目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── Dockerfile
├── go.mod
├── hello
├── main.go
└── service.log

我们使用 Go 标准库编写一个 Web 项目,运行编译生成的可执行程序,访问 http://127.0.0.1:8080/hello,输出 hello word

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 编译
go build -o hello
./hello
# 访问
curl http://127.0.0.1:8080/hello
# 输出
hello world

如果使用 curl 访问,可以正常输出 hello world,说明我们程序已正常运行。需要注意的是在我们构建 Docker 镜像之前,我们需要重新使用以下命令,交叉编译生成 linux 平台的可执行程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 编译
GOOS=linux GOARCH=amd64 go build -o hello

在完成以上准备工作之后,我们开始编写 Dockerfile 文件,使该项目可以支持使用 Docker 部署。

Dockerfile 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基础镜像
FROM alpine:3.12
# 维护者
MAINTAINER frank
# docker build 时执行命令 - 创建目录
RUN mkdir -p "/data/app" \
&& ln -sf /dev/stdout /data/app/service.log
# 工作目录
WORKDIR "/data/app"
# 拷贝
COPY hello /data/app/hello
# docker run 时执行命令
ENTRYPOINT ["./hello"]

在编写完 Dockerfile 文件之后,我们可以使用 docker 命令构建镜像,前提是我们本机已安装 Docker。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t hello:v1.0.0 .

运行以上构建 Docker 镜像的命令之后,我们就已成功构建 Docker 镜像。

03

Docker 部署

我们已经构建好了 Docker 镜像,现在可以使用 Docker 部署项目了。

首先,执行 docker images 命令,查看镜像列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
hello        v1.0.0    8daaf8297956   11 seconds ago   11.7MB

运行上面命令,我们可以看到我们构建好的镜像名称为 hello 的 Docker 镜像。

然后,我们使用该镜像,运行一个容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -p 9090:8080 hello:v1.0.0
74f75a374493f21caaf0f2e7f3d14698c3909446c78af6dc1172ac3f9052d839

需要注意的是,我们使用宿主机端口 9090 映射容器端口 8080。其中参数 -d 用于该程序在后台运行,参数 -p 用于映射端口。

查看容器列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps -a
CONTAINER ID   IMAGE          COMMAND     CREATED         STATUS         PORTS                    NAMES
74f75a374493   hello:v1.0.0   "./hello"   9 seconds ago   Up 8 seconds   0.0.0.0:9090->8080/tcp   dazzling_ramanujan

执行 docker ps -a 命令,我们可以查看容器列表。

最后,我们使用 curl 访问 http://127.0.0.1:9090/hello,输出 hello world

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 访问
curl http://127.0.0.1:9090/hello
# 输出
hello world

如果使用 curl 访问,可以正常输出 hello world,说明我们已经成功完成使用 Docker 部署 Go 项目。

我们可以使用 docker logs 命令,查看程序日志。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker logs -f 74
2022/04/09 05:09:08 [info]run success
2022/04/09 05:09:21 [info]run success
2022/04/09 05:09:21 [info]run success
2022/04/09 05:09:22 [info]run success

我们可以使用 docker exec 命令进入容器中,查看项目文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it 74 /bin/sh
/data/app # ls -al
total 5948
drwxr-xr-x    1 root     root          4096 Apr  9 05:07 .
drwxr-xr-x    1 root     root          4096 Apr  9 05:07 ..
-rwxr-xr-x    1 root     root       6075093 Apr  9 04:12 hello
lrwxrwxrwx    1 root     root            11 Apr  9 05:07 service.log -> /dev/stdout
/data/app #

04

Docker 容器管理工具 docker compose

使用 Docker 部署 Go 项目,我们需要先使用 docker build 命令构建 Docker 镜像,然后使用 docker run 命令运行容器,并且命令后面一般还需要一些参数,操作多少有些繁琐。

我们可以使用 Docker 容器管理工具 docker compose 解决此问题。读者朋友们如果不了解 docker compose,请自行查阅相关资料,限于篇幅,本文不再赘述。

我们主要介绍怎么将 docker compose 和 Dockerfile 配合使用,管理容器和镜像。

我们需要创建一个 docker-compose.yml 文件,在该文件中配置运行容器需要的命令和参数。

docker-compose.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.8'
services:
  webapp:
    restart: always # Docker 重启时,容器也重启
    build: # 构建 Docker 镜像
      context: ./ # Dockerfile 文件的目录
      dockerfile: Dockerfile # Dockerfile 文件的名称
    image: hello:1.0.0 # 镜像名称和版本号
    container_name: hello # 容器名称
    ports: # 宿主机和容器之间映射端口
      - "9090:8080"

在编写完 docker-compose.yml 文件之后,我们可以使用 docker-compose 命令行工具管理容器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 启动容器
docker-compose up -d
# 查看容器列表
docker-compose ps
# 查看日志
docker-compose -f
# 关闭容器
docker-compose stop
# 启动容器
docker-compose start
# 重启容器
docker-compose restart
# 关闭并删除容器
docker-compose down

需要注意的是,使用 docker-compose 命令行工具,需要在 docker-compose.yml 文件当前目录执行。

05

总结

本文我们介绍怎么使用 Docker 部署 Go 项目,并且介绍 Docker 容器管理工具 docker compose 的简单使用,关于 docker 和 docker compose 的更多介绍,感兴趣的读者朋友们可以自行查阅资料。

使用 Docker 部署 Go 项目,主要共分为四步:

  1. 交叉编译
  2. 编写 Dockfile 文件
  3. 构建镜像
  4. 运行容器

参考资料: https://docs.docker.com/language/golang/ https://docs.docker.com/compose/compose-file/compose-file-v3/ https://docs.docker.com/compose/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
报/bin/sh: ./hello: not found这个错误
报/bin/sh: ./hello: not found这个错误
回复回复点赞举报
构建镜像成功,跑镜像不成功,后面改成构建镜像,不启动hello的方法,这个时候进去容器后,执行hello,报错
构建镜像成功,跑镜像不成功,后面改成构建镜像,不启动hello的方法,这个时候进去容器后,执行hello,报错
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
[Docker]如何使用Docker部署一个go程序
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
宇宙无敌暴龙战士之心悦大王
2023/03/06
1.8K0
Docker Getting started with Java
Docker 官网提供了 python,nodejs,java 3种不同编程语言的 Language-specific guides 学习指南。该指南详细说明了如何编写 Dockerfile 文件,部署 Docker 容器以及构建 CI/CD pipline。
Se7en258
2021/05/18
2K0
Docker Getting started with Java
使用dockerfile部署项目(附详细步骤)
Dockerfile 是一个文本文件,它包含了所有用于组合Docker镜像所需的指令和参数。这些指令和参数基于Docker镜像的层的概念,并定义了如何从一个基础镜像开始,通过添加、修改文件、安装软件包、配置环境变量和设置启动命令等操作,最终构建出一个新的Docker镜像
红队蓝军
2024/07/26
2.8K0
使用dockerfile部署项目(附详细步骤)
Docker--Compose介绍(三)
Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Kevin song
2022/11/19
4590
Docker--Compose介绍(三)
Docker Compose 项目打包部署
参考官方:https://docs.docker.com/compose/compose-file/
IT茂茂
2020/03/19
5.4K0
Docker - 制作Nodejs镜像
本文基于腾讯云云服务器CVM系统工具配置文章的基础上,在腾讯云云服务器(CentOS系统)上基于镜像文件Dockerfile制作 Nodejs 镜像。
lqmeta
2022/02/13
6.4K0
Docker|基础篇
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
用户3467126
2019/07/03
1.1K0
Docker|基础篇
详解Docker——你需要知道的Docker进阶知识五
Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。
云原生
2021/05/31
9630
Docker快速入门
docker stop/start container-id 停止/启动指定 id 的容器
爽朗地狮子
2022/10/20
1.1K0
一文零基础教你学会 Docker 入门到实践
Docker 自 2013 年发布至今一直备受关注,从招聘面试角度来看有些职位对于了解 Docker、K8S 这些也有一些加分项,同时学习 Docker 也是后续学习 K8S 的基础,但是对于 Docker 很多人也需并不了解,其实 Docker 也并没有那么难,本文从 Docker 入门到应用实践为大家进行讲解,中间也列举了很多实例,希望能帮助大家更好的理解。
五月君
2019/09/27
7950
一文零基础教你学会 Docker 入门到实践
Docker与Docker Compose入门:释放你的应用部署的威力
嘿,大家好!今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨大的好处。
wayn
2024/01/18
9750
Docker与Docker Compose入门:释放你的应用部署的威力
Docker在PHP项目开发环境中的应用
环境部署是所有团队都必须面对的问题,随着系统越来越大,依赖的服务也越来越多,比如我们目前的一个项目就会用到: - Web服务器:Nginx - Web程序:PHP + Node - 数据库:MySQL - 搜索引擎:ElasticSearch - 队列服务:Gearman - 缓存服务:Redis + Memcache - 前端构建工具:npm + bower + gulp - PHP CLI工具:Composer + PHPUnit 因此团队的开发环境部署随之暴露出若干问题: 1. 依赖服务很多,本
前朝楚水
2018/04/03
2.7K0
.NET Core容器化之多容器应用部署@Docker-Compose
1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题。 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel。 Kestrel is great for serving dynamic content from ASP.NET, however the web serving parts aren’t as feature rich as ful
圣杰
2018/01/11
1.8K0
.NET Core容器化之多容器应用部署@Docker-Compose
基于Jenkins的CICD
首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限(/usr/local/docker/jenkins_docker/data)
九转成圣
2024/04/10
1400
基于Jenkins的CICD
Docker从入门到精通(八)——Docker Compose
恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具。
IT可乐
2021/12/27
8790
Docker从入门到精通(八)——Docker Compose
使用docker部署caddy暨buildx编译多架构镜像
由于 caddy 使用了 cf 的 dns 插件,更新的时候比较麻烦,所以想着使用 docker 来部署,自己只需要 build 最新的 caddy 镜像就可以了。
tanmx
2023/10/18
1.2K0
使用 docker 轻松部署你的 Go 项目
如果你是一名 Go 开发者,你一定知道用 Go 写代码是一件多爽的事,高效而简洁。那么如果我告诉你,部署 Go 项目同样也可以这么轻松愉快呢?这就是 Docker 的魅力所在。
陈明勇
2024/10/24
1.9K0
使用 docker 轻松部署你的 Go 项目
Docker Compose 1.18.0 之服务编排详解
一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器
程序员鹏磊
2018/01/18
1.5K0
Docker Compose 1.18.0 之服务编排详解
docker 及 docker-compose 的快速安装和简单使用
通过下面的一个脚本可以简单快速的创建一个镜像并运行起来 大概看下应该就可以大概明白镜像的基本使用了
易墨
2018/09/14
1.8K0
Docker实践(五):Docker Compose
 Compose是用于定义和运行多个Docker应用的工具。使用yaml文件可以快速的创建和管理基于Docker容器的应用集群。
loong576
2019/09/10
1.3K0
Docker实践(五):Docker Compose
相关推荐
[Docker]如何使用Docker部署一个go程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验