使用 Docker 部署 Go 项目| 青训营

98 阅读5分钟

使用 Docker 部署 Go 项目| 青训营

Go语言交叉编译

在 Go 语言中,交叉编译指的是在一个操作系统上构建可在另一个不同操作系统上运行的可执行文件。使用交叉编译,可以在本地环境上开发和构建不同操作系统下的应用程序。

以下是在不同操作系统上进行交叉编译的基本步骤:

  1. 设置环境变量:首先,确保已正确设置了 Go 语言的环境变量,包括 GOARCHGOOS。其中,GOARCH 指定目标操作系统的体系结构(例如 amd64、arm、386 等),GOOS 指定目标操作系统的名称(例如 windows、linux等)。根据需要设置这两个环境变量的值。

  2. 执行交叉编译:在命令行中,使用以下格式执行交叉编译命令:

    go build -o <输出文件名> <包路径>
    

以下是示例实践:

# 查看之前的golang编译环境
# 设置成linux对应的
set GOARCH=amd64
go env -w GOARCH=amd64
set GOOS=linux
go env -w GOOS=linux
​
#合并成一条命令
set GOARCH=amd64 & go env -w GOARCH=amd64 & set GOOS=linux & go env -w GOOS=linux
​
​
# 构建编译
go build
​
​
# 还原之前的编译环境
​
set GOARCH=amd64
go env -w GOARCH=amd64
set GOOS=windows
go env -w GOOS=windows
​
#合并成一条命令
set GOARCH=amd64 & go env -w GOARCH=amd64 & set GOOS=windows & go env -w GOOS=windows

以上代码是针对 Go 编程语言的一些环境变量设置。

  1. set GOARCH=amd64:这个命令设置了一个名为 GOARCH 的环境变量,并将其值设置为 amd64GOARCH 是用来指定目标机器的体系结构(即处理器架构),amd64 表示目标机器是 x86-64 架构。
  2. go env -w GOARCH=amd64:这是一个 Go 命令行工具的命令,使用 -w 参数可以修改 Go 环境变量。该命令将 GOARCH 环境变量的值设置为 amd64
  3. set GOOS=linux:这个命令设置了一个名为 GOOS 的环境变量,并将其值设置为 linuxGOOS 是用来指定目标操作系统的类型,linux 表示目标操作系统是 Linux。
  4. go env -w GOOS=linux:同样是使用 Go 命令行工具进行环境变量设置,该命令将 GOOS 环境变量的值设置为 linux
  5. 合并命令,使用 & 运算符(在 Windows 中)或 && 运算符(在 macOS 和 Linux 中)来分隔每个命令。这样,当第一个命令执行完毕后,才会执行下一个命令。

Dockerfile

# 设置基础镜像为 
FROM golang:latest
​
# 在容器内创建一个工作目录
WORKDIR /app
​
# 复制二进制文件到容器内的工作目录
COPY goapp /app/goapp
​
# 设置可执行权限
RUN chmod +x /app/goapp
​
# 暴露端口(如果需要)
EXPOSE 8080
​
# 定义容器启动时的入口点
CMD ["/app/goapp"]
​

创建Docker镜像和启动容器

一、创建 Docker 镜像

  1. 在你的 Go 项目根目录下创建一个名为 Dockerfile 的文件,用于构建 Docker 镜像。
  2. 构建 Docker 镜像:在终端中使用 docker build 命令执行 Dockerfile 构建镜像。

docker build -t yourimages .

这个命令是用于构建一个 Docker 镜像:

  • docker build:这是 Docker 命令的一部分,用于构建 Docker 镜像。
  • -t yourimages:通过 -t 参数指定了构建的镜像的名称,这里命名为 "yourimages"。你可以自定义镜像的名称,根据实际情况进行命名。
  • .:表示当前目录,这是构建上下文的路径,并且在该路径下会有一个名为 Dockerfile 的文件。Docker 将根据 Dockerfile 文件中的指令来构建镜像。

二、启动docker容器

docker run --name mygo -p 8080:8080 -d images

以上命令是在 Docker 中启动一个名为 "mygo" 的容器,并将容器内部的端口 8080 映射到宿主机的端口 8080。其中 images 构建的 Go 项目的 Docker 镜像名称。

具体参数的解释如下:

  • --name mygo:指定容器的名称为 "mygo"。
  • -p 8080:8080:将容器内部的端口 8080 映射到宿主机的端口 8080,使得外部可以通过访问宿主机的 8080 端口来访问容器中的应用程序。
  • -d:以后台方式运行容器。
  • images:表示你构建的 Go 项目的 Docker 镜像名称。

通过执行这段代码,你的 Go 项目将在 Docker 容器中以后台方式运行,并通过映射端口使得可以通过宿主机的 8080 端口访问该容器中运行的应用程序。

一些相关Docker命令

以下是对这些 Docker 命令的解释:

  • docker ps:该命令用于列出当前正在运行的容器。它将显示容器的相关信息,例如容器ID、镜像名称、启动时间、状态等。
  • docker ps -a:该命令用于列出所有的容器,包括正在运行的和已停止的容器。它将显示容器的相关信息,类似于 docker ps 命令,但是包含了所有状态的容器。
  • docker images:该命令用于列出本地主机上的所有 Docker 镜像。它将显示镜像的相关信息,如镜像ID、标签、创建时间、大小等。
  • docker stop:停止服务
  • docker rm:删除容器
  • docker rmi:删除镜像
  • docker logs:输出容器的日志信息,包括标准输出和标准错误输出。