使用 Docker 部署 Go 项目| 青训营
Go语言交叉编译
在 Go 语言中,交叉编译指的是在一个操作系统上构建可在另一个不同操作系统上运行的可执行文件。使用交叉编译,可以在本地环境上开发和构建不同操作系统下的应用程序。
以下是在不同操作系统上进行交叉编译的基本步骤:
-
设置环境变量:首先,确保已正确设置了 Go 语言的环境变量,包括
GOARCH和GOOS。其中,GOARCH指定目标操作系统的体系结构(例如 amd64、arm、386 等),GOOS指定目标操作系统的名称(例如 windows、linux等)。根据需要设置这两个环境变量的值。 -
执行交叉编译:在命令行中,使用以下格式执行交叉编译命令:
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 编程语言的一些环境变量设置。
set GOARCH=amd64:这个命令设置了一个名为GOARCH的环境变量,并将其值设置为amd64。GOARCH是用来指定目标机器的体系结构(即处理器架构),amd64表示目标机器是 x86-64 架构。go env -w GOARCH=amd64:这是一个 Go 命令行工具的命令,使用-w参数可以修改 Go 环境变量。该命令将GOARCH环境变量的值设置为amd64。set GOOS=linux:这个命令设置了一个名为GOOS的环境变量,并将其值设置为linux。GOOS是用来指定目标操作系统的类型,linux表示目标操作系统是 Linux。go env -w GOOS=linux:同样是使用 Go 命令行工具进行环境变量设置,该命令将GOOS环境变量的值设置为linux。- 合并命令,使用
&运算符(在 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 镜像
- 在你的 Go 项目根目录下创建一个名为 Dockerfile 的文件,用于构建 Docker 镜像。
- 构建 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:输出容器的日志信息,包括标准输出和标准错误输出。