使用dockerfile构建golang项目

Docker

在这里简单介绍下Docker,建议深入学习

Docker 是一个开源的轻量级容器技术,让开发者可以打包他们的应用以及应用运行的上下文环境到一个可移植的镜像中,然后发布到任何支持Docker的系统上运行。 通过容器技术,在几乎没有性能开销的情况下,Docker 为应用提供了一个隔离运行环境

  • 简化配置
  • 代码流水线管理
  • 提高开发效率
  • 隔离应用
  • 快速、持续部署

常用命令

镜像相关:

查看镜像: docker images

搜索镜像:docker search 镜像名

拉取镜像: docker pull 镜像名

删除镜像:docker rmi id

构建镜像:1.docker commit(基于一个容器构建一个镜像),无法自定义(不常用),一般用dockerfile构建

容器相关:

创建并运行容器: docker run ((-d后台运行) (-p端口映射 主机端口:容器端口) (--name 指定容器名)(--rm退出时删除容器)(--restart 容器意外关闭重启策略:1.no 表示关闭不重启 2.on-failure:指定重启次数,当容器关闭时重启,超过次数不再重启 3.always:只要容器关闭就重启(相当于这个容器无法关闭)适用于要一直开着的服务)(-e设置容器环境变量)(-m限制内存)(--cpus限制cpu)(--net指定网络模式)(--link连接其他容器(单向)(-v绑定数据卷))镜像名

查看容器:docker ps (默认查看正在运行的容器)(-a查看未运行)

停止/启动容器: docker stop/start id

删除容器:docker rm id

容器重启策略:1.no 表示关闭不重启 2.on-failure:指定重启次数,当容器关闭时重启,超过次数不再重启 3.always:只要容器关闭就重启(相当于这个容器无法关闭)适用于要一直开着的服务

查看容器详细信息:docker inspect id

查看容器状态:docker stats id

查看容器日志:docker logs (-f持续追踪)id

指定容器执行命令:docker exec (-it在终端中显示)name

进入容器内部:docker exec -it name /bin/bash(指定容器名和运行脚本)

Golang

以下为一个简单的golang web项目httpTest

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()

    r.GET("/hello", func(c *gin.Context) {
        c.JSON(http.StatusOK, "hellohttp")
    })

    r.Run(":8080")
}

dockerfile

作用:需要把自己开发的项目打包成镜像,便于docker运行

概念:docker提供的自定义构建镜像的配置文件,利用docker build命令指定dockerfile就可以按照文件构建镜像

常用命令

FROM 指定基础镜像

MAINTAINER 描述镜像作者

LABEL 镜像的标签信息

ENV 配置环境变量

RUN 构建镜像时需要执行的命令

ADD 将主机的文件复制到容器的目录中 ADD /etc/hosts/index.html(主机) /etc/hosts(容器)

WORKDIR 设置容器中的工作目录

VOLUME 创建数据卷到容器目录,无法指定主机目录

EXPOSE 暴露容器端口,与主机无关

CMD 和 ENIRYPOINT 选择其一,镜像构建完成后,容器启动所要执行的脚本
CMD与ENTRYPOINT区别

  • CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换
  • ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)
  • ENTRYPOINT 的 Exec 格式用于设置容器启动时要执行的命令及其参数,同时可通过CMD命令或者命令行参数提供额外的参数
  • ENTRYPOINT 中的参数始终会被使用,这是与CMD命令不同的一点

构建镜像:docker build -t(表示用dockerfile构建)镜像名 dockerfile路径(dockerfile在当前目录可以用. 来表示)

为golang项目编写dockerfile

在项目根目录下创建dockerfile:

FROM golang:alpine


WORKDIR /build
COPY . .

RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod download

RUN go build -o httpTest

EXPOSE 8080

CMD ["/build/httpTest"]

运行命令
docker build -t httptest .
等待镜像构建


image.png

构建完成后输入
docker images查看镜像


image.png

运行命令创建并运行容器,将主机和容器的端口绑定起来(-P随机选择主机端口)
docker run -P httptest

查看正在运行的容器:docker ps


image.png

可以看到主机的32768端口和容器的8080端口已经绑定

在浏览器访问主机ip+端口/hello


image.png

构建成功!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容