Docker部署Golang服务

这篇具有很好参考价值的文章主要介绍了Docker部署Golang服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不管是开发还是生产环境,通过 docker 方式部署服务都是一种不错的选择,能够解决不同开发环境一致性的问题。

本文以项目:https://github.com/johncxf/go-api 为例。

Dockerfile 构建 Go 运用环境

在项目根目录下添加 Dockerfile 文件:

FROM golang:alpine

# 在容器内部设置环境变量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 设置后续指令的工作目录
WORKDIR /build

# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 将代码复制到容器中
COPY . .

# 将代码编译成二进制可执行文件
RUN go build -o go-api .

WORKDIR /dist

RUN cp /build/go-api .

COPY ./config ./config

# 需要运行的命令
ENTRYPOINT ["/dist/go-api", "/dist/config/env.yml"]

如果需要缩小镜像大小,则可以用以下方式进行构建

FROM golang:alpine AS builder

# 在容器内部设置环境变量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 设置后续指令的工作目录
WORKDIR /build

# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 将代码复制到容器中
COPY . .

# 将代码编译成二进制可执行文件
RUN go build -o go-api .


# 创建一个小镜像
#FROM scratch
FROM debian:stretch-slim

COPY ./config /config

# 从builder镜像中把 /build/go-api 拷贝到当前目录
COPY --from=builder /build/go-api /

# 需要运行的命令
ENTRYPOINT ["/go-api", "config/env.yml"]

注:镜像scratch没有bash,会导致无法通过docker exec进入容器,建议直接改成debian:stretch-slim镜像

构建 docker 镜像 go-web-app

$ docker build -t go-web-app .

# 查看镜像
$ docker images

启动容器来运行镜像:

$ docker run -p 8888:8088 go-web-app

# 后台启动
$ $ docker run -p 8888:8088 -d go-web-app

# 查看容器
$ docker ps -a
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                    NAMES
959ee47f203b   go-web-app   "/go-api config/env.…"   23 seconds ago   Up 22 seconds   0.0.0.0:8888->8088/tcp   nostalgic_mclean

标志位-p用来定义端口绑定,容器中go服务端口为 8088,绑定到本机端口 8888,接下来就可以通过http://127.0.0.1:8888进行访问了。

Mysql 容器
拉取 Mysql 镜像:
# 拉取最新版本 mysql,也可以指定版本
$ docker pull mysql:latest

# 查看镜像
$ docker images
运行 Mysql 容器:
$ docker run --name mysql -p 8306:3306 -e MYSQL_ROOT_PASSWORD=root123456 -v ~/docker-data/mysql:/var/lib/mysql -d mysql:latest

# 查看容器
$ docker ps -a
  • --name mysql-latest:容器命名为 mysql-latest
  • -p 8306:3306:映射容器服务的 3306 端口到宿主机的 8306 端口,外部主机可以直接通过 宿主机ip:8306 访问到MySQL服务
  • -e MYSQL_ROOT_PASSWORD=root123456:设置 MySQL 服务 root 用户密码
  • -v /Users/john/docker-data/mysql:/var/lib/mysql:表示将宿主机的/Users/john/docker-data/mysql卷映射到容器里的 /var/lib/mysql卷中,为了把数据保存在宿主机中,防止容器删掉就没了
  • -d:后台运行
  • mysql:latest:使用这个mysql镜像
连通性测试:

进入 docker 容器连接 mysql:

# 进入容器
$ docker exec -it mysql-latest /bin/sh
# 连接 mysql
$ mysql -uroot -proot123456 -h 127.0.0.1 -P3306

或者本机可以通过 navicat 等工具进行连接。

Redis 容器
拉取 Redis 镜像:
$ docker pull redis

# 查看镜像
$ docker images
运行 Redis 容器:
$ docker run --name redis -v ~/docker-data/redis:/usr/local/redis -p 6379:6379 -d redis:latest --requirepass "root123456"

# 查看容器
$ docker ps -a

其他参数同mysql配置,--requirepass 用来设置 Redis 密码

连通性测试:

直接在本地使用 redis-cli 测试 redis 连通性:

> redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> auth root123456
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

进入容器:

> docker exec -it redis /bin/sh
# redis-cli -p 6379
127.0.0.1:6379> auth root123456
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
# exit
修改配置

由于要连接不同容器内的数据库,需要修改项目数据库配置HOST地址为容器名,这里以我的项目配置 env.yml为例子:

# MySQL 配置
mysql:
#  host: 127.0.0.1 # 服务器地址
  host: mysql
  port: 3306 # 端口
  db_name: test # 数据库名称
  username: root # 数据库用户名
  password: root123456 # 数据库密码
  ...
  
