• docker部署go项目


    介绍

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

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

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

    web 项目

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

    项目目录:

    .
    ├── Dockerfile
    ├── go.mod
    ├── hello
    ├── main.go
    └── service.log
    • 1

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

    编译

    go build -o hello
    ./hello
    • 1

    访问

    curl http://127.0.0.1:8080/hello
    • 1

    输出

    hello world
    • 1

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

    编译

    GOOS=linux GOARCH=amd64 go build -o hello
    • 1

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

    Dockerfile 文件:

    # 基础镜像
    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"]
    • 1

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

    docker build -t hello:v1.0.0 . 运行以上构建 Docker 镜像的命令之后,我们就已成功构建 Docker 镜像。

    Docker 部署

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

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

    docker images
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    hello        v1.0.0    8daaf8297956   11 seconds ago   11.7MB
    • 1

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

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

    docker run -d -p 9090:8080 hello:v1.0.0
    74f75a374493f21caaf0f2e7f3d14698c3909446c78af6dc1172ac3f9052d839
    • 1

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

    查看容器列表:

    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
    • 1

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

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

    访问

    curl http://127.0.0.1:9090/hello
    • 1

    输出

    hello world
    • 1

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

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

    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
    • 1

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

    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 
    • 1

    Docker 容器管理工具 docker compose

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

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

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

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

    docker-compose.yml 文件:

    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"
    • 1

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

    # 启动容器
    docker-compose up -d
    # 查看容器列表
    docker-compose ps
    # 查看日志
    docker-compose -f
    # 关闭容器
    docker-compose stop
    # 启动容器
    docker-compose start
    # 重启容器
    docker-compose restart
    # 关闭并删除容器
    docker-compose down
    • 1

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

    总结

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

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

    1. 交叉编译

    2. 编写 Dockfile 文件

    3. 构建镜像

    4. 运行容器

    关注 获取更多好文

    alt

    本文由 mdnice 多平台发布

  • 相关阅读:
    19.数据结构和算法的交叉口,下一章进入算法介绍
    平板电脑在AI 人工智能时代的新机遇是哪些?
    Stream流中的 max()和 sorted()方法
    win10查看wifi密码
    线程五大状态,以及线程方法
    【SpringBoot高级篇】SpringBoot集成Mybatis实现多数据源配置+跨数据源事务
    pytorch在有限的资源下部署大语言模型(以ChatGLM-6B为例)
    Maven安装详解
    【设计模式】原型模式的浅拷贝和深拷贝
    Codeforces Round 901 (Div. 2) - C. Jellyfish and Green Apple - 思维+位运算
  • 原文地址:https://blog.csdn.net/qq_39787367/article/details/126014285