在 Docker 中运行 Golang 应用程序

科技   2024-10-31 23:58   广东  

Docker 是开发人员用于创建、部署和运行容器化应用程序的重要工具。容器将应用程序及其依赖项打包在一起,使其更容易在不同环境中一致地部署。本文将介绍如何安装 Docker、测试 Docker 命令以及在 Docker 容器中运行 Golang 应用程序。

安装 Docker

要开始使用 Docker,首先需要在您的系统上安装它。

在 Ubuntu 上安装 Docker

  1. 更新软件包列表:
sudo apt-get update
  1. 安装 Docker 的依赖项:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  1. 添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 添加 Docker 仓库:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装 Docker:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 验证 Docker 安装:
docker --version

您应该看到 Docker 的版本号,确认其已成功安装。

在 Windows 和 macOS 上安装 Docker

对于 Windows 和 macOS,您可以从官方网站下载 Docker Desktop。按照安装说明进行操作,即可开始使用 Docker。

测试基本的 Docker 命令

安装 Docker 后,建议测试一些基本命令以确保一切正常。

运行您的第一个 Docker 命令

  1. 检查 Docker 状态:
sudo systemctl status docker # 对于 Linux

(在 Windows/macOS 上,Docker Desktop 会自动启动 Docker 守护进程。)

  1. 在 Docker 中运行 Hello World:
docker run hello-world

此命令下载并运行一个小型 Docker 容器,打印“Hello from Docker!” 如果您看到此消息,说明 Docker 正常工作。

  1. 列出正在运行的容器:
docker ps

此命令显示所有正在运行的容器。如果没有容器在运行,列表将为空。

  1. 列出所有容器:
docker ps -a

此命令列出所有容器,包括已停止的容器。

  1. 移除一个容器:
docker rm <container_id>

<container_id> 替换为您想要移除的容器 ID,该 ID 可通过 docker ps -a 列出。

  1. 移除未使用的 Docker 镜像:
docker image prune -a

此命令清除未使用的镜像以节省空间。

在 Docker 中运行 Golang 应用程序

现在 Docker 已安装并正常工作,我们来创建并在 Docker 容器中运行一个简单的 Golang 应用程序。

第一步:编写一个简单的 Golang 应用程序

创建一个项目目录并进入该目录:

mkdir go_docker_app
cd go_docker_app

创建一个名为 main.go 的文件,并写入以下内容:

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, Dockerized Golang!")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Starting server on port 8080...")
    http.ListenAndServe(":8080"nil)
}

这个应用程序设置了一个简单的 Web 服务器,监听 8080 端口,并对任何 HTTP 请求响应“Hello, Dockerized Golang!”

第二步:创建 Dockerfile

在同一目录下,创建一个 Dockerfile 来定义您的 Golang 应用程序的 Docker 镜像:

创建一个名为 Dockerfile 的文件,并粘贴以下代码:

# Use the official Golang image as the base
FROM golang:1.19

# Set the working directory inside the container
WORKDIR /app

# Copy the Go application code to the container
COPY . .

# Build the Go application
RUN go mod init go_docker_app && go build -o app main.go

# Expose the port on which the app will run
EXPOSE 8080

# Run the app
CMD ["./app"]

Dockerfile 说明

  • FROM:指定基础镜像。这里我们使用官方的 Golang 1.19 镜像。
  • WORKDIR:设置容器内的工作目录为 /app
  • COPY:将主机当前目录下的文件复制到容器的 /app 目录。
  • RUN:初始化 Go 模块并使用 go build -o app main.go 构建应用程序。
  • EXPOSE:暴露应用程序运行的 8080 端口。
  • CMD:指定容器启动时运行的命令。

第三步:构建 Docker 镜像

使用 Dockerfile 构建您的 Go 应用程序的 Docker 镜像:

docker build -t go_docker_app .

此命令告诉 Docker 从当前目录(.)中的 Dockerfile 构建一个名为 go_docker_app 的镜像。

第四步:运行 Docker 容器

镜像构建完成后,运行容器:

docker run -p 8080:8080 go_docker_app

此命令将主机上的 8080 端口映射到容器中的 8080 端口,使您可以从主机访问应用程序。

第五步:测试应用程序

打开浏览器或使用 curl 测试应用程序:

curl http://localhost:8080

您应该看到响应:Hello, Dockerized Golang! 这确认您的 Golang 应用程序已成功在 Docker 容器中运行。

第六步:停止并移除容器

要停止容器,请在运行容器的终端中按 Ctrl + C。要以后台进程(分离模式)运行它,使用:

docker run -d -p 8080:8080 go_docker_app

要停止一个分离的容器,使用 docker ps 列出正在运行的容器,然后使用 docker stop <container_id>

其他 Docker 提示(可选)

  1. 检查 Docker 日志:
docker logs <container_id>
  1. 访问正在运行的容器的 Shell:
docker exec -it <container_id> /bin/bash
  1. 移除 Docker 镜像:
docker rmi go_docker_app

在本指南中,我们介绍了:

  1. 在各种系统上安装 Docker。
  2. 测试和管理容器的基本 Docker 命令。
  3. 使用 Dockerfile 在 Docker 中创建和运行 Golang 应用程序。

在 Docker 容器中运行应用程序提供了一种一致且隔离的环境,确保您的应用程序在不同系统上表现一致。将 Go 应用程序容器化,使其易于部署、可移植,并可在各种云或本地环境中扩展。


文章精选

使用 Go 语言连接并操作 SQLite 数据库

Go语言官方团队推荐的依赖注入工具

替代zap,Go语言官方实现的结构化日志包

Go语言常见错误 | 不使用function option模式

必看| Go语言项目结构最佳实践

源自开发者
专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。
 最新文章