# Redis 配置
redis:
#  host: 127.0.0.1 # 地址
  host: redis
  port: 6379 # 端口
  db: 0
  password: root123456 # 密码

然后重新 build Go服务镜像:

$ docker build -t go-web-app .

重新启动容器,并使用--link关联Mysql、Redis容器:

$ docker run --name go-api --link=mysql:mysql --link=redis:redis -p 8888:8088 -d go-web-app

注:使用这种方式构建环境,每次都需要单独启动Mysql、Redis、go服务容器,并通过 --link关联容器

文章推荐:文章来源地址https://www.toymoban.com/news/detail-815667.html

  • Docker 入门指南
  • Docker compose 常用指令

到了这里,关于Docker部署Golang服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • golang的docker 简单部署

    基础的环境 最开始搭建的想法 我就是想单独的创建三个docker,然后链接使用,就是go可以链接mysql和redis 开始搭建 1 首先创建一个docker的网络,将这三个容器全部放入这个网段中,他们才可以通过内网访问,可能会有人问,为什么不使用外网,这个原因有很多,就不一一说了

    2024年02月21日
    浏览(33)
  • Docker Golang 开发环境搭建指南

    在 Golang 开发中,搭建合适的开发环境是非常重要的。然而,由于 Golang 的跨平台特性,不同操作系统之间的配置差异可能会导致环境搭建过程变得复杂。为了简化这个过程并保持开发环境的一致性,我们可以使用 Docker 来创建一个统一的 Golang 开发环境。 本文将介绍如何使用

    2024年02月03日
    浏览(61)
  • 【Docker】Docker的使用案例以及未来发展、Docker Hub 服务、环境安全、容器部署安全

    作者简介: 辭七七,目前大二,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖    Docker是一个命令行工具,它提供了中央“docker”执行过程中所需的所有工具 。这使得Docker的操作非常简单。

    2024年02月08日
    浏览(49)
  • [Docker]六.Docker自动部署nodejs以及golang项目

    app.js代码如下:  package.json代码如下: 把上面文件放入/var/www/node下,如图: 在/var/www/node下创建Dockerfile,并编写部署的代码,代码如下: (1).通过docker build -t docker.io/mynode:v1 . 生成node项目镜像 (2).通过docker images查看生成的node项目镜像 REPOSITORY                       TAG            

    2024年01月19日
    浏览(41)
  • docker容器打包成镜像,在新的服务器上部署环境

    2719a6b5b8e1是容器id(用docker ps 命令查看) , my_paddle2.2.2:v1 是自己打包的镜像的名字命名格式,有冒号的 docker commit -a “shi” -m “to150” 2799a6b6b8e1 my_paddle2.2.2:v1 -o 和 是一个意思都是打包镜像的符号 sparkdemo:v1 ,就是有冒号,整体镜像名字规则 docker images查看镜像,后用命令保存

    2023年04月08日
    浏览(57)
  • 【云原生 | 37】Docker快速部署编程语言Golang

    🍁 博主简介 :         🏅云计算领域优质创作者         🏅新星计划第三季python赛道第一名         🏅阿里云ACE认证高级工程师         🏅阿里云开发者社区专家博主 ✒️ 博主微信 :15575411187 💊 交流社区 :小鹏linux(个人社区)欢迎您的加入! 目录

    2024年02月01日
    浏览(65)
  • 使用 Golang 和 Docker 实现 Python 计算服务

    本篇文章,我们继续前一篇的话题《使用 Golang 和 Docker 运行 Python 代码》,聊聊如何使用 Golang 和 Docker 将普通的 Python 软件包封装为高性能的服务。 在上一篇内容中,我们提到过 Python 在 Golang 中运行,存在一些使用场景限制。 如果我们在整个项目中直接引入这个方案,会让

    2024年02月17日
    浏览(44)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(110)
  • Docker安装Nginx/Python/Golang/Vscode【亲测可用】

    一、docker安装nginx docker安装nginx,安装的是最新版本的:docker pull nginx:latest 创建一个容器:docker run --name my-nginx -p 80:80 -d nginx:latest 开启一个交互模式终端:docker exec -it my-nginx bash 创建django项目:django-admin startproject mysite 查看容器ID:docker ps -a; 设置容器自动重启:docker update

    2024年02月02日
    浏览(37)
  • 【Java】微服务——Docker容器部署(docker安装,docker配置镜像加速,DockerHub,docker基本操作,Dockerfile自定义镜像.Docker-Compose)

    微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1.1.1.应用部署的环境问题 大型项目组件较多,运

    2024年02月04日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包